偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

借助Squid代理服務(wù)器,建立靈活的訪問控制系統(tǒng)

譯文
網(wǎng)絡(luò)
并非只有大企業(yè)和核實驗室才需要互聯(lián)網(wǎng)訪問策略和執(zhí)行該策略的手段。我家制定有互聯(lián)網(wǎng)訪問策略,而我用來執(zhí)行該策略的方法適用于幾乎任何企業(yè)組織。拿我家來說,我倒不過于擔(dān)心外部安全威脅。

并非只有大企業(yè)和核實驗室才需要互聯(lián)網(wǎng)訪問策略和執(zhí)行該策略的手段。我家制定有互聯(lián)網(wǎng)訪問策略,而我用來執(zhí)行該策略的方法適用于幾乎任何企業(yè)組織。拿我家來說,我倒不過于擔(dān)心外部安全威脅。我們的網(wǎng)絡(luò)在NAT路由器后面,無線網(wǎng)絡(luò)使用了相當(dāng)復(fù)雜的密碼。我們的工作站不是Linux電腦,就是打上相應(yīng)補丁的Windows電腦。不,我們擔(dān)心的問題恰恰來自網(wǎng)絡(luò)內(nèi)部:孩子們喜歡玩網(wǎng)絡(luò)游戲,而這常常妨礙其他事務(wù)和家庭作業(yè)。

我們還擔(dān)心,孩子們無意中瀏覽到不該訪問的網(wǎng)絡(luò)內(nèi)容。當(dāng)然,我們不是在保護什么核機密或知識產(chǎn)權(quán),而是讓全家人都能夠順利使用網(wǎng)絡(luò),又沒有不必要的擔(dān)憂。

我和妻子通常不在乎孩子們玩在線游戲還是播放流媒體。但是如果家庭作業(yè)或其他事務(wù)沒完成,我們想要一種手段來禁止孩子訪問這些內(nèi)容。問題在于,我們還施行在家教育,孩子們的教學(xué)內(nèi)容大多也放在網(wǎng)上。所以,我們根本沒法阻止孩子訪問。我們需要更靈活一點的方法。

我著手解決這個問題時,列出了想要完成的幾個目標(biāo):

1. 我不想讓管理孩子的互聯(lián)網(wǎng)訪問成為一項全職工作。我想要能夠制定策略,然后執(zhí)行策略。

2. 我妻子不想知道如何登錄、如何修改配置文件以及如何重啟代理守護程序。她只需要運行瀏覽器、勾選幾個方框就能完事。

3. 我不想編寫太多的代碼。我愿意編寫一點點代碼,但要是功能已經(jīng)有了,我可沒興趣白費力氣做重復(fù)工作。

4. 我想能夠執(zhí)行對我家來說很合理的幾乎任何策略。

5. 如果有人將筆記本電腦帶到外面去,我不希望影響他們訪問互聯(lián)網(wǎng)。

我確信并非只有我家才對這樣的結(jié)果有興趣。然而,我假設(shè)在其他企業(yè)組織可能沒有意義的一幕:我的孩子不會采取任何高明的措施來規(guī)避我們制定的策略。然而,要是孩子果真規(guī)避策略,我確實保留針鋒相對的權(quán)力。

為了撰寫本文,只要這個假定導(dǎo)致配置在較復(fù)雜的環(huán)境下可能毫無意義,我就會試著討論幾個辦法,好讓你可以加強配置。

我找不到市面上哪一款軟件包異常靈活,足以完成我想要實現(xiàn)的任務(wù),又足夠易于使用,那樣我和妻子沒必要花大力氣來使用它。我明白,我只需要稍微編寫一點代碼,Squid代理服務(wù)器有望實現(xiàn)我想要實現(xiàn)的功能。我編寫的代碼會告訴代理服務(wù)器如何處理接到的每個請求。代理服務(wù)器會完成用戶請求,或者向用戶發(fā)送網(wǎng)頁,表明用戶試圖訪問的網(wǎng)站受到了阻擋。這就是代理將執(zhí)行我們選擇的任何策略的方式。

我認定,我希望能夠為家人提供四種互聯(lián)網(wǎng)訪問級別當(dāng)中的一種。在兩種極端情況下,擁有“允許”訪問權(quán)的家人可以隨意訪問網(wǎng)站,而訪問權(quán)“被阻止”的家人無權(quán)隨意訪問網(wǎng)站。比如說,我和妻子就擁有“允許”訪問權(quán)。要是禁止某個孩子上網(wǎng),我們只要將他設(shè)為“阻止”狀態(tài)。

