天天看點

liunx 下巧妙使用代理伺服器(squid)

一、代理伺服器

簡介:

  代理伺服器是目前網絡中常見的伺服器之一,它可以提供檔案 

緩存、複制和位址過濾等服務,充分利用有限的出口帶寬,加快 

内部主機的通路速度,也可以解決多使用者需要同時通路外網但公 

有IP位址不足的問題。同時可以作為一個防火牆,隔離内網與外 

網,并且能提供監控網絡和記錄傳輸資訊的功能,加強區域網路的 

安全性等。它的主要作用有以下幾點。 

1.共享網絡 

2.加快通路速度,節約通信帶寬 

3.防止内部主機受到攻擊 

4.限制使用者通路,完善網絡管理

原理: 

① 用戶端A向代理伺服器提出通路Internet的請求。 

② 代理伺服器接受到請求後,首先與通路控制清單中的通路規則相對照,如果滿足規則,則在緩存中查找是否存在需要的資訊。 

③ 如果緩存中存在用戶端A需要的資訊,則将資訊傳送給用戶端。如果不存在,代理伺服器就代替用戶端向Internet上的主機請求指定的資訊。 

④ Internet上的主機将代理伺服器的請求資訊發送到代理伺服器中,同時代理伺服器會将資訊存入緩存中。 

⑤ 代理伺服器将Internet上主機的回應資訊傳送給用戶端A。 

⑥ 用戶端B向代理伺服器提出相同的請求。 

⑦ 代理伺服器也首先與通路控制清單中的通路規則相對照。 

⑧ 如果滿足規則,則将緩存中的資訊傳送給用戶端B。

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_13464152630BoJ.png"></a>

二、squid簡介  

  Squid是Linux和UNIX平台下最為流行的高性能免費應用 

層代理伺服器,它具有權限管理靈活、性能高和效率快等特 

點。Squid是一個由衆多在網際網路上的開發人員共同努力完 

成的高性能的代理緩沖伺服器,它的具體開發是由國家網絡 

應用研究室(the National Laboratory for Applied Network 

Research)的Duane Wessels主持,由NSF出資支援的。 

    Squid的另一個優越性在于它使用通路控制清單(ACL) 

和通路權限清單(ARL)進行權限管理和内容過濾。通路控 

制清單和通路權限清單通過阻止特定的網絡連接配接來減少潛在 

的Internet非法連接配接,可以使用這些清單來確定内部網的主 

機無法通路有威脅的或不适宜的站點。

三、CDN簡介:

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_13464152688ytf.png"></a>

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415273S4v1.png"></a>

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415278PEqK.png"></a>

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415283WHap.png"></a>

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415291vk32.png"></a>

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415306NlRP.png"></a>

檔案下載下傳加速服務:

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415316dijh.png"></a>

四、Web緩存的類型和特點:

Web緩存的位置可以有三種,一是可以防止在用戶端,二是放在伺服器,三是放在用戶端與伺服器之間的某個網絡節點上,這個網絡節點就是web代理伺服器。

1 用戶端緩存

2 代理伺服器緩存

3 伺服器緩存

三種典型的代理方式

1 傳統代理

2 透明代理

3 反向代理

五、配置簡介

1.檢視是否已安裝squid

Red Hat Enterprise Linux 5安裝程式預設沒有安裝Squid 

服務,讀者可以使用下面的指令檢查系統是否已經安裝了 

Squid服務或檢視已經安裝了何種版本。 

rpm -q squid

2.Squid代理服務的基本配置

2.1 Squid主配置檔案是/etc/squid/squid.conf ,最基本的設定如下。 

http_port 192.168.16.1:8080    

cache_mem 64 MB 

cache_dir ufs /var/spool/squid 4096 16 256 

cache_effective_user squid 

cache_effective_group squid 

dns_nameservers 61.144.56.101 

cache_access_log /var/log/squid/access.log 

cache_log /var/log/squid/cache.log 

cache_store_log /var/log/squid/store.log 

visible_hostname 192.168.16.1 

cache_mgr [email protected] 

acl all src 0.0.0.0/0.0.0.0 

http_access allow all

2.2 acl選項的格式如下: 

acl清單名稱 清單類型 [-i] 清單值 

清單名稱:用于區分Squid的各個通路控制清單,任何兩個通路控制清單不能用相同的清單名。雖然清單名稱可以随便定義,但為了避免以後不知道這條清單是幹什麼用的,應盡量使用有意義的名稱,如badurl、clientip和work time等。 

