什麼是Squid ?
Squid 扮演著一種中介的角色,可用來節省使用者在連結網頁時所使用的頻寬,加快內部網路訪問的速度,並且也能提供監控記錄方便查詢。
Squid代理伺服器是網路上常見的服務之一優點如下:
1. 可以儲存暫存,減少伺服器的負載,同時也可提升Client訪問網頁的速度。
2. 可以解決現階段IPv4不足的問題,減少外網IP使用量。
3. 可對Web訪問時對內容進行過濾,設定一些網頁訪問的規則。也正因為介於伺服器和Client之間,在某些程度上可提高伺服器的安全性。
在 Squid 代理上可分為 正向代理、反向代理、通透式代理(透明代理)。以下就來介紹正向代理 (Forward Proxy)
通透式代理 (Transparent Proxy)
Transparent Proxy在客戶端不需要做任何設定。主要是在Proxy Server啟用NAT服務和在防火牆設定上將NAT的80 port 轉向到3128 port、並且在squid上啟用transparent 功能。
系統環境
Centos 5.8 64位元
squid-2.6.STABLE21-6.el5
設定
首先先說明一下,不論是Reverse Proxy(反向代理)或是Transparent Proxy(通透式代理)都是由Forward Proxy(正向代理)修改設定而來的。因此在設定值說明部份以Forward Proxy為主,至於其他兩個代理也會在需要修改的地方加以註明。
通透式代理 (Transparent Proxy)
Server端
通透式代理和正向代理在設定上大至都一樣,所以在squid.conf配置上若沒特別說明的話,就和正向代理設定一樣。
只是通透式代理多了以下幾種設定
1. squid.conf啟動transparent功能
2. 開啟 NAT 服務
3. 對外防火牆上設定NAT
4. 防火牆的NAT加上一條規則,把port80轉導到port3128
1. 安裝Squid
1.1 先檢查是否已經有安裝Squid
1 2 |
[root@localhost ~]# rpm -qa |grep squid squid-2.6.STABLE21-6.el5 |
1.2 如果沒安裝的話請自行安裝
1 |
[root@localhost ~]# yum -y install squid |
2. squid.conf配置
可參考FAQ範例 squid.conf
2.1 啟動transparent功能
1 2 3 4 5 6 |
[root@localhost ~]# vim /etc/squid/squid.conf #修改前 http_port 3128 #修改後 http_port 3128 transparent |
2.2 開放特定網段的 Proxy 客戶端設定
由於squid 預設只允許 locahost 來使用Proxy Server,因此須要修改一下,才可讓其他使用者使用。
添加兩筆設定
acl faq_test src 192.168.100.0/24
http_access allow faq_test
acl 的部份 增加 「acl faq_test src 192.168.100.0/24」。「faq_test」只是一個名稱,可任意修改只要不重覆就可以了。而「192.168.100.0/24」則是設定來源IP,若是想開放給外部任何人使用的話可以設定為「0.0.0.0/0.0.0.0」
http_acces 的部份則是用來設定允許拒絕的部份。增加「http_access allow faq_test」。(faq_test指的是第一行acl定義的名稱)。在設定http_acces時要特別注意順序,必須要設定在「http_access deny all」之前,否則會被deny all的設定先拒絕掉了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@localhost ~]# vim /etc/squid/squid.conf #修改前 #acl our_networks src 192.168.1.0/24 192.168.2.0/24 #http_access allow our_networks # And finally deny all other access to this proxy http_access allow localhost http_access deny all #修改後 #acl our_networks src 192.168.1.0/24 192.168.2.0/24 #http_access allow our_networks acl faq_test src 192.168.100.0/24 http_access allow faq_test # And finally deny all other access to this proxy http_access allow localhost http_access deny all |
2.3修改快取目錄的相關設定 (cache_dir)
此目錄主要是用來存放快取資料的位置和相關設定,磁碟快取是影響proxy效能的一個相當重要的參數。
cache_dir ufs /var/spool/squid 100 16 256
100 表示為磁碟使用量為100MB (可自行修改)
16 表示在第一層共有16個次目錄
256 表示在每層次目錄內再分為256個次目錄
比較常見的快取目錄且效能較佳的為16 256或64 64。因為在這兩層次目錄的部份是可不用去做修改。只需修改磁碟使用量。
1 2 3 4 5 6 |
[root@localhost ~]# vim /etc/squid/squid.conf # 修改前 # cache_dir ufs /var/spool/squid 100 16 256 # 修改後 cache_dir ufs /var/spool/squid 10240 16 256 |
2.4 記憶體
2.4.1 squid 使用的記憶體計算方式
給proxy 額外使用的記憶體,主要用來處裡較為熱門的快取資料。預設1GB的磁碟快取會佔用約10M的記憶體,而Squid本身會佔用約15MB。在上述1.3 時,設定磁碟大小為10GB,整體Squid會使用到的記憶大小試算方式如下:
10 * 10 + 15 + “cache_mem 設定值 (8)”= 123MB
在Squid的官網上建議實體記憶體的大小最好是上面試算出來的兩倍以上,如此一來效能才會比較好一些。
2.4.2設置快取記憶體
如果實體記憶體比較大時,可透過修改快取記憶體來提升squid的效能
cache_mem預設是8MB,可依各人需求修改
1 2 3 4 5 6 |
[root@localhost ~]# vim /etc/squid/squid.conf #修改前 # cache_mem 8 MB #修改後 cache_mem 512 MB |
2.5 設定LOG存放位置
基本上LOG預設都是存放在/var/log/squid裡。如果有需要修改的也可以自行修改存放路徑。
cache_access_log曾經使用過 squid 的用戶記錄
cache_log 暫存LOG
cache_store_log 儲存使用狀態的LOG
1 2 3 4 |
[root@localhost ~]# vim /etc/squid/squid.conf cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log |
2.6 快取磁碟的設定
以下兩種設定方式,都是為兩避免因為快取磁碟被裝滿後,進而造成squid無法使用。
2.6.1設定檔案是否快取儲存
minimum_object_size 設定小於多少KB的資料不放到快取內,0為不限制
maximum_object_size 設定大於多少KB的資料不放到快取內,預設為4MB
有關快取大小的設定,可依個人情況設定。
1 2 3 4 5 6 7 8 |
[root@localhost ~]# vim /etc/squid/squid.conf #修改前 # minimum_object_size 0 KB # maximum_object_size 4096 KB #修改後 minimum_object_size 0 KB maximum_object_size 4096 KB |
2.6.2 設定控制磁碟容量上限
cache_swap_high 95 當磁碟使用超過95%時,開始刪除舊有的快取
cache_swap_low 90 當刪除到90%時,停止刪除。
也就是說,假設我的磁碟空間有10GB,然後當使用到10G*0.95=9.5G時,就會開始從磁碟空間中最舊的資料開始刪除。然後當刪除到剩下10G*0.9=9G時,就會停止刪除了。基本上這樣的設定就足夠使用了,所以也不用特意的去修改數值。
1 2 3 4 5 6 7 8 |
[root@localhost ~]# vim /etc/squid/squid.conf #修改前 # cache_swap_low 90 # cache_swap_high 95 #修改後 cache_swap_low 90 cache_swap_high 95 |
2.7 設置squid主機名稱
會需要設定visible_hostname 主要是因為,若DNS解析有問題時,會找不到主機名而出錯,因此加上此設定可避免此問題,也可減少無法啟動squid的問題。
visible_hostname squid.faq-test.tk squid.faq-test.tk可修改為該台主機名稱或是內網IP
1 2 3 |
[root@localhost ~]# vim /etc/squid/squid.conf #請添加在最後一行 visible_hostname squid.faq-test.tk |
2.8 設定使用者與使用者群組
1 2 3 4 5 6 7 8 |
[root@localhost ~]# vim /etc/squid/squid.conf #修改前 #cache_effective_user squid #cache_effective_group squid #修改後 cache_effective_user squid cache_effective_group squid |
若是有設定此項的話,請記得新增使用者和組群。
1 2 |
[root@localhost ~]# useradd -g squid -s /sbin/nologin squid [root@localhost ~]# groupadd squid |
也要查看一下LOG是否也為該使用者,若有問題的話請記得修改權限
1 2 3 4 5 |
[root@localhost ~]# ls -ahl /var/log/squid/ -rw-r----- 1 squid squid 7.9K Nov 23 08:03 access.log -rw-r----- 1 squid squid 32K Nov 25 22:57 cache.log -rw-r--r-- 1 squid squid 47 Nov 23 07:57 squid.out -rw-r----- 1 squid squid 4.7K Nov 25 22:05 store.log |
3. 開啟NAT服務
1 2 3 4 5 6 7 8 |
[root@localhost ~]# vim /etc/sysctl.conf #修改前 net.ipv4.ip_forward = 0 #修改後 net.ipv4.ip_forward = 1 [root@localhost ~]# sysctl -p #使設定馬上生效無須重開機 |
4. 防火牆設定
可參考FAQ 設定完成的範例 iptables
4.1 設定NAT服務的防火牆設定
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE
192.168.100.0/24 這是自行設定所允許通過的IP
eth0 指的是外網的網卡
1 2 3 |
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE [root@localhost ~]# /etc/init.d/iptables save [root@localhost ~]# /etc/init.d/iptables restart |
設定好後看的到iptables 如下 可參考FAQ範例 iptables-nat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
[root@localhost ~]# vim /etc/sysconfig/iptables # Generated by iptables-save v1.3.5 on Sun Jun 17 00:23:46 2012 *nat :PREROUTING ACCEPT [9:1467] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A POSTROUTING -s 192.168.100.0/255.255.255.0 -o eth0 -j MASQUERADE COMMIT # Completed on Sun Jun 17 00:23:46 2012 # Generated by iptables-save v1.3.5 on Sun Jun 17 00:23:46 2012 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [107:31184] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT -A RH-Firewall-1-INPUT -p ah -j ACCEPT -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Sun Jun 17 00:23:46 2012 |
4.2 防火牆的NAT加上一條規則,把port80轉導到port3128
1 2 3 |
[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp -s 192.168.100.0/24 --dport 80 -j REDIRECT --to-ports 3128 [root@localhost ~]# /etc/init.d/iptables save [root@localhost ~]# /etc/init.d/iptables restart |
設定好後看的到iptables 如下 可參考FAQ範例 iptables-80-3128
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
[root@localhost ~]# vim /etc/sysconfig/iptables # Generated by iptables-save v1.3.5 on Sun Jun 17 00:39:50 2012 *nat :PREROUTING ACCEPT [461:84093] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A PREROUTING -s 192.168.100.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 -A POSTROUTING -s 192.168.100.0/255.255.255.0 -o eth0 -j MASQUERADE COMMIT # Completed on Sun Jun 17 00:39:50 2012 # Generated by iptables-save v1.3.5 on Sun Jun 17 00:39:50 2012 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [167:34732] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT -A RH-Firewall-1-INPUT -p ah -j ACCEPT -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Sun Jun 17 00:39:50 2012 |
4.3 添加一筆允許3128 port通過
-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 3128 -j ACCEPT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
[root@localhost ~]# vim /etc/sysconfig/iptables # Generated by iptables-save v1.3.5 on Sun Jun 17 00:39:50 2012 *nat :PREROUTING ACCEPT [461:84093] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A PREROUTING -s 192.168.100.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 -A POSTROUTING -s 192.168.100.0/255.255.255.0 -o eth0 -j MASQUERADE COMMIT # Completed on Sun Jun 17 00:39:50 2012 # Generated by iptables-save v1.3.5 on Sun Jun 17 00:39:50 2012 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [167:34732] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT -A RH-Firewall-1-INPUT -p ah -j ACCEPT -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Sun Jun 17 00:39:50 2012 |
4.4 添加一筆 允許外網網卡的通過
-A FORWARD -o eth0 -j ACCEPT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
[root@localhost ~]# vim /etc/sysconfig/iptables # Generated by iptables-save v1.3.5 on Sun Jun 17 00:39:50 2012 *nat :PREROUTING ACCEPT [461:84093] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A PREROUTING -s 192.168.100.0/255.255.255.0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 -A POSTROUTING -s 192.168.100.0/255.255.255.0 -o eth0 -j MASQUERADE COMMIT # Completed on Sun Jun 17 00:39:50 2012 # Generated by iptables-save v1.3.5 on Sun Jun 17 00:39:50 2012 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [167:34732] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -o eth0 -j ACCEPT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT -A RH-Firewall-1-INPUT -p ah -j ACCEPT -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Sun Jun 17 00:39:50 2012 |
5. 啟動設定
5.1 Squid 運行參數說明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
啟動 [root@localhost ~]# /etc/init.d/squid start #啟動 [root@localhost ~]# squid -D #背景執行 [root@localhost ~]# squid -NCd1 #前台正式運行,用于debug很好用 停止 [root@localhost ~]# /etc/init.d/squid stop #停止 [root@localhost ~]# squid -k shutdown #停止squid 開機啟動 [root@localhost ~]# chkconfig squid on #開機啟動 不停 squid 更新squid.conf [root@localhost ~]# /etc/init.d/squid reload [root@localhost ~]# squid -k reconfig List 設定好的squid.conf [root@localhost ~]# egrep -v '^#|^$' /etc/squid/squid.conf 其他使用 [root@localhost ~]# squid -z #初始化Squid 建立暫存目錄 [root@localhost ~]# squid -k parse #檢查squid.conf語法配置是否正確,若無顯示表示正常 |
5.2檢查是否正常啟動
Squid 的預設port為3128,可查看此port是否正常LISTEN
或是使用ps來查看是否有正常在運作中
1 2 3 4 5 6 7 8 |
[root@localhost ~]# netstat -na | grep -w 3128 tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN [root@localhost ~]# ps ax | grep squid 4022 ? Ss 0:00 avahi-daemon: running [squid.local] 7740 ? Ss 0:00 squid -D 7742 ? S 0:00 (squid) -D 7755 pts/0 S+ 0:00 grep squid |
[Note] 當Client端設定好,可使用網頁後。Server端可查看access.log和store.log會有相關記錄
Client端
在設定完Squid 正向代理的server端後,就來設定Client端。
1. [控制台] → [網路和網際網路]
2. 點選 [網路和共用中心]
3. 點選 [變更介面卡設定]
4. [區域網路] → [右鍵內容] → [TCP/IP4] → [內容]
5. IP設定
Transparent Proxy 在Client端最大的差別在於IP的設定
IP 位址 : 指定同網段不重覆的IP(此部份也需看squid.conf所允許通過的IP)
子網路遮罩 : 設定為該網段對應的子網路遮罩
預設閘道 : 設定為Transparent Proxy 的IP(至於IP的部份就需要看squid防火牆是允許內網還是外網IP)
慣用DNS伺服器 : 若是有自己的DNS Server 可指到自己的DNS Server,就設定為google的8.8.8.8或中華電信的168.95.1.1
評論
此文章尚無評論。