Squid三種代理方式的實現及ACLhtml
操做環境:(Redh5.8)web
Client:192.168.8.70 (如圖:機器爲8.70)vim
Squid:192.168.8.71(eth0) (如圖:機器爲8.71)瀏覽器
172.16.1.16(eth1) (如圖: 機器爲8.72)緩存
Web: 172.16.1.17安全
圖:服務器
(注:實驗過程當中涉及的dns相關內容沒有作)網絡
Squid的主要功能:併發
1.支持HTTP,FTP協議dom
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頁面後,代理服務器把該數據傳送給客戶端。並查看本身有沒有緩存,若沒有緩存一份
@6.~@7.當客戶端再次訪問時,直接經過緩存返給客戶端信息
3.具體配置
(1)修改配置文件
[root@tx2 ~]# vim /etc/squid/squid.conf
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)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[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服務器上去。
3.具體配置
(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
http_access deny client
(3)拒絕訪問web的ip
acl client dst 192.168.1.2
http_access deny client
(4)限制URL以 某些內容 開頭
acl client url_regex index
http_access deny client
(5)限制URL 以 某些內容 結尾
acl client urlpath_regex \.html
http_access deny client
(6)限制時間段
acl client time MTWHFA 9:00-18:00
http_access deny client
(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$
http_access deny client
注:這些訪問控制能夠根據實際狀況加到上面的三種代理方式中,訪問控制要寫的有意義