1. 程式人生 > >Squid-4.1 ACL訪問控制、日誌分析和反向代理

Squid-4.1 ACL訪問控制、日誌分析和反向代理

找到 51cto list conf 博客 使用 配置文件 ESS 找不到

Squid-4.1ACL訪問控制、日誌分析和反向代理

ACL訪問控制

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

在配置文件squid.conf中,ACL訪問控制通過以下兩個步驟實現:其一,使用acl配置項定義需要控制的條件;其二,通過http_access配置項對已定義的列表做“allow”或者“deny”訪問控制。本文還是基於上篇博客的透明代理環境下完成。

1、定義訪問控制列表

每一行acl配置可以定義一條訪問控制列表,格式如下:

acl 列表名稱 列表類型 列表內容

“列表名稱“可以自行指定,用來識別控制條件,見名知意;“列表類型”必須使用Squid預定義的值,對應不同類別的控制條件;“列表內容” 是要控制的具體對象,不同類型的列表所對應的內容也不一樣,也可以有很多值(以空格分隔,都為“或”的關系)。下面是常用的訪問控制列表類型:

src              源IP地址、網段、IP地址範圍
dst              目標IP地址、網段、主機名
port             目標端口
dstdomain        目標域,匹配域內所有的站點
time             使用代理服務的時間段,使用英文縮寫星期一到星期日為MTWHFAS
maxconn          每個客戶機的並發連接數
url_regex        目標資源的URL地址,-i表示忽略大小寫
urlpath_regex    目標資源的整個URL路徑,-i表示忽略大小寫

在執行訪問控制的時候,Squid將按照各條規則由上而下依次訪問,如果找到相匹配的規則就不在往後搜索。因此,規則的順序安排非常重要。以下兩種默認情況需要我們註意:

1、沒有設置任何規則的時候,Squid服務將拒絕客戶端請求

2、有規則但是找不到匹配項,Squid將才有與最後一條相反的權限,即如果最後一條規則是allow,就拒絕客戶端請求,否則就允許該請求。

對src來源地址控制

可以看到本來是可以訪問到的,下面在配置文件中設置對192.168.100.130地址進行控制。修改完後,重啟服務。
技術分享圖片
技術分享圖片

重新使用客戶機再訪問web服務器發現已經訪問不了。
技術分享圖片

對時間區間控制

我們將上面基於src來源地址的語句註釋掉,重新寫對於訪問時間的控制,今天是星期二,那我這裏為了體現實驗效果,就控制客戶機星期二不能訪問Web服務器。配置如下,重啟服務。還有很多中控制方式,這裏就不一一贅述了,可以自行嘗試。

技術分享圖片
技術分享圖片

Squid日誌分析

Sarg全名是Squid Analysis Report Generator,這是一款Squid日誌分析工具,采用HTML格式,詳細列出每一位用戶訪問Internet的站點信息,時間占用信息,排名,連接次數和訪問量。Sarg部署如下:

安裝GD庫

GD庫主要是負責圖像處理的,在網站上GD庫通常用來生成縮略圖,或者用來對圖片加水印,或者用來生成漢字驗證碼,或者對網站數據生成報表等。這裏我要先將Squid代理服務器上一塊網卡換成NAT在線用yum安裝GD庫(不容易啊!)這是我換完NAT模式的網卡信息。
技術分享圖片

[root@promote ~]# yum install -y gd gd-devel

額,提示已經安裝過了,好吧,應該是上回已經做過了。繼續把網卡配置換回來。
技術分享圖片

安裝Sarg

首先到網上找到Sarg的安裝包,這裏我提供一個網址,大家直接去下載就行了。

https://sourceforge.net/projects/sarg/
[root@promote ~]# mkdir /usr/local/sarg    #為sarg創建安裝目錄
[root@promote ~]# tar zxvf sarg-2.3.11.tar.gz -C /opt/    #將sarg解壓到指定目錄
[root@promote ~]# cd /opt/sarg-2.3.11/    #到sarg目錄中進行編譯安裝
[root@promote sarg-2.3.11]# ./configure --prefix=/usr/local/sarg \    #這裏指定安裝目錄
> --sysconfdir=/etc/sarg \    #指定配置文件目錄
> --enable-extraprotection    #開啟額外保護功能
配置完後,進行編譯和安裝
[root@promote sarg-2.3.11]# make && make install

配置

到sarg配置文件中,一項一項的進行修改。

