什麼是Squid ?
Squid 扮演著一種中介的角色,可用來節省使用者在連結網頁時所使用的頻寬,加快內部網路訪問的速度,並且也能提供監控記錄方便查詢。
Squid代理伺服器是網路上常見的服務之一優點如下:
1. 可以儲存暫存,減少伺服器的負載,同時也可提升Client訪問網頁的速度。
2. 可以解決現階段IPv4不足的問題,減少外網IP使用量。
3. 可對Web訪問時對內容進行過濾,設定一些網頁訪問的規則。也正因為介於伺服器和Client之間,在某些程度上可提高伺服器的安全性。
在 Squid 代理上可分為 正向代理、反向代理、通透式代理(透明代理)。以下就來介紹正向代理 (Forward Proxy)
正向代理 (Forward Proxy)
此類型的代理主要是位於客戶端和伺服器之間的Proxy Server,也是最常見的服務。主要應用為當客戶端透過Forward Proxy連上網路並要連結到其他網頁時,此時的Squid Forward Proxy 就會先將該網頁的資料暫存一份於Proxy Server上。然後當下一位使用者要連結時便可快速提供相關資料。已減少頻寬的消耗。
環境
Centos 5.8 64位元
squid-2.6.STABLE21-6.el5
正向代理 (Forward Proxy)
Server端
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 修改Proxy協定port
3128 port可自行修改為合適的埠口
1 2 |
[root@localhost ~]# vim /etc/squid/squid.conf http_port 3128 |
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 |
[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 |
修改後
1 2 3 4 5 6 7 8 9 |
[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 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 |
[root@localhost ~]# vim /etc/squid/squid.conf # cache_dir ufs /var/spool/squid 100 16 256 |
修改後
1 2 |
[root@localhost ~]# vim /etc/squid/squid.conf 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 |
[root@localhost ~]# vim /etc/squid/squid.conf # cache_mem 8 MB |
修改後
1 2 |
[root@localhost ~]# vim /etc/squid/squid.conf 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 |
[root@localhost ~]# vim /etc/squid/squid.conf # minimum_object_size 0 KB # maximum_object_size 4096 KB |
修改後
1 2 3 |
[root@localhost ~]# vim /etc/squid/squid.conf 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 |
[root@localhost ~]# vim /etc/squid/squid.conf # cache_swap_low 90 # cache_swap_high 95 |
修改後
1 2 3 |
[root@localhost ~]# vim /etc/squid/squid.conf 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 |
[root@localhost ~]# vim /etc/squid/squid.conf #cache_effective_user squid #cache_effective_group squid |
修改後
1 2 3 |
[root@localhost ~]# vim /etc/squid/squid.conf 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. 防火牆設定
可參考FAQ設定範例 iptables
在防火牆的部份,如果在squid.conf設定2.2 中,有設定到acl faq_test src 192.168.100.0/24 允許此網段使用的話,防火牆也要設定允許此網段IP通過3128 port。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[root@localhost ~]# vim /etc/sysconfig/iptables # Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :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 --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -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 ESTABLISHED,RELATED -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.100.0/24 --dport 3128 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT |
4.啟動設定
4.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語法配置是否正確,若無顯示表示正常 |
4.2檢查是否正常啟動
Squid 的預設port為3128,可查看此port是否正常LISTEN
或是使用ps來查看是否有正常在運作中
1 2 3 4 5 6 7 |
[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端。以下使用IE瀏覽器為範例
1. [開啟IE] → [工具] → [網際網路選項]
2. [連線] → [區域網路設定]
3. 請把[在您的區域網路使用Proxy伺服器]打勾 → [進階]
4. 然後在HTTP的地方輸入 Squid的ip和連接埠,之後就可以開啟ie上網了
[Note] 由於Firefox的設定不吃windows內的,所以若使用Firefox還請在自行設定。
評論
此文章尚無評論。