1. 程式人生 > >squid代理服務的ACL訪問控制、日誌分析及反向代理(4.1版本)

squid代理服務的ACL訪問控制、日誌分析及反向代理(4.1版本)

運行 部署 安裝 logs com 日誌文件 gcc 客戶端請求 inter

squid代理服務的ACL訪問控制、日誌分析及反向代理

squid的ACL訪問控制列表

squid提供了強大的代理控制機制,通過合理的設置ACL(Access Control List,訪問控制列表)並進行限制,可針對源地址、目標地址、訪問的URL路徑、訪問的時間等各種控制條件進行過濾。

ACL訪問控制通過以下兩個步驟來實現:

①、使用acl配置項定義需要控制的條件;

②、通過http_access配置項對已定義的列表做“允許”或者“拒絕”訪問的控制。

  1. 定義訪問控制列表

    格式: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 列表名···

在設置訪問權限時,需要註意兩點:

  1. 沒有設置任何規則時:squid服務將拒絕客戶端的請求
  2. 有規則但找不到相匹配的項: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版本)