[root@promote /]# 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   #不計入排序的站點列表文件
topuser_sort_field connect reverse   #top排序中有連接次數、訪問字節、降序排列升序是normal
user_sort_field connect reverse    #用戶訪問記錄 連接次數、訪問字節按降序排序
overwrite_report no   #同名日誌是否覆蓋
mail_utility mailq.postfix   #發送郵件報告命令
charset UTF-8   #使用字符集
weekdays 0-6   #top排行的星期周期
hours 0-23   #top排行的時間周期
www_document_root /var/www/html  #網頁根目錄

[root@promote /]# touch /usr/local/sarg/noreport    
#創建上述不計入站點文件,添加的域名將不被顯示在排序中

[root@promote /]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
#建立軟鏈接,方便使用命令
[root@promote /]# systemctl start httpd.service
#因為我們要在網頁裏訪問日誌,需要我們開啟httpd服務

運行

直接執行sarg即可啟動依次記錄,會看到下面提示信息。然後我們去網頁中訪問,管理頁面。我們也能周期性計劃任務執行每天生成報告。
技術分享圖片
技術分享圖片

[root@promote /]# sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%d/%m/%Y)-$(date +%d/%m/%Y)
#這個就是生成昨天到今天的日誌報告

技術分享圖片

Squid反向代理

許多大型門戶網站架構都采用反向代理加速,使用比較多的就是Nginx和squid。如下圖所示,通過squid反向代理可以加速網站訪問速度,可將不同的URL請求發送不同的Web服務器上,同時互聯網只能看到反向代理服務器的地址,加強了網站的安全。

反向代理和正向代理區別

到這裏肯定有很多同學和我一樣困惑,什麽叫反向代理,什麽叫正向代理?這裏我用兩句話來概括下,多讀幾遍,大家就自然而然明白了。

  • 正向代理代理的對象是客戶端(傳統代理),反向代理代理的對象是服務端
  • 正向代理中,客戶端對於服務端是透明的(不知道服務端真實IP);反向代理中,服務端對於客戶端是透明的(不知道真實服務器的IP,知道的可能是代理服務器的)

    Squid反向代理原理

  • Squid反向代理服務器位於本地Web服務器和Internet之間,客戶端請求訪問Web服務器時,DNS將訪問的域名解析為Squid反向代理服務器的IP地址,客戶端將訪問Squid代理服務器。
  • 如果Squid反向代理服務器緩存了該請求的資源,則將該請求的資源返回給客戶端,否則反向代理服務器將向後臺的Web服務器請求資源,然後將應答資源返回給客戶端,同時也將該資源在本地緩存一份,供下一個請求使用。
    技術分享圖片

這裏我需要把試驗環境調整以下,將代理服務器還是配置成單網卡的普通代理。

  • 代理服務器IP:192.168.100.100
  • 客戶端IP:192.168.100.110
  • 真實服務器1(win7):192.168.100.130
  • 真實服務器2(centos7):192.168.100.140

修改配置文件加入下面幾行代碼,很重要的就是一定要關防火墻!!由於之前做透明代理 ,防火墻還有策略在裏面,導致訪問不了:
技術分享圖片

[root@localhost run]# 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 192.168.100.100:80 accel vhost vport
#將端口監聽在 192.168.100.100的80端口上,accel 指啟用加速模式,vhost,vport用於轉發請求
cache_peer 192.168.100.130 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 192.168.100.140 parent 80 0 no-query originserver round-robin weight=1 name=web2
#和上面的一樣

技術分享圖片
技術分享圖片
實驗結果成功,訪問www.yun.com,真實服務器會使用輪詢的方式,分別輪流訪問兩臺web服務器。

Squid 4.1之前做反向代理的區別

Squid 4.1之前做做反向代理主要用下面幾行代碼:

http_port 192.168.100.100:80 accel vhost vport
cache_peer 192.168.100.130 parent 80 0 no-query originserver round-robin weight=1 name=web1
cache_peer 192.168.100.140 parent 80 0 no-query originserver round-robin weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com

[root@localhost run]# squid -k parse #檢查配置文件語法
技術分享圖片

2018/07/24 22:40:38| ERROR: Directive ‘cache_peer_domain‘ is obsolete.
#cache_peer_domain指令已經廢棄
2018/07/24 22:40:38| cache_peer_domain : Replace with dstdomain ACLs and cache_peer_access.
#cache_peer_domain可以用ACL域名控制和cache_peer_access代替

所以這裏一定要註意,版本更換對於我們搭建服務影響還是挺大的,一定要與時俱進!!

Squid-4.1 ACL訪問控制、日誌分析和反向代理