【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析

目錄

1· squid 配置ACL訪問控制列表html


2· squid 日誌分析結合週期計劃任務nginx


3· squid 反向代理web


4· 文章總結apache


開頭說明:上篇文章詳細介紹了 squid 的兩種緩存代理方式和原理,這篇文章就不介紹 squid 這個服務,直接從 squid 的 ACL 訪問控制列表開始。有興趣的朋友能夠看看:Squid 緩存服務器 之 傳統代理 + 透明代理ACL 訪問控制列表的基本概念Nginx + Tomcat 反向代理
vim

源碼包提供:

1·squid 源碼包:百度網盤 Squid 源碼包 , 密碼:12sq後端


2·squid 日誌:百度網盤 Squid 日誌分析源碼包 ,密碼:sgwk緩存


1)Squid 的ACL 訪問控制介紹

squid提供了強大的代理控制機制,經過合理的設置 ACL 並進行限制,能夠針對不少方式來進行條件過濾,好比有如下的方式:針對源地址、目標地址、訪問的URL路徑、訪問的時間等。bash


配置ACL 的兩個步驟
1:在主配置文件中使用 acl 配置項定義須要控制的條件
2:經過 http_access配置項對已定義的列表作 「容許」 ,「拒絕」 訪問的控制服務器


**下面是定義控制列表和設置訪問權限的格式**:

1· acl 【列表名稱】【列表類型】【列表內容】。
【列表名稱】:能夠自定義,用來識別控制條件;
【列表類型】:必須是 squid 預約義值,對應不一樣類別的控制條件
【列表內容】:是要控制的具體對象,它能夠由多個值,以空格分開網絡


2· http_access 【allow】或 【deny】列表名稱
【allow】:表示容許經過
【deny】:表示拒絕經過


如下表格是訪問控制的列表類型:

列表類型 列表內容示列 含義 / 用途
src 192.168.1.168 或 192.168.1.0 源 IP 地址、網段
dst 216.163.137.3 或 www.baidu.com 目標 IP 地址、主機名或網段
port 80 、443 、8080 目標端口
dstdomain .qq.com 目標域,匹配域內的全部站點
time MTWHF 8:30-17:30 AS 使用代理的服務時間段,字母表明星期中的各天
manconn 20 每一個客戶機的併發鏈接數
url_regex url_regex -i ^rtsp:// 目標資源的 URL 地址,-i 表示忽略大小寫
urlpath_regex urlpath_regex -i .mp3$ 目標資源的整個URL路徑,-i 表示忽略大小寫

在實際生產環境中,定義ACL 訪問控制時,應該結合當前網絡環境正確分析用戶的訪問需求,準肯定義使用代理服務的控制條件,下面演示針對不一樣的客戶機地址、須要限制訪問的目標網站、特定的時間段.......分別定義:


[root@localhost squid-3.4.6]# vim /etc/squid.conf


acl locahost src 127.0.0.1/255.255.255.255----- #源地址爲:127.0.0.1


acl MYLAN src 192.168.1.0/24---- #客戶機網段


acl to_locahost src 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$ --- #以 .mp3 .mp4 結尾的 URL路徑


acl WORKTIME time MTWHF 08:30-17:30 ----- #時間爲週一至周無 8:30~17:30


下圖是定義訪問控制列表圖解:
【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


若是當須要限制的同一類對象較多時,可使用獨立的文件來存放,在acl配置行淚飆內容處只當對應的文件位置便可。


[root@localhost squid-3.4.6]# mkdir /etc/squid
[root@localhost squid-3.4.6]# cd /etc/squid/
[root@localhost squid]# vim ipblock.list ----(創建目標IP地址名單)


創建的目標IP以下:
61.135.167.36
125.49.127.25
60.28.14.0/24


[root@localhost squid]# vim dmblock.list ----(創建目標域地址名單)


創建目標域以下:
.qq.com
.msn.com
.live.com