然而,能夠允許孩子只能訪問事先確定的網(wǎng)站列表(比如說用于教學(xué)內(nèi)容)也許是明智之舉。這種情況下,我們需要“僅限白名單”訪問級別。最后,我打算采用一種“過濾”的訪問級別,那樣我們在控制訪問方面能做得更精細一點,阻止音樂下載、Flash游戲和Java小應(yīng)用程序之類的內(nèi)容。這是孩子通常擁有的訪問級別。然后我們可以說“不再玩游戲”,讓代理服務(wù)器執(zhí)行該策略。

由于我不想為這一切編寫一個實際的界面,于是就使用phpMyAdmin來更新數(shù)據(jù)庫和設(shè)定策略(圖1)。為了授予特定的訪問級別,我只要更新格網(wǎng)中對應(yīng)的單元,1表示開啟,0表示關(guān)閉。

 借助Squid代理服務(wù)器,建立靈活的訪問控制系統(tǒng)

圖1:更改訪問策略的phpMyAdmin界面

執(zhí)行策略還需要一番客戶機配置,我稍后會加以討論。然而,我還要討論使用OpenDNS來過濾掉我不愿花時間來測試和過濾的內(nèi)容。這是縱深防御體系的一個典例。

我配置了OpenDNS,過濾掉沒想過要改變想法的內(nèi)容。我認為我家沒有任何理由能夠訪問約會網(wǎng)站、賭博網(wǎng)站或色情網(wǎng)站(圖2)。雖然不盡如人意,但OpenDNS的人員在過濾這類內(nèi)容方面做得相當(dāng)好,我自己沒必要做任何測試工作。

 借助Squid代理服務(wù)器,建立靈活的訪問控制系統(tǒng)

圖2:OpenDNS可過濾掉顯然不妥的內(nèi)容

我在前面提到,這會需要一番客戶機配置。大多數(shù)Web瀏覽器允許你配置瀏覽器,以便使用代理服務(wù)器來訪問互聯(lián)網(wǎng)。最簡單的辦法就是勾選復(fù)選框,開啟代理訪問功能。然而,要是我的孩子將筆記本電腦帶到圖書館,而我們的代理系統(tǒng)在圖書館無法使用,他們就沒法訪問互聯(lián)網(wǎng),這就違反了第五個目標(biāo)。于是,我決定使用大多數(shù)現(xiàn)代瀏覽器支持的自動代理配置。這就需要我編寫一個JavaScript函數(shù),確定如何來訪問網(wǎng)站,是直接訪問還是通過代理來訪問(代碼片段1)。

代碼片段1:自動代理配置腳本

