Squid代理伺服器
一、快取代理概述
作為應用層的代理服務軟體,Squid主要提供快取加速、應用層過濾控制的功能。
1.代理的工作機制
當客戶機通過代理來請求Web頁面時,指定的代理伺服器會先檢查自己的快取,如果快取中已經有客戶機需要的頁面,則直接將快取中的頁面內容反饋給客戶機;如果快取中沒有客戶機要的訪問的頁面,則由代理伺服器向Internet傳送訪問請求,當獲得返回的Web頁面以後,將網頁資料儲存到快取中併發送給客戶機。
作用:
減少了向Internet提交重複的Web請求的過程,提高了客戶機的Web訪問響應速度;
客戶機的web訪問請求實際上是由代理伺服器來代替完成的,從而可以隱藏使用者的真實IP地址;
代理伺服器有機會針對要訪問的目標、客戶機的地址、訪問時間段等進行過濾控制,還能起到監控的作用。
2.代理的基本型別
傳統代理:首先必須在客戶機的瀏覽器、QQ聊天工具、下載軟體等程式中手動設定代理服務器的地址和埠,然後才
能使用代理來訪問網路。網頁瀏覽器訪問網站時的域名解析請求也會發給指定的代理伺服器。
透明代理:提供與傳統代理形同的功能和服務,其區別在於客戶機不需要指定代理伺服器的地址和埠,而是通過默
認路由、防火牆策略將Web訪問重定向。重定向的過程對客戶機來說是“透明”的,使用者甚至不知道自己在
使用代理服務,所以稱為“透明代理”。網頁瀏覽器訪問網站時的域名解析請求將優先發給DNS伺服器。
實際應用中,傳統代理多見於Internet環境,如為QQ程式使用代理可以隱藏本機的真實IP地址,為下載工具使用多個代理可以規避伺服器的併發連結限制;透明代理多見於區域網環境。
二、安裝及執行控制
1.編譯安裝
主要配置項含義:
--sysconfdir=/etc//單獨將配置檔案修改到其他目錄
--enable-arp-acl//可以在規則中設定直接通過客戶端MAC進行管理,防止客戶端使用IP欺騙
--enable-linux-netfilter//使用核心過濾
--enable-linux-tproxy //支援透明模式
--enable-async-io=值//非同步I/O,提升儲存效能,
--enable-err-language=”Simplify_Chinese”//錯誤資訊的顯示語言
--enable-underscore //允許URL中有下劃線
--enable-poll//使用Poll()模式,提升效能
--enable-gunregex //使用GNU正則表示式
安裝完成後,建立連結檔案、建立使用者和組。
2.Squid的配置檔案
主要修改有以下幾條配置項,有的配置項需要修改,而有的配置項需要新增。
http_port 3128 //用來指定代理伺服器監聽的地址和埠,預設
埠號為3128修改
cache_effective_user squid//指定squid的程式使用者,用來設定初始化、運
行時快取的賬號,否則啟動不成功! 新增
cache_effective_group squid//預設為cache_effective_user指定賬號的基
本組 新增
visible_hostname 主機名//代理伺服器的主機名 新增
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
3.Squid的執行控制
檢查配置檔案語法是否正確
-z選項用來初始化快取目錄
啟動squid服務
注意:第一次啟動Squid服務時,會自動初始化快取目錄。在沒有可用的Squid服務指令碼的情況下,需要直接呼叫Squid程式來啟動服務,這時需要先進行初始化。
確認服務處於正常監聽狀態
為了使Squid服務的啟動、停止、過載等操作更加方便,可以編寫Squid服務指令碼,並使用chkconfig和service工具來進行管理。
#!/bin/bash
# chkconfig: 2345 90 25
# config: /etc/squid.conf
# pidfile: /usr/local/squid/var/run/squid.pid
# Description: Squid - internet object cache.
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -anpt | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在啟動squid..."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -fr $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -anpt | grep squid
else
echo "squid is not running."
fi
;;
restart)
$0 stop &> /dev/null
echo "正在關閉squid..."
$0 start &> /dev/null
echo "正在啟動squid..."
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "用法:$0 {start | stop | restart | reload | check | status}"
;;
esac
三、構建透明代理伺服器
透明代理依賴於預設路由和防火牆的重定向策略,因此更適用於為區域網主機服務,而不適合為Internet中的客戶機提供服務。
案例:
·在linux閘道器上,構建Squid為客戶機訪問Internet提供代理服務,設定ACL訪問控制。
·在所有的區域網客戶機上,只需要正確設定IP地址、預設閘道器,不需要手動指定代理伺服器的地址、埠等資訊。
1.配置Squid支援透明代理
對於2.6以上版本的Squid服務,只要在http_port配置行加上一個”transparent”選項,就可以支援透明代理了。
2.設定iptables的重定向策略
在防火牆上為3128埠開啟例外
設定重定向策略
控制型別”REDIRECT”:實現本機埠的重定向,此例中將訪問網站協議HTTP、HTTPS的外發資料交給本機的Squid服務
(3128埠)。
選項”--to 埠號”:指定對映的目標埠
客戶機配置正確的IP和預設閘道器後,就可以訪問網站伺服器了,接下來通過設定ACL訪問控制,實現有針對性的過濾。
3.ACL訪問控制
在配置檔案squid.conf中,ACL訪問控制通過兩個步驟:
第一、使用acl配置項定義需要控制的條件;
第二、通過http_access配置項對已定義列表做“允許”或“拒絕”訪問的控制。
(1)定義訪問控制列表
格式:acl 列表名稱 列表型別 列表內容
[[email protected] ~]# vim /etc/squid.conf
……
acl SAFEPORT port 80 443
acl MALAN src 192.168.1.0 /24//客戶機網段
acl MEIDAFILE urlpath_regex -i \.mp4$ \.avi$//以.mp4、.avi結尾的URL路徑
acl WORKING time MWTHF 08:30-17:30 //時間為週一至週五8:30~17:30
……
當要限制的同一類物件較多時,可以使用獨立的檔案來存放,在acl配置行的列表內容處指定對應的檔案位置即可。例如,要針對目標地址建立黑名單檔案,操作如下:
[[email protected] ~]# mkdir /etc/squid
[[email protected] ~]# vim /etc/squid/ipblock.list//建立目標IP地址名單
61.135.167.36
125.39.127.25
……
[[email protected] ~]# vim /etc/squid/dmblock.list//建立目標域地址名單
.qq.com
.msn.com
.live.com
……
[[email protected] ~]# vim /etc/squid.conf
……
acl IPBLOCK dst “/etc/squid/ipblock.list”//呼叫指定檔案中的內容
acl DMBLOCK dstdomain “/etc/squid/dmblock.list”
常用的訪問控制列表型別
src:源IP地址、網段、IP地址範圍
dst:目標IP地址、網段、主機名
port:目標埠
dstdomain:目標域
time:上網時間,WTWHFAS表示一星期中的各天的英文縮寫(H-Thursday)
maxconn:每個客戶機的併發連線數
url_regex:目標資源的URL地址,-i表示忽略大小寫(例如:^rtsp://)
urlpath_regex:目標資源的整個URL路徑(例如:\.mp3$)
(2)設定訪問許可權
使用http_access配置項來進行控制,需要注意的是,http_access配置行必須放在對應的acl配置行之後。
格式:http_access allow或deny 列表名……
[[email protected] ~]# vim /etc/squid.conf
…… //acl列表
http_access deny MYLAN MEDIAFILE IPBLOCK DMBLOCK
//禁止客戶機下載MP4、avi型別文件,禁止客戶機訪問黑名單中的IP地址、網站域
http_access allow MYLAN WORKTIME//允許客戶機在工作時間上網
http_access deny all//預設策略禁止所有客戶機使用代理
執行訪問控制時,squid將按照各條規則的順序一次進行檢查,如果找到一條相匹配的規則就不再向後搜尋,需要注意的是:
·沒有設定任何規則時:Squid伺服器拒絕客戶端的請求
·有規則但找不到相匹配的項:Squid將採用與最後一條規則的相反的許可權
四、Squid日誌分析
Sarg全名是Squid Analysis Report Generator,是一款Squid日誌分析工具,採用HTML格式,詳細列出每一位使用者訪問Internet的站點資訊、時間佔用資訊、排名、連線次數、訪問量等。
1.安裝GD庫
[[email protected] ~]# yum -y install gd gd-devel
2.安裝sarg
上述配置項的含義:
--sysconfdir=/etc/sarg //配置檔案目錄,預設是/usr/local/etc
--enable-extraprotection//新增額外的安全保護
3.配置
[[email protected] ~]# vim /etc/sarg/sarg.conf
access_log /usr/local/squid/var/logs/access.log//指定squid的訪問日誌檔案
title “Squid User Access Report”//網頁標題
output_dir /var/www/html/sarg//sarg報告的輸出目錄
user_ip no//使使用者名稱顯示
exclude_hosts /usr/local/sarg/noreport//指定不計入排序的站點列表檔案
topuser_sort_filed connect BYTES reverse
//在top排序中,指定連線次數、訪問位元組數,採用降序排列,升序將reverse換成normal
user_sort_filed connect reverse//對於使用者訪問記錄,連線次數按降序排列
overwrite_report no //當那個日期報告已經存在,是否覆蓋報告
charset UTF-8 //使用字符集
weekdays0-6//指定top排序時的星期週期,0為週日
hours 9-12,14-16,18-20//指定top排序時的時間週期
www_document_root /var/www/html //網頁根目錄
4.執行
上述配置中,添加了不計入排序的站點,需要存在這個檔案中:
[[email protected] ~]# touch /usr/local/sarg/noreport
這個檔案中新增的 域名將不被顯示在排序中
[[email protected] ~]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin//設定符號連結
[[email protected] ~]# sarg//啟動一次記錄
5.驗證
在客戶端上訪問http://192.168.1.254/sarg/,可以看到報表。
6.計劃任務
可以將sarg做成計劃任務,定期執行
例如,寫個日報告:
[[email protected] ~]# vim /usr/local/sarg/daily.sh
#/bin/bash
#get current date
TODAY=$(date +%d/%M/%Y)
#get one week ago today
YESTERDAY=$(date -d “1 day ago”+%d/%m/%Y)
/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null
exit 0
[[email protected] ~]# chmod +x /usr/local/sarg/dalily.sh
[[email protected] ~]# crontab -e
00 00 * * * /usr/local/sarg/daily.sh
[[email protected] ~]# chkconfig crond on
轉載於:https://blog.51cto.com/fengjicheng/1882984