[root@localhost squid]# vim /etc/squid.conf ---(再次配置ACL 訪問控制列表)


定義內容以下:
acl IPBLOCK dst "/etc/squid/ipblock.list" ---(調用指定文件中的列表內容)
acl DMBLOCK dstdomain "/etc/squid/dmblock.list"


以下圖
【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


開始設置訪問權限:

[root@localhost squid]# vim /etc/squid.conf


設置以下
http_access deny MYLAN MEDIAFILE ---(禁止下載 MP三、MP4等危文件)
http_access deny MYLAN IPBLOCK ---(禁止客戶機訪問黑名單中的 IP 地址)
http_access deny MYLAN DMBLOCK ---(禁止客戶機訪問黑名單中的網站域)
http_access deny MYLAN MC20 ----(客戶機的併發鏈接超20時將被阻止)
http_access allow MYLAN WORKTIME ---(容許客戶機在工做時間上網)
http_access deny all ---(默認禁止全部客戶機使用代理)


以下圖:
【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


訪問控制規則說明: squid 將按照各條規則的順序依次進行檢測,若是找到了一天相匹配的規則就再也不找。所以,規則的順序安排時很是重要的


Squid 日誌分析:

Sarg 是一款 Squid 日誌分析工具,採用 HTML 格式,詳細列出每一位用戶訪問 Internet 的站點信息、時間佔用信息、排名、鏈接次數和訪問量等。


Sarg 部署過程以下:


安裝GD庫
[root@localhost ~]# mkdir /usr/local/sarg


安裝 Sarg :
[root@localhost ~]# tar xvf sarg-2.3.7.tar.gz -C /opt/ ----(解壓源碼包,須要的請點擊:百度網盤 Squid 日誌分析源碼包


[root@localhost sarg-2.3.7]# cd /opt/sarg-2.3.7


[root@localhost sarg-2.3.7]# ./configure --prefix=/usr/local/sarg -sysconfdir=/etc/sarg --enable-extraprotection


[root@localhost sarg-2.3.7]# make && make install


以下圖:
【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


[root@localhost sarg-2.3.7]# vim /etc/sarg/sarg.conf ---(修改配置文件)


內容以下
access_log /usr/local/squid/var/logs/access.log ---(去掉註釋,指定squid訪問日誌文件)


title "Squid User Access Reports" ---(去掉註釋,網頁標題)


output_dir /var/www/html/squid-reports ----(去掉註釋,sarg報告輸出目錄)


user_ip no ----(去掉註釋,使用用戶名顯示)


exclude_hosts /usr/local/sarg/noreport ---(這裏路徑須要添加,意思是不計入排序的站點列表文件)


