Squid在企業中的應用
Squid是一個很好的代理軟體,與NAT是不同的技術,具有很強的控制力度,是應用層的,能基于應用層參數【協定】、網絡層參數【位址】、傳輸層參數【協定 端口号等】進行控制,唯一的缺點是支援的應用少。而NAT支援的應用比較多。如ipsec、AH等。
Windows上的代理有:wingate sygate winroute proxy等等
Linux上的代理有:squid 等。
代理伺服器的原理、作用及緩存加速機制這裡就不提了,不懂的可以百度一下,代理一般走的端口号是8080或者是3128,squid的就是3128,下面是具體配置
CDN 内容分發網絡
1、Squid的安裝與簡單配置
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220207465.png"></a>
(圖一)
以上是我的區域網路拓撲圖 要求pc1通過squid代理伺服器通路到外網
(1)、首先配置eth0和eth1網卡及dns指向確定squid代理伺服器能與外網通信
(2)、 安裝squid伺服器
yum -y install squid yum 安裝
Rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm rpm安裝
配置目錄 /etc/squid/
預設通路日志檔案 /lvar/log/squid/access.log
監聽端口 http_port 3128
cache_mem 64M 用多少記憶體來進行緩存預設為64M
maxinum_object_size 4086KB 最大緩存對象4M
reply_body_max_size 10240000 allow all 最大通路的對象10M
visible_hostname proxy.test.com 這個地方一定要配置一下,可以任意寫一些内容,不配置squid伺服器啟動不起來,主要是在用戶端通路出錯時要顯示的字元
cache_dir ufs /var/spool/squid 100 16 256
Ufs 是緩存資料的存儲格式
/var/spool/squid/ 存放緩存存放的磁盤目錄 (在第一次啟動squid是初始化)
100 為緩存目錄配置設定的磁盤空間(預設100M)
16 緩存空間的一級子目錄 (16個)
256 緩存空間的二級子目錄 (265個)
由于squid.conf配置檔案很大,有4千多行,可以先用如下指令看一下沒用注釋的行,即要配置的内容。
grep -v "^#" squid.conf |grep -v "^$"
acl all src 0.0.0.0/0.0.0.0 用acl定義某些元素名稱,即政策元素
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來定義政策
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 監聽的端口,為了安全期間3128前面最好加一個位址,即eth1的位址,這樣隻允許内網的使用者使用squid伺服器。
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)、編輯squid.conf配置檔案(/et/c/squid/squid.conf)
添加如下二行
visible_hostname 192.168.2.100
http_port 192.168.2.100:3128
(4)、啟動squid伺服器
重新開機之前先檢查一下文法 squid -k parse
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220236392.png"></a>
上面提到的16X256個目錄在/var/spool/squid/下已建立
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220246113.png"></a>
Squid已經啟動了
(5)、在pc1上使用代理測試一下
在pc1上設定代理為,依次單擊IE浏覽器上的"工具">"Internet選項">"連接配接">選擇"區域網路設定"》如圖:
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220311323.png"></a>
通路一下百度看看
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220327411.png"></a>
用上面的出錯資訊可以看到,别拒絕了,因為預設是拒絕所有的http_access deny all ,是以為了我們測試在squid.conf配置檔案http_access deny all 前面再加上一句 http_access allow all 重新開機squid服務
(6)、再次測試并檢視squid日志
打開了百度網頁 ,好了可以上網了
其中日志中帶有的 TCP_HIT 表示緩存命中,可以提高通路速度,對應TCP_MISS表示緩存丢失
下面是執行個體
2、Squid實作正向代理
拓撲圖同圖一
1、禁止ip為192.168.2.2的内網通路外網
在squid中寫入下政策(在上述的基礎上)
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220340839.png"></a>
重新開機squid服務并測試和檢視日志
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220356372.png"></a>
2、禁止ip在192.168.2.2---2.10的内網通路外網
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220410259.png"></a>
重新開機squid服務并測試和檢視日志如下:(時刻要觀察日志)
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220425169.png"></a>
3、隻允許192.168.2.10的内網通路192.168.1.1進行路由管理
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220438861.png"></a>
4、綜合,禁止在上班時間08:00--18:00内通路網址中帶有"qq"的網址,禁止通路域名是.sina.com.cn的所有站點,禁止浏覽網站中的.jpg圖檔
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220544129.png"></a>
好了,1、2、3、4後都有http_access allow all 這一項,測試我就不截圖了,是沒問題的。
3、squid的透明代理
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220639712.png"></a>
本實驗的内網網段為192.168.2.0/24 代理伺服器的eth0網卡的ip位址為192.168.2.20 用于模拟連接配接内網 eht1的網卡ip位址為192.168.3.1用于模拟連接配接外網,内網使用者不需要配置使用代理的設定,就可以通過squid代理通路外網,即透明代理,,
内網的測試機的ip位址為192.168.2.10,外網web伺服器及DNS伺服器的ip位址都為192.168.3.100
按照以上拓撲圖,要求pc1通外網的DNS解析通路外網的web頁面
試驗配置如下:
(1)首先你必須先確定能啟動squid,如何啟動請看上面的配置
(2)打開資料包轉發功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 1為開啟 0 為關閉
sysctl -p 加載系統
(3)實作DNS解析通過
如果是靜态IP用下條指令
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -p udp --dport 53 -j SNAT --to 192.168.3.1
如果是動态的IP用下面的指令
iptables -t nat -R POSTROUTING 1 -s 192.168.2.0/24 -p udp --dport 53 -j MASQUERADE
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220701576.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220709620.png"></a>
(4)設定端口重定向
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
(5)編輯squid.conf
http_port 192.168.2.20:3128 transparent
http_access allow all
5、測試結果及squid日志
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220723711.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220733534.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220746233.png"></a>
4、squid之反向代理
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220756500.png"></a>
上述拓撲圖,某公司内網用一台web伺服器,要求internet的使用者通過通路本公司的合法ip即192.168.3.100的80端口即可通路内網的web伺服器。
我們用squid緩存伺服器的反向代理來實作
配置如下:
(2)修改squid.conf配置檔案 如下:
http_port 192.168.3.100:80 vhost
cache_peer 192.168.2.10 parent 80 0 originserver
http_access allow all
上面的一句話的意思是指明web伺服器的位址,在squid沒用查到使用者請求的資料後,會向自己的父級即内網web伺服器,去幫客戶去查詢。。
(3)重新開機squid ,在pc上通路192.168.3.100測試
<a target="_blank" href="http://blog.51cto.com/attachment/201211/220812917.png"></a>
可以了,不懂的可以留言
本文轉自 abc16810 51CTO部落格,原文連結:http://blog.51cto.com/abc16810/1052097