清單類型:是可被Squid識别的類别。Squid支援的控制類别很多,可以通過IP位址、主機名、MAC位址和使用者/密碼認證等識别使用者,也可以通過域名、域字尾、檔案類型、IP位址、端口和URL比對等控制使用者的通路,還可以使用時間區間對使用者進行管理 

-i選項:表示忽略清單值的大小寫,否則Squid是區分大小寫的。 

清單值:針對不同的類型,清單值的内容是不同的。例如,對于類型為src或dst,清單值的内容是某台主機的IP位址或子網位址;對于類型為time,清單值的内容是時間;對于類型為srcdomain和dstdomain,清單值的内容是DNS域名。

類型選項

2.3 http_access 的使用

Squid會針對客戶HTTP請求檢查http_access規則, 

定義通路控制清單後,就使用http_access選項根據訪 

問控制清單允許或禁止通路了。 

該選項的基本格式為: 

http_access [allow | deny] 通路控制清單名稱 

?  [allow | deny]:定義允許(allow)或禁止(deny)通路控制清單定義的内容。 

?  通路控制清單名稱:需要http_access控制的ACL名稱

2.4 初始化Squid

1.建立Squid使用硬碟緩沖區的目錄結構 

/usr/sbin/squid –z 

2.設定Squid錯誤提示資訊為中文 

    在Squid的主配置檔案/etc/squid/squid.conf中添加下 

列語句,并使用指令“/etc/init.d/squid reload”重新載 

入配置檔案 

error_directory /usr/share/squid/errors/Simplify_Chinese

2.5啟動和停止代理伺服器

1.啟動代理服務 

/etc/init.d/squid start 

2.停止代理服務 

/etc/init.d/squid stop 

3.重新啟動代理服務 

/etc/init.d/squid restart 

4.重新載入配置檔案 

/etc/rc.d/init.d/squid reload

六、具體案例

案例一:傳統代理:

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415331UrDl.png"></a>

介紹:

代理伺服器(squid):Red Hat Linux 5.4

(eth1 :Host-only 到vmware1 

   eth0: Bridged 到本地連接配接)

内網主機:windows xp  (虛拟機Host-only)

實機(windows 7)通過無線路由器直接上網!

1.用setup配網絡參數:

2. 安裝squid

[root@gjp99 ~]# mkdir /mnt/cdrom

[root@gjp99 ~]# mount /dev/cdrom /mnt/cdrom 

mount: block device /dev/cdrom is write-protected, mounting read-only

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415343voGv.png"></a>

[root@gjp99 Server]# rpm -ql squid |less

檢視注釋語句:

/etc/httpd/conf.d/squid.conf   //和Apache的代理捆綁在一起

/etc/pam.d/squid          //支援pam

/etc/rc.d/init.d/squid     //獨立守護程序

/etc/squid/squid.conf    // squid的主配置檔案

[root@gjp99 Server]# grep -v "^#" /etc/squid/squid.conf  |grep -v "^$" 

acl all src 0.0.0.0/0.0.0.0 

acl manager proto cache_object 

acl localhost src 127.0.0.1/255.255.255.255 

acl to_localhost dst 127.0.0.0/8 

acl SSL_ports port 443 

acl Safe_ports port 80        # http 

acl Safe_ports port 21        # ftp 

acl Safe_ports port 443        # https 

acl Safe_ports port 70        # gopher 

acl Safe_ports port 210        # wais 

acl Safe_ports port 1025-65535    # unregistered ports 

acl Safe_ports port 280        # http-mgmt 

acl Safe_ports port 488        # gss-http 

acl Safe_ports port 591        # filemaker 

acl Safe_ports port 777        # multiling http 

acl CONNECT method CONNECT 

http_access allow manager localhost 

http_access deny manager 

http_access deny !Safe_ports 

http_access deny CONNECT !SSL_ports 

http_access allow localhost 

http_access deny all      預設拒絕所有 

icp_access allow all 

http_port 3128        代理伺服器的監聽端口,最好在前面寫上具體ip位址, 

hierarchy_stoplist cgi-bin ? 

access_log /var/log/squid/access.log squid 

acl QUERY urlpath_regex cgi-bin \? 

cache deny QUERY 

refresh_pattern ^ftp:        1440    20%    10080 

refresh_pattern ^gopher:    1440    0%    1440 

refresh_pattern .        0    20%    4320 