topuser_sort_field connect reverse ---(須要修改成connect ,意思是:#top排序中又連接次數、訪問字節、降序排列)


user_sort_field connect reverse ---(用戶訪問記錄 鏈接次數、訪問字節按降序排列)


overwrite_report no ---(當那個報告存在,是否覆蓋報告)


mail_utility mailx.postfix ---(發送郵件報告)


charset UTF-8 ---(使用字符集)


weekdays 0-6 ---(top排行的星期週期)


hours 0-23 ---(去掉註釋,top排行的時間週期)


www_document_root /var/www/html ---(指定網頁根目錄)


上述配置中,添加了不計入排序的站點,須要存在下面這個文件
[root@localhost sarg-2.3.7]# touch /usr/local/sarg/noreport


由於這個sarg是須要訪問web來查看日誌的,因此須要安裝個apache
[root@localhost sarg-2.3.7]# yum install httpd -y


啓動 apache 服務
[root@localhost sarg-2.3.7]# systemctl start httpd.service


[root@localhost ~]# mkdir /var/www/html/squid-reports
[root@localhost sarg-2.3.7]# sarg ---(啓動sarg)


訪問:http://192.168.106.154/squid-reports/ ---(至關於多網站訪問)
以下效果圖:
【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


能夠將 sarg 作成計劃任務,按期執行:

每日報告以下實列:
[root@localhost ~]# vim /usr/local/sarg/daily.sh


內容以下
#!/bin/bash
#Get current date
TODAY=$(date +%d/%m/%Y)
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-$TODAT &>/dev/null


以下圖:
【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


[root@localhost ~]# chmod +x /usr/local/sarg/daily.sh
[root@localhost ~]# crontab -e ---(添加計劃任務,天天 00:00 執行)


加入以下內容:
00 00 * /usr/local/sarg/daily.sh


[root@localhost ~]# chkconfig crond on


到這裏日誌分析完成,在生產環境中,考慮到多中因素,因此每日報告在 0點0份開始生成


Squid 反向代理:

許多大型的門戶網站架構中都採用了反向代理加速,使用比較多的是 nginx 、squid 等。
下圖是squid 反向代理拓撲
【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


反向代理原理描述

(1)Squid 反向代理服務器位於本地 Web 服務器和 Internet 之間,客戶端訪問 Web 時,DNS 將訪問的域名解析爲 Squid 反向代理服務器的IP地址。客戶端將訪問 Squid 代理服務器


(2)若是Squid 反向代理服務器中緩存了改請求的資源,則將資源直接返回給客戶端,不然squid將向後臺的web服務器拿資源,提供給客戶端並緩存在本地。


開始實現 Squid 反向代理。


[root@localhost ~]# vim /etc/squid.conf --(修改配置文件)


修改內容以下:

http_port 192.168.106.154:80 accel vhost vport ---(修改監聽地址和端口,這裏端口再也不是3128,而是須要改成 http 的80 端口)


cache_peer 192.168.106.156 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 ----(添加後端真的服務器的IP地址1,指定作大鏈接數,權重,別名)


cache_peer 192.168.106.157 parent 80 0 no-query originserver round-robin max_conn=30 weight=2 name=web2 ----(添加後端真的服務器的IP地址2,指定作大鏈接數,權重,別名)


cache_peer_domain web1 web2 www.yun.com ---(訪問的是域名,因此須要作DNS,如今能夠直接修改 hosts 文件就好)


檢查配置文件:
[root@localhost ~]# squid -k parse ---(檢查配置文件,發現有報錯)

報錯信息以下:
2018/09/23 14:39:06| ERROR: Ignoring unknown cache_peer option 'max_conn=30'
//就是說配置文件如今不識別 」max_conn=30「 。那 咱們就刪除它。


下圖是報錯截圖
【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


正確的配置文件以下圖
【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


下面須要修改hosts 配置文件,由於 咱們訪問的是域名。以下圖:
【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


驗證:

【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


須要看到另外一個結果,就要停掉其中一臺web服務器:
[root@localhost ~]# systemctl stop httpd.service


再次訪問:
【超詳細】反向代理Squid 緩存服務器+ ACL 訪問控制 + 日誌分析


反向代理的結論:

若是不停掉一臺服務器,那麼你的請求將會是一個結果,由於你請求的結果已經緩存在了squid服務器上,因此須要更完善的驗證,就須要關閉另外一臺web服務器,看看是否能獲得不一樣的結果。


文章總結

(1)squid 服務的訪問控制主要經過 acl 、http_access 配置項來設置,acl 用來定義控制條件、http_access 來決定經過仍是拒絕。


(2)squid 日誌分析工具 Sarg 採用的是 HTML 格式,因此要查看還須要搭建WEB服務器,好比 apache。它會詳細列出用戶的全部信息


(3)經過 squid 反向代理能夠加速網站的訪問速度,能夠將不一樣的URL 請求分到不一樣後臺的web服務器上,這樣互聯網用戶只能看到代理服務器的地址。


與本文章相關的推薦文章:

(1):Squid 緩存服務器 之 傳統代理 + 透明代理


(2):ACL 訪問控制列表的基本概念


(3):Nginx + Tomcat 反向代理

相關文章
相關標籤/搜索