Squid代理linux
目標:web
瞭解squid的工做原理,熟練掌握squid的配置,實現其普通代理,透明代理,方向透明代理,http_access控制正則表達式
內容:apache
A.Squid簡介:vim
Squid代理是目前使用很是廣泛的一種將局域網和interner鏈接到一塊兒的方式,這樣作的理由和好處入下:瀏覽器
1, 能夠預存緩存,減輕服務器的訪問壓力,同是也能夠提升client的訪問速度。例如咱們平時用的126,163,都是基於squid代理緩存
2, 在必定程度上很大的解決了IP緊張的問題。安全
3, 它能夠對web訪問的方式基於應用層內容進行過濾控制,同時由於它介於服務器和client之間,在必定程度上提升了服務器的安全性。服務器
缺點:網絡
Squid支持的服務種類較少:HTTP. FTP.
Squid根據代理的方式分爲普通代理,透明代理,方向透明代理。
1. 標準的代理緩衝服務器
一個標準的代理緩衝服務器主要用來存儲用戶訪問過的網頁信息,當client向squid服務器請求時,squid服務器在向web請求數據,將數據傳給client的同時會緩存一份在本身緩存器中,在必定時間內有一樣的請求時,squid就不用再向webserver請求數據,而是直接將緩存中的數據恢復給庫戶端,這樣既提升了client的訪問速度,又大大減輕了服務器的訪問壓力。可是其最大的缺點是client須要在本身的web瀏覽器中配置squid代理服務器的地址和端口號,這很大程度上增長了client的難度和網絡管理員的管理難度。所以出項了下面的透明代理
2. 透明代理緩衝服務器
透明代理緩衝服務和標準代理服務器的功能徹底相同。可是,代理操做對客戶端的瀏覽器是透明的(即無需指明代理服務器的IP和端口)。咱們須要在linux squid代理服務器上作最一些相應的改動,並作iptables的端口轉發便可。這對與企業的網管主機共享接入到Internet很實用。
3. 反向代理緩衝服務器
反向代理是和前兩種代理徹底不一樣的一種代理服務。使用它能夠下降本地WEB服務器的負載。反向代理服務器承擔了對原始WEB服 務器的靜態頁面的請求,防止本地服務器過載。它位於本地WEB服務器和Internet之間,處理全部對WEB服務器的請求, 組織了WEB服務器和Internet的直 接通訊。若是互聯網用戶請求的頁面在代理服務器上有緩衝的話,代理服務器直接將緩衝內容發送給用戶。若是沒有緩衝則先向WEB服務器發出請求,取回數據,本地緩存後再發送給用戶。這種方式經過下降了向WEB服務器的請求數從而下降了WEB服務器的負載
B.Squid的基本配置
v squid軟件包
ü 軟件包名:squid-2.6.STABLE6
ü 服務名:squid
ü 主程序:/usr/sbin/squid
ü 配置目錄:/etc/squid/
ü 主配置文件:/etc/squid/squid.conf
ü 默認監聽端口:TCP 3128
ü 默認訪問日誌文件:/var/log/squid/access.log
v 經常使用配置項
ü http_port 3128
ü cache_mem 64 MB (爲本身物理內存的1/3便可)
ü maximum_object_size 4096 KB
ü reply_body_max_size 10240000 allow all
ü access_log /var/log/squid/access.log squid
ü visible_hostname proxy.test.com
ü cache_dir ufs (unix file system) /var/spool/squid (爲緩存目錄分配的磁盤空間) 100 (爲緩存目錄分配的磁盤空間(MB) 16 (緩存空間的一級子目錄個數)256 (緩存空間的二級子目錄個數)
經常使用命令
Squid –z 初始化緩存
Squid -k parser 分析配置文件語法錯誤
Squid -d 調試啓動 -D 啓動squid服務。
咱們來作個簡單實驗來實現一個簡單的透明代理:
實驗環境:
外網:192.168.0.254 (httpd,ftp)
Squid:eth0 192.168.0.20
eth1 10.0.2.150
內網:10.0.2.20
注意:
Squid默認是deny all的。咱們須要事先在squid.conf配置文件中在http_access deny all 的前面加入http_access allow all。啓動squid代理服務。在10.0.2.20的IE中加入squid的端口號以及IP地址。顯示出 RedHat enterprise test page爲正常
下面咱們來正是開始咱們的實驗:
1. 實現透明代理
透明代理的實現步驟:
修改squid.conf配置文件,並從新加載該配置
http_port 192.168.0.20:8080 transparent
[root@congtou squid]# service squid reload
添加iptables規則
[root@congtou squid]# iptables -t nat -A PREROUTING -i eth1 -s 10.0.2.150 -p tcp --dport 80 -j REDIRECT --to-ports 8080
客戶機瀏覽器
不須要在瀏覽器中指定代理服務器的地址、端口 http;//192.168.0.254
2. 實現反向透明代理
http_port 218.29.30.31:80 vhost
cache_peer 192.168.10.7 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.10.8 parent 80 0 originserver weight=5 max-conn=30
注意:
這裏須要注意的是反向透明代理是不能和透明代理一塊的實現的。
咱們須要取消掉剛纔透明代理的配置,再開始作反向透明代理。
反向透明代理的實現步驟
[root@mail postfix]# vim /etc/squid/squid.conf 在配置文件中添加以下語句:
http_port 10.0.2.100:80 vhost
cache_peer 192.168.0.254 parent 80 0 originserver weight=5 max-conn=30
cache_peer Web服務器地址 服務器類型 http端口 icp端口 [可選項]
(由於咱們這裏只有一個web服務服務器,這裏的意思是想讓你們瞭解下這個語句的用法) 權重爲5,最大的連接數爲30
測試
在10.0.2.150地址欄輸入 http;//10.0.2.100 出現測試頁爲正常
查看日誌記錄
[root@congtou named]# tail -1 /var/log/squid/access.log
1267973512.539 40 10.0.2.150(source) TCP_MISS/200 2795 GET http://10.0.2.100(destination)/icons/apache_pb2.gif - FIRST_UP_PARENT/192.168.0.254 (server)image/gif
下面咱們來作一些訪問規則的配置測試
v 訪問控制規則的匹配順序
ü 沒有設置任何規則時
—— 將拒絕全部客戶端的訪問請求
ü 有規則但找不到相匹配的項時
n 將採用與最後一條規則相反的權限,即若是最後一條規則是allow,那麼就拒絕客戶端的請求,不然容許該請求
n 當兩個命令羅列到一塊是取其交集
選項:
ü src
ü dst
ü port
ü srcdomain 來源域限制
ü dstdomain 轉發域限制
ü time 時間限制
ü maxconn 最大鏈接數限制
ü url_regex 正則表達式限制
ü urlpath_regex 正則表達路徑限制
ü arp mac限制
ü proto 協議限制
規則示例:
ü acl LAN1 src 192.168.10.0/24
ü acl PC1 src 192.168.10.12/32
ü acl Blk_Domain dstdomain .qq.com
ü acl Work_Hours time MTWHF 08:30-17:30
ü acl Max20_Conn maxconn 20
ü acl Blk_URL url_regex -i ^rtsp:// ^mms://
ü acl Blk_Words urlpath_regex -i sex adult
ü acl RealFile urlpath_regex -i \.rmvb$ \.rm$
要求:
容許10.0.2.0網段的主機在天天的8:00-18:00登陸192.168.0.254ftp服務,可是不能下載pdf格式的文件。
容許10.0.2.0網段的主機在22:00 -23:59 00:00-8:00 訪問服務器的httpd服務
在配置文件中作以下修改:
acl srcnetwork src 10.0.2.0/24 來源限制
acl desnetwork dst 192.168.0.0/24
acl ftptime time 8:00-18:00
acl httptime time 22:00-23:59
acl httptime time 00:00-8:00
acl ftp proto FTP
acl http proto HTTP
acl class url_regex ^.*\.pdf$
http_access allow srcnetwork desnetwork ftptime ftp !class
http_access allow srcnetwork desnetwork httptime http ==========》經測試成功,以上均成功
其餘的命令你們能夠本身測試試試。
Over