acl apache rep_header Server ^Apache 

broken_vary_encoding allow apache 

coredump_dir /var/spool/squid

3.測試機配置:

3.1 配ip

走代理,dns也不用配置(無需位址解析)

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415346HaBT.png"></a>

3.2 代理設定

IE 右擊屬性----連接配接-----區域網路(LAN)設定

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415348jw55.png"></a>

3.3 參考文檔:

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415354Tjcy.png"></a>

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415361fKGh.png"></a>

3.4 主檔案配置:

[root@gjp99 Server]# ll /var/spool/squid/ 

total 0

說明:squid還沒有被初始化!

[root@gjp99 Server]# vim /etc/squid/squid.conf

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415367g2PY.png"></a>

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415368rC6E.png"></a>

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415370I6So.png"></a>

3.5 支援代理的軟體

浏覽器支援代理、聊天工具(qq支援代理)、下載下傳工具(如:網絡螞蟻):

登陸時設定:

3.6 客戶機通路外網測試:

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415391DNK3.png"></a>

重新整理頁面

[root@gjp99 Server]# tail -f /var/log/squid/ 

access.log  cache.log   squid.out   store.log   

[root@gjp99 Server]# tail -f /var/log/squid/access.log

t_search_word_style/piddomain.js - DIRECT/220.181.124.108 application/x-javascript 

修改squid.conf 檔案,避免其他人使用此代理伺服器通路外網!

類型參考:

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_13464154013c1A.png"></a>

4.代理伺服器安全應用測試:

4.1.拒絕某個人:禁止IP位址為192.168.2.22的客戶機上網。

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415402vor8.png"></a>

允許其他人:

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415403S1pA.png"></a>

[root@gjp99 Server]# service squid restart

測試:日志監視:

[root@gjp99 ~]# tail -f /var/log/squid/access.log

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415403P0SB.png"></a>

換了個ip,就能正常上網!(參考日志資訊)

4.2 拒絕某個網段的人:禁止192.168.2.0這個子網裡所有的客戶機上網。 

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415405ydbM.png"></a>

任選該網段的三個ip段作為測試:

4.3 拒絕通路某個ip的網站   禁止使用者通路IP位址為119.75.218.77的網站

主配置檔案的590行!

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415408CHjs.png"></a>

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415409a5pe.png"></a>

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415410T8EI.png"></a>

以上證明:拒絕ip,卻拒絕不了通路該網站,因為一個伺服器可對應于多個ip

4.4 拒絕通路帶某個域名的網站 :禁止使用者通路域名包含有sina.com的網站。

日志資訊:

4.5 禁止使用者通路域名包含有sex關鍵字的URL。

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415412jT6I.png"></a>

acl baddomain1 dstdomain -i www.163.com 

http_access deny baddomain1

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415417w8RX.png"></a>

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415418Pn8D.png"></a>

4.7 限制IP位址為192.168.2.100的客戶機并發最大連接配接數為5。 

acl clientip1 src 192.168.2.100 

acl conn5 maxconn 5 

http_access deny client1 conn1 

4.8 禁止192.168.2.0這個子網裡所有的客戶機在周一到周五的9:00到18:00上網。 

acl clientnet1 src 192.168.2.0/255.255.255.0 

acl worktime time MTWHF 9:00-18:00 

http_access deny clientnet1 worktime

下班時間可以正常上網:

[root@gjp99 ~]# date 

Fri Aug 31 18:37:49 CST 2012

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415419nnGJ.png"></a>

調整為上班時間:

[root@gjp99 ~]# date 083112302012 

Fri Aug 31 12:30:00 CST 2012

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415420biOS.png"></a>

4.9 禁止客戶機下載下傳*.mp3、*.exe、*.zip和*.rar類型的檔案。 

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415421L5tC.png"></a>

測試:迅雷中:

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415421OLdb.png"></a>

禁止的是用下載下傳工具下載下傳如(迅雷)如果網頁上直接儲存,可以下載下傳! 

4.10 禁止QQ通過Squid代理上網。 

acl qq url_regex -i tencent.com 

http_access deny qq

正常情況下,qq工具隻要設定代理方式中的任意一種也可登陸qq

qq已無法正常登陸!

<a href="http://5645432.blog.51cto.com/attachment/201208/31/5635432_1346415987sn6l.png"></a>

本文轉自 gjp0731 51CTO部落格,原文連結:http://blog.51cto.com/guojiping/978839

繼續閱讀