squid服務的ACL訪問控制:
squid提供了強大的代理控制機制,通過合理設置ACL并進行限制,可以針對源地址、目標地址、訪問的URL路徑、訪問的時間等各種條件進行過濾。
在配置文件squid.conf中,ACL訪問控制通過兩個步驟來實現:1、使用ACL配置項定義需要控制的條件;2、通過http_access配置項對已定義的列表做“允許”或“拒絕”訪問的控制。
1、 每行ACL配置可以定義一條訪問控制列表,格式如下:
acl 列表名稱 列表類型 列表內容
其中,列表名稱是自定義的,相當于給ACL起了個名字;“列表類型”必須使用squid預定義的值,對應不同類別的控制條件;“列表內容”是要控制的具體對象,不同類型的列表所對應的內容也不一樣,可以有多個值(以空格分隔,為“或”的關系)。
常用的訪問控制列表類型如下:
ACL定義示例:
[root@localhost /]# vim /etc/squid.conf
..........................
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #squid默認的一些ACL
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network #默認存在
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network #默認存在
acl localhost src 127.0.0.1/255.255.255.255 #源地址為127.0.0.1
acl mylan src 192.168.1.0/24 192.168.4.0/24 #客戶機網段
acl to_localhost dst 127.0.0.0/8 #目標地址為127.0.0.0/8網段
acl mc20 maxconn 20 #最大并發連接量為20
acl blackurl url_regex -i ^rtsp:// ^emule:// #以rtsp://等開頭的URL
acl mediafile urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$ #以.mp3等結尾的URL路徑
acl worktime time MTWHF 9:00-18:00 #時間為周一至周五的 9:00-18:00
........................
當需要限制的同一類對象較多時,可以使用獨立的文件來存放,在acl配置行的內容處指定對應的文件位置即可。如下:
[root@localhost /]# mkdir /etc/squid
[root@localhost /]# cd /etc/squid
[root@localhost squid]# vim ipblock.list #建立目標IP地址名單
61.135.167.36
125.39.127.25
60.28.14.0
[root@localhost squid]# vim dmblock.list #建立目標域地址名單
.qq.com
.msn.com
.live.com
.verycd.com
[root@localhost squid]# vim /etc/squid.conf
acl ipblock dst "/etc/squid/ipblock.list" #調用指定文件中的列表內容
acl dmblock dstdomain "/etc/squid/dmblock.list"
當ACL設置好后,還需要通過http_access配置項來進行控制。必須注意的是,http_access配置行必須放在對應的acl配置行之后。每行http_access配置確定一條訪問規則,格式如下:
http_access allow或deny 列表名
將剛才定義的acl應用到規則中,如下:
[root@localhost squid]# vim /etc/squid.conf
......................
http_access deny !Safe_ports #squid默認存在的訪問權限
http_access deny mediafile #禁止客戶機下載mp3等文件
http_access deny ipblock #禁止客戶機訪問黑名單中的IP地址
http_access deny dmblock #禁止客戶機訪問黑名單中網站域
http_access deny mc20 #客戶機的并發連接量超過20時將被阻止
http_access allow worktime #允許客戶機在工作時間內上網
reply_body_max_size 10 MB #允許下載的最大文件大?。?0M)
.......................
http_access deny all #默認禁止所有客戶機使用代理,squid默認存在的訪問權限
在配置訪問權限時,需要注意以下幾點 :
每條http_access規則中,可以同時包含多個訪問控制列表名,各個列表之間以空格分隔,是“與”的關系,表示必須滿足所有訪問控制列表對應的條件才會進行限制。
需要使用取反條件時,可以在訪問控制列表前添加“ !”符號。
執行訪問控制時,squid將按照各條規則的順序依次進行檢查,如果找到一條相匹配的規則就不再向后搜索(這點和iptables的規則匹配類似)。因此,規則的順序非常重要。
沒有設置任何規則時,squid服務將拒絕客戶端的請求。這也就是為什么配置文件中默認存在三個內網網段的ACL規則,若想拒絕默認存在的三個網段中某個,還需將其注釋掉,再進行限制,以免發生沖突,造成訪問規則不生效。
有規則但找不到相匹配的項:squid將采用與最后一條規則相反的動作,即如果最好一條規則是allow,就拒絕客戶端的請求,否則允許該請求,默認存在的最后一條規則為“http_access deny all ”
通常情況下,把最常用的控制規則放在最前面,以減少squid的負載。在訪問控制的總體策略上,建議采用“先拒絕后允許”或“先允許后拒絕”的方式。
若想配置更為精準的控制可以參考博文:https://blog.51cto.com/jafy00/682590
二、squid日志分析:
為了使我們查看日志更為直觀一些,可以使用SARG,它是一款squid日志分析工具,采用HTML格式, 詳細列出每位用戶訪問Internet的站點信息,時間占用信息、排名、連接次數、訪問量等。
SARG的部署過程如下:
1、安裝系統盤中的GD庫:
[root@localhost yum.repos.d]# yum -y install gd gd-devel
2、安裝SARG:
[root@localhost src]# tar zxf sarg-2.3.7.tar.gz
[root@localhost src]# cd sarg-2.3.7/
[root@localhost sarg-2.3.7]# ./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection && make && make install
配置項含義如下:
--prefix=/usr/local/sarg:指定安裝目錄;
--sysconfdir=/etc/sarg:配置文件目錄,若不指定,默認是/usr/local/etc;
--enable-extraprotection:添加額外的安全保護
3、配置:
[root@localhost sarg-2.3.7]# cd /etc/sarg/
[root@localhost sarg]# vim sarg.conf
......................
#若只實現基本的功能,則配置以下三項即可:
access_log /usr/local/squid/var/logs/access.log #指定squid的訪問日志文件
output_dir /var/www/html/sarg #sarg報告的輸出目錄,指向網站的根目錄下
www_document_root /var/www/html #網頁根目錄
#其余一些優化的配置項如下,根據需求來改即可:
title "Squid User Access Reports" #網頁標題
user_ip no #使用用戶名顯示
exclude_hosts /usr/local/sarg/noreport #指定不計入排序的站點列表文件
topuser_sort_field connect BYTES reverse
#在top排名中,指定連接次數、訪問字節數,采用降序排列,升序將reverse換成normal即可。
user_sort_field connect reverse #對于用戶訪問記錄,連接次數按降序排列
overwrite_report no #當那個日期報告已經存在,是否覆蓋報告
mail_utility mailq.postfix #發送郵件報告的命令
charset utf-8 #使用字符集
weekdays 0-6 #指定top排序時的星期周期,0為周日。
hours 7-12,14,16,18-20 #指定top排序時的時間周期。
4、運行:
[root@localhost sarg]# touch /usr/local/sarg/noreport
#上面的配置項中添加了不計入排序的站點,需要存在這個文件中。
#這個文件中添加的域名將不被顯示在排序中。
[root@localhost sarg]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin #設置符號鏈接
[root@localhost sarg]# sarg #執行sarg啟動一次記錄。
SARG: 紀錄在文件: 546, reading: 100.00%
SARG: 成功的生成報告在 /var/www/html/sarg/2019Jun07-2019Jun07
[root@localhost sarg]# systemctl start httpd #啟動httpd服務,若沒有該服務,須自行安裝。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。