1 function FindProxyForURL(url, host) {

2

3 if (!isResolvable("proxy.example.com") {

4 return "DIRECT";

5 }

6

7 if (shExpMatch(host, "*.example.com")) {

8 return "DIRECT";

9 }

10

11 if (isInNet(host, "10.0.0.0", "255.0.0.0")) {

12 return "DIRECT";

13 }

14

15 return "PROXY 10.1.1.158:3128; DIRECT";

16 }

每當(dāng)瀏覽器訪問網(wǎng)站,它會調(diào)用FindProxyForURL()函數(shù),看看應(yīng)該使用什么方法來訪問網(wǎng)站:是直接訪問,還是通過代理訪問。代碼片段1中顯示的函數(shù)僅僅是個例子,不過它演示了幾種值得一提的使用場合。從第15行可以看出,你能返回分號隔開的列表,該列表列出了使用的方法。瀏覽器會依次逐一嘗試。在這種情況下,如果代理碰巧訪問不了,你可以回退到直接訪問該網(wǎng)站的辦法。在比較嚴(yán)格的環(huán)境下,這可能不是正確的訪問策略。

在第11行上,你能發(fā)現(xiàn)我確??梢栽谖壹业木钟蚓W(wǎng)上直接訪問網(wǎng)站。在第7行上,我演示了如何測試特定的主機名稱。有幾個網(wǎng)站我通過工作站上的VPN隧道來訪問,所以我就無法使用代理服務(wù)器。最后在第3行上,你能看到蠻有意思的東西。這里,我測試查看某個主機名稱是否可以解析成IP地址。我配置了局域網(wǎng)的DNS服務(wù)器來解析該名稱,但是其他DNS服務(wù)器就無法解析。這樣一來,孩子們將筆記本電腦帶到家庭網(wǎng)絡(luò)外面后,瀏覽器不會試著使用代理服務(wù)器。當(dāng)然,我們完全可以切換故障、使用直接訪問方法,就像我們在第15上行做的那樣,但是故障切換需要時間。

比較懂行的用戶有可能規(guī)避代理自動配置。針對不同瀏覽器的一些插件可以防止用戶更改該配置。然而,這無法阻止用戶安裝新的瀏覽器或開啟新的火狐配置文件。想執(zhí)行該策略,萬無一失的方法就是在網(wǎng)關(guān)路由器處執(zhí)行:只要設(shè)定一條防火墻規(guī)則,阻止除代理服務(wù)器之外的任何IP地址訪問互聯(lián)網(wǎng)。如果需要的話,甚至可以為特定的客戶機/主機組合來設(shè)定防火墻規(guī)則。

你給網(wǎng)關(guān)路由器添加防火墻規(guī)則時,可能忍不住想配置路由器,以便通過代理服務(wù)器轉(zhuǎn)發(fā)所有的網(wǎng)絡(luò)流量,組成經(jīng)常所謂的透明代理服務(wù)器。然而,據(jù)RFC 3143認為,這并不是推薦的配置,因為它常常會擾亂瀏覽器緩存和歷史記錄等內(nèi)容。

所以前面已討論了客戶機、DNS和可能的路由器配置,現(xiàn)在就該看一看Squid代理服務(wù)器的配置了。安裝本身相當(dāng)簡單直觀。我就使用了發(fā)行版的程序包管理系統(tǒng),所以在此不作討論。Squid代理服務(wù)器提供了可以開啟的許多設(shè)置,以便優(yōu)化緩存和互聯(lián)網(wǎng)連接。盡管性能改進是實施代理服務(wù)器的一個附帶好處,但是那些配置選項不在本文探討范圍之內(nèi)。為了將我的代碼接入到系統(tǒng),只需要更改一處配置。只要編輯/etc/squid/squid.conf文件,添加下面這一行即可:

redirect_program /etc/squid/redirector.pl

這一個指令實際上告訴Squid代理服務(wù)器“詢問”我的程序如何處理客戶機提出的每個請求。

程序邏輯相當(dāng)簡單:

1. 偵聽STDIN、接收請求。

2. 解析請求。

3. 根據(jù)策略做出決定。

4. 將答復(fù)返回給代理服務(wù)器。

不妨看一下代碼片段2中的示例代碼。

代碼片段2:代理重定向器

1 #!/usr/bin/perl

2

3 use DBI;

4

5 $blocked = "http://192.168.1.10/blocked.html";

6

7 my $dbh = DBI->connect("dbi:mysql:authentication:host=

↪192.168.1.10", "user", "password") || die("Can\'t

↪connect to database.\n");

8

9 $|=1;

10

11 while () {

12 my($sth, $r, $c);

13 my($url, $client, $d, $method, $proxy_ip, $proxy_port);

14

15 chomp($r = $_);

16

17 if ($r !~ m/\S+/) { next; }

18

19 ($url, $client, $d, $method, $proxy_ip, $proxy_port)

↪= split(/\s/, $r);

20

21 $client =~ s/\/-//;

22 $proxy_ip =~ s/myip=//;

23 $proxy_port =~ s/myport=//;

24

#p#

25 $sth = $dbh->prepare("select * from web_clients

↪where ip=\'$client\'");

26 $sth->execute();

27 $c = $sth->fetchrow_hashref();

28

29 if ($c->{blocked} eq "1") {

30 send_answer($blocked);

31 next;

32 }

33

34 if ($c->{whitelist_only} eq "1") {

35 if (!is_on_list("dom_whitelist", $url)) {

36 send_answer($blocked);

37 next;

38 }

39 }

40

41 if ($c->{filtered} eq "1") {

42 if ($c->{games} eq "0") {

43 # Check URL to see if it's

↪on our games list

44 }

45

46 if ($c->{flash} eq "0") {

47 # Check URL to see if it looks

↪like flash

48 }

49

50 send_answer($url);

51 next;

52 }

53

54 if ($c->{open} eq "1") {

55 send_answer($url);

56 next;

57 }

58

59 send_answer($url);

60 next;

61 }

62

63 exit 0;

64

65 #############################################################

66

67 sub send_answer {

68 my($a) = @_;

69 print "$a\n";

70 }

71

72 sub is_on_list {

73 my($list, $url) = @_;

74 my($o, @a, $i, @b, $b, $sth, $c);

75

76 $url =~ s/^https*:\/\///;

77 $url =~ s/^.+\@//;

78 $url =~ s/[:\/].*//;

79

80 @a = reverse(split(/\./, $url));

81

82 foreach $i (0 .. $#a) {

83 push(@b, $a[$i]);

84 $b = join(".", reverse(@b));

85

86 $sth = $dbh->prepare("select count(*) from

↪$list where name=\'$b\'");

87 $sth->execute();

88 ($c) = $sth->fetchrow_array();

89

90 if ($c > 0) { return $c; }

91 }

92

93 return $c+0;

94 }

95

主循環(huán)在第11行開始,它從STDIN讀取。第11行至第24行主要涉及解析來自Squid代理服務(wù)器的請求。在第25行至第28行,程序查詢數(shù)據(jù)庫,看看某個客戶機有什么樣的權(quán)限。第29行至第57行是查看從數(shù)據(jù)庫讀取了什么樣的權(quán)限,然后返回相應(yīng)值。在客戶機被允許“過濾”訪問互聯(lián)網(wǎng)的情況下,我在頭腦中對邏輯有了輪廓。我不想本文糾纏于瑣碎的代碼。更重要的是演示Squid代理重定向系統(tǒng)的結(jié)構(gòu)和一般邏輯,而不是提供完整代碼。不過你會發(fā)現(xiàn),我只要用短短幾行代碼和正則表達式,就能實施幾乎任何想得到的訪問策略。

從第67行開始的send_answer()函數(shù)其實眼下沒有多大作用,不過以后,我可以在這里相當(dāng)輕松地添加一些日志功能。

從第72行開始的is_on_list()函數(shù)也許有點意思。該函數(shù)拿來客戶機試圖訪問的主機名稱后,將它細分成子域列表。然后,它檢查那些子域是否列在數(shù)據(jù)庫中,數(shù)據(jù)庫名稱作為參數(shù)來傳遞。這樣一來,我只要把example.com放入到數(shù)據(jù)庫,它就會匹配example.com、www.example.com或webmail.example.com。

通過傳遞不同的表名稱,我就能使用同樣的匹配算法來匹配許多不同的訪問控制列表。

正如你所見,代碼其實并不是很復(fù)雜。但是由于添加了一點復(fù)雜性,我應(yīng)該能夠執(zhí)行能想得到的幾乎任何訪問策略。然而,有一個方面需要加以改進。就處理的每個訪問請求而言,程序要訪問數(shù)據(jù)庫好幾次。這種操作的效率極其低下,等到你看到本文,我可能已經(jīng)實施了某種緩存機制。

然而,緩存也會讓系統(tǒng)不太迅即響應(yīng)訪問策略變更或訪問控制列表,因為我不得不等待緩存信息過期或重啟代理守護程序。

實際上,我見過值得一提的方法。大多數(shù)網(wǎng)站瀏覽器有各自的緩存機制。由于該緩存,如果你更改了代理服務(wù)器處的訪問策略,客戶機并不總是意識到變更。在“敞開”訪問權(quán)的情況下,客戶就需要刷新緩存,那樣才能訪問之前受阻的內(nèi)容。在限制訪問的情況下,該內(nèi)容在緩存過期之前仍可能可用。一個解決辦法就是,將本地緩存大小設(shè)為0,就依賴代理服務(wù)器的緩存。

此外,一旦客戶機經(jīng)過配置、與本地網(wǎng)絡(luò)上的代理服務(wù)器對話,就有可能換入不同的代理服務(wù)器,或者甚至以菊花鏈方式連接代理服務(wù)器,而客戶機不需要任何操作。這就帶來了這種可能性:比如說,使用Dan's Guardian進行內(nèi)容過濾,另外還能控制訪問。

至此,大家可能會想我在控制方面有點過于嚴(yán)格了。然而,我家人把大量時間花在網(wǎng)上――有時太過分了。大多數(shù)時候,我家人在適度使用互聯(lián)網(wǎng),但要是使用沒節(jié)制,我和妻子需要有一種手段來執(zhí)行家規(guī),又沒必要老是監(jiān)控孩子們。

責(zé)任編輯:何妍 來源: 51CTO.com
相關(guān)推薦

2019-04-08 08:39:47

Nginx代理服務(wù)器

2012-09-18 09:55:28

2020-08-02 15:00:40

SquidSSH系統(tǒng)運維

2011-02-21 09:24:05

2009-12-03 18:07:48

Squid代理服務(wù)器

2019-06-18 08:27:37

Squid代理服務(wù)器IP代理池

2009-02-12 15:51:00

squid代理服務(wù)器web服務(wù)器

2010-11-15 14:46:04

linuxsquidsquidGuard

2024-02-20 14:53:01

2024-11-21 09:18:08

2009-02-10 15:42:00

代理服務(wù)器代理服務(wù)器設(shè)置

2009-02-27 14:12:00

socks5代理服務(wù)器服務(wù)器

2010-03-24 17:01:00

Nginx代理服務(wù)器

2009-12-16 16:41:44

Linux代理服務(wù)器

2009-02-12 15:43:00

CCProxy代理服務(wù)器

2009-08-18 11:04:50

代理服務(wù)器設(shè)置代理服務(wù)器地址

2011-04-20 16:59:31

2018-11-05 09:34:43

2010-03-09 11:21:24

代理服務(wù)器工作原理域名服務(wù)器工作原理

2018-04-17 12:10:40

點贊
收藏

51CTO技術(shù)棧公眾號