squid代理服務的ACL訪問控制、日誌分析及反向代理(4.1版本)
squid的ACL訪問控制列表
squid提供了強大的代理控制機制,通過合理的設置ACL(Access Control List,訪問控制列表)並進行限制,可針對源地址、目標地址、訪問的URL路徑、訪問的時間等各種控制條件進行過濾。
ACL訪問控制通過以下兩個步驟來實現:
①、使用acl配置項定義需要控制的條件;
②、通過http_access配置項對已定義的列表做“允許”或者“拒絕”訪問的控制。
- 定義訪問控制列表
格式:acl 列表名稱 列表類型 列表內容 ···
常見的訪問控制列表類型
列表類型 | 列表內容示例 | 含義、用途 |
---|---|---|
src(源地址) | 192.168.100.1、192.168.100.0/24 | 源IP地址、網段 |
dst(目標地址) | 192.168.234.5、192.168.234.0/24、www.baidu.com | 目標IP地址、網段、主機名 |
port(目標端口) | 80、443、 8080、20 | 目標端口 |
dstdomain(目標域) | .qq.com | 目標域,匹配域內的所有站點 |
time(訪問時間) | 12:00-13:00、AS | 使用代理服務器的時間段 |
maxconn(最大並發連接) | 30 | 每個客戶機的最大並發連接數 |
url_regex(目標url地址) | url_regex -i ^rtsp:// | 目標資源的URL地址,-i表示忽略大小寫 |
urlpath_regex(整個目標url路徑) | urlpath_regex -i sex adult | 目標資源的整個URL路徑,-i表示忽略大小寫 |
2.設置訪問權限
定義好各種訪問控制列表以後,使用http_access配置項來進行控制。
格式:http_access allow或deny 列表名···
在設置訪問權限時,需要註意兩點:
- 沒有設置任何規則時:squid服務將拒絕客戶端的請求
- 有規則但找不到相匹配的項:squid將采用與最後一條規則相反的權限。
演示實驗
因為之前我們做了squid的透明代理的實驗,所以這裏就接著那個實驗繼續做,配置好透明代理後,我們可以使用IP為192.168.100.50的client(客戶端)訪問IP為12.0.0.12的web服務器,那麽下面我們就通過設置acl訪問控制列表使client不能訪問web服務器
vim /etc/squid.conf
acl localhost src 192.168.100.0/24 #定義訪問控制列表
http_access deny localhost #對列表做拒絕處理
service squid stop
service squid start #重啟服務
squid日誌分析
squid的日誌分析功能需要借助sarg(Squid Analysis Report Generator),首先先部署安裝sarg工具
- 安裝相關的軟件環境包
yum -y install gcc gcc-c++ gd gd-devel httpd #這裏的dg庫是支持圖像處理的軟件
sarg下載地址
- 安裝sarg
mkdir /usr/local/sarg #為sarg創建安裝目錄
tar zxvf sarg-2.3.11.tar.gz -C /opt/ #將sarg解壓到指定目錄
cd /opt/sarg-2.3.11/ #到sarg目錄中進行編譯安裝
./configure --prefix=/usr/local/sarg \ #這裏指定安裝目錄
--sysconfdir=/etc/sarg \ #指定配置文件目錄
--enable-extraprotection #開啟額外保護功能
配置完後,進行編譯和安裝
make && make install
- 修改sarg配置文件
vim /etc/sarg/sarg.conf
access_log /usr/local/squid/var/logs/access.log #指定訪問日誌文件(開啟)
title "Squid User Access Reports" #網頁標題(開啟)
output_dir /var/www/html/squid-reports #報告輸出目錄(開啟)
user_ip no #使用用戶名顯示(開啟)
exclude_hosts /usr/local/sarg/noreport #不計入排序的站點列表文件(開啟,刪除none,添加路徑)
topuser_sort_field connect reverse #top排序中有連接次數、訪問字節、降序排列升序是normal (開啟,修改BYTES)
user_sort_field connect reverse #用戶訪問記錄 連接次數、訪問字節按降序排序 (開啟,修改BYTES)
overwrite_report no #同名日誌是否覆蓋(開啟)
mail_utility mailq.postfix #發送郵件報告命令(開啟,修改mail)
charset UTF-8 #使用字符集 (開啟)
weekdays 0-6 #top排行的星期周期 (開啟)
hours 0-23 #top排行的時間周期(開啟)
www_document_root /var/www/html #網頁根目錄(開啟)
touch /usr/local/sarg/noreport 創建上述不計入站點文件,添加的域名將不被顯示在排序中
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
#建立軟鏈接,方便使用命令systemctl start httpd.service
#因為我們要在網頁裏訪問日誌,需要我們開啟httpd服務
- 運行sarg
然後使用client登錄網頁管理界面
反向代理
squid反向代理可以加速網站的訪問速度,可將不同的URL請求分發到後臺不同的web服務器上,同時互聯網用戶只能看到反向代理服務器的地址,加強網站的訪問安全。
squid反向代理加速的原理描述如下:
-
Squid反向代理服務器位於本地Web服務器和Internet之間,客戶端請求訪問Web服務器時,DNS將訪問的域名解析為Squid反向代理服務器的IP地址,客戶端將訪問Squid代理服務器。
- 如果Squid反向代理服務器緩存了該請求的資源,則將該請求的資源返回給客戶端,否則反向代理服務器將向後臺的Web服務器請求資源,然後將應答資源返回給客戶端,同時也將該資源在本地緩存一份,供下一個請求使用。
實驗環境
服務器 | IP地址 | 功能 |
---|---|---|
代理服務器 | 172.16.10.137 | squid代理服務 |
client | 172.16.10.131 | 負責訪問 |
真實服務器1 | 172.16.10.129 | 提供http服務 |
真實服務器2 | 172.16.10.134 | 提供http服務 |
- 修改squid代理服務的配置文件
vim /etc/squid.conf
acl web1 dstdomain www.yun.com
acl web2 dstdomain www.yun.com
#定義兩個個基於域名的控制列表,分別命名為web1,web2
http_access allow web1 web2
#允許以web1,web2為目標域名的訪問
http_port 172.16.10.137:80 accel vhost vport
#將端口監聽在 172.16.10.137的80端口上,accel 指啟用加速模式,vhost,vport用於轉發請求
cache_peer 172.16.10.29 parent 80 0 no-query originserver round-robin weight=1 name=web1
#cache_peer 指定後端服務器地址,80 為後端服務端口,0 為 ICP 端口號(多個 Squid 時用),originserver 指定資源服務器,round-robin指使用輪詢方式,weight指的是權重,自由分配,name 指定一個別名
cache_peer 172.16.10.134 parent 80 0 no-query originserver round-robin weight=1 name=web2
#和上面的一樣
這裏記得重新啟動squid服務
- 修改兩個http服務的首頁內容,方便後面實驗的驗證
- 修改客戶端win7的地址解析使之識別www.yun.com
這樣就實驗成功了,訪問www.yun.com,真實服務器會使用輪詢的方式,分別輪流訪問兩臺web服務器。
squid代理服務的ACL訪問控制、日誌分析及反向代理(4.1版本)