操作環境:(Redh5.8)
Client:192.168.8.70 (如圖:機器為8.70)
Squid:192.168.8.71(eth0) (如圖:機器為8.71)
172.16.1.16(eth1) (如圖: 機器為8.72)
Web: 172.16.1.17
圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnaugzM5QzM1MTOwMjM3AzMxAjMvw1MycDMvw1MxAjMvwVZslmZkF2bsBXdvwFdl5mL1YTM0lmL3d3dvw1LcpDc0RHaiojIsJye.jpg)
(注:實驗過程中涉及的dns相關内容沒有做)
Squid的主要功能:
1.支援HTTP,FTP協定
2.采用階層化緩存結構
3.支援代理SSL
4.實作了ICP(Internet緩存協定,HTCP(超文本緩存協定)等)
5.支援透明代理
6.支援WCCP(Web緩存通信協定)
7.支援豐富的通路控制清單功能
8.支援HTTP加速功能,實作反向代理
9.支援SNMP
10.支援緩存DNS查詢
一.正向代理(标準代理)
1. 一個标準的代理緩沖服務被用于緩存靜态的網頁(例如:html檔案和圖檔檔案等)到本地網絡上的一台主機上(即代理伺服器)。當被緩存的頁 面被第二次通路的時候,浏覽器将直接從本地代理伺服器那裡擷取請求資料而不再向原web站點請求資料。這樣就節省了寶貴的網絡帶寬,而且提高了通路速度。
2. 通路過程(如上圖)
@1.用戶端使用某一端口連接配接代理伺服器3128端口,請求web頁面(連接配接的網卡為eth0)
@2.代理伺服器向DNS請求得到相應的IP位址,然後,代理伺服器使用某一端口,向該IP位址的80端口發起web連接配接請求,請求web頁面。(連接配接的網卡為eht1)
@3.~@5收到響應的web頁面後,代理伺服器把該資料傳送給用戶端。并檢視自己有沒有緩存,若沒有緩存一份
@6.~@7.當用戶端再次通路時,直接通過緩存返給用戶端資訊
3.具體配置
(1)裝包
[root@tx2 ~]# yum install -y squid
(2)開啟包轉發
[root@tx2 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
(3)修改配置檔案
[root@tx2 ~]# vim /etc/squid/squid.conf
637 http_access allow all //給所有的用戶端開啟代理服務
921 http_port 192.168.8.71:3128 //設定squid監聽的端口//192.168.8.71的ip是squid與用戶端連結的網卡的ip位址。
1579 cache_mem 8 MB 設定squid占用的實體記憶體,一般為實體記憶體的1/3(代表squid能使用多少記憶體,如果你的記憶體足夠可以調的稍微大一些)
1786 cache_dir ufs /var/spool/squid 100 16 256 設定緩存的位置
@1.ufs :同步,有請求過來先把得到的資料寫入磁盤再處理請求
@2.aufs :異步,先響應請求再把資料寫入磁盤
@3.100 :M,緩存的資料大小
@4.16 :1級子目錄的數量
@5.256 :2級子目錄的數量
1842 cache_swap_low 90 最低“水位線“
//95:代表cache 占用swap的空間最多是百分之95,如果大于百分之95,squid會自動删除之前儲存的資料
1843 cache_swap_high 95 最高“水位線“
//90: 代表删除的時候還是會儲存最新的百分之90
2974 cache_effective_user squid 通知系統是以squid使用者的身份去執行
4. 配置web端的http服務
#yum install -y httpd
#cd /var//ww/html
#echo “helo tx” > index.html
#/etc/init.d/httpd start
5. 配置client端的浏覽器
@1.點選edit,然後點選edit下的Preferences
@2.點選Advanced----->Network-------->Settings
@3.如圖所示
配置完成
6.client端測試
二.Squid的透明代理
1.透明代理緩沖服務和标準代理伺服器的功能完全相同。但是,代理操作對用戶端的浏覽器是透明的(即不需指明代理伺服器的IP和端口)。透明代 理伺服器阻斷網絡通信,并且過濾出通路外部的HTTP(80端口)流量。如果用戶端的請求在本地有緩沖則将緩沖的資料直接發給使用者,如果在本地沒有緩沖則 向遠端web伺服器送出請求,其餘操作和标準的代理伺服器完全相同。
2通路過程
@1.用戶端向DNS請求,得到相應的IP位址。然後,用戶端使用某一端口,向該IP位址的80端口發起web連接配接請求,請求web頁面。
@2~@3.當該請求包通過透明代理伺服器時,被防火牆将該資料包重定向到代理伺服器的綁定端口3128。于是,透明代理伺服器用某一端口發起web連接配接請求,請求web頁面。
@4~@5收到響應的web頁面後,代理伺服器把該資料傳送給用戶端。并檢視自己有沒有緩存,若沒有緩存一份
(1)修改配置檔案
http_port 192.168.8.71:3128 transparent
(2)配置防火牆規則
[root@tx2 ~]# iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
//所有192.168.0.0這個網段通路squid的80端口,都由防火牆轉發到3128的squid服務端口
[root@tx2 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- 192.168.0.0/24 anywhere tcp dpt:http redir ports 3128
Chain POSTROUTING (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
[root@tx2 ~]# iptables -t nat -F
[root@tx2 ~]# service squid restart
Stopping squid: ................ [ OK ]
Starting squid: . [ OK ]
(3)用戶端取消代理
(4)配置用戶端網觀
[root@tx1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
添加GATEWAY=“squid的ip”
[root@tx1 ~]# /etc/init.d/network restart
(5)測試
三.反向代理(web加速)
1.反向代理是和前兩種代理完全不同的一種代理服務。使用它可以降低原始WEB伺服器的負載。反向代理伺服器承擔了對原始WEB伺服器的靜态頁 面的請求,防止原始伺服器過載。
2.通路過程
@1.用戶端通過浏覽器向DNS伺服器發送請求,由客戶所在地的DNS伺服器解析IP位址,并将結果傳回給使用者。
@2.客戶收到DNS傳回的伺服器IP位址,重新向DNS伺服器指向的IP位址發送通路請求。
@3.squid 伺服器接收到使用者的請求後,查詢自身緩存中是否有使用者請求内容,有則直接發送給用戶端
@4. 有則通過内部DNS輪詢查詢空閑伺服器,并将客戶請求發送到 該伺服器,在擷取到使用者資料并傳回給使用者的同時保留一份在自己本身的緩存當中。
在使用者看來,自己通路的是www.96333.com這個伺服器,實際上真 正的WEB伺服器為SQUID緩存後面的伺服器或者伺服器叢集,通過外部DNS做CNAME轉向,将使用者請求轉發到内部真正的web伺服器上去。
(1)[root@tx2 ~]# vim /etc/squid/squid.conf
923 http_port 80 transparent
924 cache_peer 172.16.1.17 parent 80 0 originserver no-query name= www
originserver 源點伺服器
no-query 不詢問
name=www 用來區分相似的查詢
(其他選項不變)
(2)測試
四.通路控制(ACL)
1.ACL元素
文法定義如下:
acl aclname acltype string1
acl aclname acltype "file"
//acltype可以是(src、dst、srcdomain、dstdomain、url_regex、urlpath_regex、time、port、proto、method)
(1) src:源位址。定義如下:
acl aclname src ip-address/netmask ... 客戶ip位址
acl:aclname src addr1-addr2/netmask ... 位址範圍
(2)dst:目标位址
acl aclname dst ip-address/netmask ...
(3)srcdomain:客戶所屬的域
acl aclname srcdomain foo.com ...
(4)dstdomain:請求伺服器所屬的域
acl aclname dstdomain foo.com ...
(5)time:通路時間
acl aclname time [day-abbrevs] [h1:m1-h2:m2][hh:mm-hh:mm]
1 S:指代Sunday
2 M:指代Monday
3 T:指代Tuesday
4 W:指代Wednesday
5 H:指代Thursday
6 F:指代Friday
7 A:指代Saturday
(6)port:通路端口。可以指定多個端口
acl aclname port 80 70 21 ...
acl aclname port 0-1024 ... 指定一個端口範圍
(7)proto:使用協定
acl aclname proto HTTP FTP ...
(8)method:請求方法
acl aclname method GET POST ...
(9)url_regex:URL規則表達式比對
acl aclname url_regex[-i] pattern
(10)urlpath_regex:URL-path規則表達式比對
acl aclname urlpath_regex[-i] pattern
2.http_access通路控制清單
根據通路控制清單允許或禁止某一類使用者通路。最後的條目設為“deny all”或“allow all”來避免安全性隐患。http_access Action聲明1 AND 聲明2 AND多個,http_access聲明間用或運算連接配接,但每個通路條目的元素間用與運算連接配接,清單中的規則總是遵循由上而下的順序。
3.執行個體應用
(1)禁止IP位址為192.168.8.200的客戶機上網
acl client src 172.16.1.2
http_access deny client
(2)禁止網段10-50上網
acl client src 172.16.1.10-172.16.1.50/32
(3)拒絕通路web的ip
acl client dst 192.168.1.2
(4)限制URL以 某些内容 開頭
acl client url_regex index
(5)限制URL 以 某些内容 結尾
acl client urlpath_regex \.html
(6)限制時間段
acl client time MTWHFA 9:00-18:00
(7)限制443端口上網
acl http port 443
http_access deny http
(8)限制使用者并發連接配接數為:5
acl clientsrc 172.16.1.15
acl conn5 max 5
http_access deny client conn5
(9)禁止下載下傳*.mp3$ *.exe$ *.zip$ *.rar$ *.doc$類型的檔案
acl client urlpath_regex -i \.mp3$ \.exe$ \.zip$ \.rar$ \.doc$