文章目錄
- 一、 ACL 訪問控制
- 1.1 定義訪問控制串列
- 1.2 設定訪問權限
- 1.3 ACL 訪問控制實驗(基于傳統模式)
- 1. 手工編譯安裝squid
- 2. 修改組態檔
- 3. 傳統代理配置
- 4. 在web服務器上安裝httpd,并啟動服務
- 5. 在win10虛擬機上測驗,傳統代理是否配置成功
- 6. 進行ACL串列訪問控制
- 二、Squid 日志分析
- 2.1 安裝部署SARG
- 三、 squid反向代理
- 3.1 作業機制
- 3.2 搭建squid反向代理
一、 ACL 訪問控制
Squid 提供了強大的代理控制機制,通過合理設定 ACL(Access Control List,訪問控制串列)并進行限制,可以針對源地址、目標地址、訪問的 URL 路徑、訪問的時間等各種條件進行過濾,
在組態檔 squid.conf 中,ACL 訪問控制通過以下兩個步驟來實作:
- 使用 acl 配置項定義需要控制的條件;
- 通過 http_access 配置項對已定義的串列做“允許”或“拒絕”訪問的控制,
1.1 定義訪問控制串列
每行 acl 配置可以定義一條訪問控制串列
acl格式
acl 串列名稱 串列型別 串列內容 …
- 串列名稱可以自行指定,用來識別控制條件,
- 串列型別必須使用 Squid 預定義的值,對應不同類別的控制條件;常用的包括源地址、目標地址、訪問時間、 訪問埠等,
- 串列內容是要控制的具體物件,不同型別的串列所對應 的內容也不一樣,可以有多個值(以空格分隔,為“或”的關系),
| 串列型別 | 含義 |
|---|---|
| src | 源 IP 地址、網段、IP 地址范圍,多個地址之間以空格分隔 |
| dst | 目標 IP 地址、網段、主機名 ,多個地址之間以空格分隔 |
| port | 目標埠 |
| dstdomain | 目標域,匹配域內所有站點 |
| time | 使用代理服務的時間段,例如MTWHF 、8:30-17:30 12:00-13:00、 AS;字母表示一星期中各天的英文縮寫M—Monday 、 T—Tuesday 、 W—Wednesday 、 H—Thursday、F—Friday、A—Saturday、S—Sunday |
| maxconn | 每個客戶機的并發連接數 |
| url_regex | 目標資源的 URL 地址,-i 表示忽略大小寫 |
| urlpath_regex | 網址中主機名后面的部分,-i 表示忽略大小寫 |
在定義訪問控制串列時,應該根據需求來,精確控制,當需要限制的同一類物件較多時,可以使用獨立的檔案來存放,在 acl 配置行的串列內容處指定對應的檔案位置即可,這里指的是檔案的絕對路徑,
1.2 設定訪問權限
定義好各種訪問控制串列以后,需要使用 httpd_access 配置項來進行控制,必須注意的是,http_access 配置行必須放在對應的 acl 配置行之后,每行 http_access 配置確定一條訪問控制規則,
格式
http_access allow 或 deny 串列名……
在每條 http_access 規則中,可以同時包含多個訪問控制串列名,各個串列之間以空格 分隔,為“與”的關系,表示必須滿足所有訪問控制串列對應的條件才會進行限制,需要使用 取反條件時,可以在訪問控制串列前添加“!”符號,
- http_access deny MEDIAFILE —> 禁止客戶機下載 MP3、MP4 等檔案
- http_access deny IPBLOCK —> 禁止客戶機訪問黑名單中的 IP 地址
- http_access deny DMBLOCK —> 禁止客戶機訪問黑名單中的網站域
- http_access deny MC20 —> 客戶機的并發連接超過 20 時將被阻止
- http_access allow WORKTIME —> 允許客戶機在作業時間上網
- http_access deny all —> 默認禁止所有客戶機使用代理
執行訪問控制時,Squid 將按照各條規則的順序依次進行檢查,如果找到一條相匹配的規則就不再向后搜索,
- 沒有設定任何規則時:Squid 服務將拒絕客戶端的請求,
- 有規則但找不到相匹配的項:Squid 將采用與最后一條規則相反的動作,即如果最后一條規則是 allow,就拒絕客戶端的請求,否則允許該請求,
通常情況下,把最常用到的控制規則放在最前面,以減少 Squid 的負載,在訪問控制的總體策略上,建議采用“先拒絕后允許”或“先允許后拒絕”的方式,最后一條規則設為默認策略,設為“http_access allow all”或者“http_access deny all”,
1.3 ACL 訪問控制實驗(基于傳統模式)
1. 手工編譯安裝squid
手工編譯程序在做傳統代理的時候就安裝過了,可以參考https://blog.csdn.net/kimowinter/article/details/108430935這篇博客,
2. 修改組態檔
[root@localhost init.d]# vim /etc/squid.conf
http_access allow all
cache_effective_user squid
cache_effective_group squid

[root@localhost init.d]# squid -k parse ##檢查語法

[root@localhost init.d]# squid -z ##初始化快取
[root@localhost init.d]# service squid start
正在啟動 squid....
[root@localhost init.d]# netstat -ntap | grep squid
tcp6 0 0 :::3128 :::* LISTEN 49191/(squid-1)
3. 傳統代理配置
[root@localhost init.d]# vim /etc/squid.conf
cache_mem 64 MB ##自定義快取空間大小,容量最好為4的倍數
reply_body_max_size 10 MB ##允許下載最大檔案大小,以位元組為單位,默認設定0表示不進行限制
maximum_object_size 4096 KB ##允許保存到快取空間的最大物件的大小,以KB為單位,超過限制不會快取,直接轉到web端

配置防火墻規則
[root@squid init.d]# iptables -F
[root@squid init.d]# iptables -t nat -F
[root@squid init.d]# setenforce 0
[root@squid init.d]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@squid init.d]# service squid reload
4. 在web服務器上安裝httpd,并啟動服務
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# netstat -antp | grep httpd
tcp6 0 0 :::80 :::* LISTEN 80909/httpd
5. 在win10虛擬機上測驗,傳統代理是否配置成功
-
改瀏覽器代理設定(設定方法在之前設定過,就不進行演示)

-
在瀏覽器上訪問web服務

-
查看web服務的行程日志
在web服務器上查看
[root@localhost ~]# cat /var/log/httpd/access_log

6. 進行ACL串列訪問控制
有兩種方法設定
方法一:
直接在條目中寫出來,適用于寫入條目比較少的情況
[root@localhost init.d]# vim /etc/squid.conf
acl study src 14.0.0.100/32
http_access deny study
[root@localhost init.d]# service squid reload


再進行訪問

方法二:
在組態檔中指明一個檔案的絕對路徑,這個檔案中寫入需要進行訪問控制的IP、網段或域名等等,
先將之前寫的acl條目注釋掉,在win10進行訪問

[root@localhost init.d]# vim /etc/squid.conf
acl study src "/etc/squid/study.list"
http_access deny study


[root@localhost init.d]# mkdir /etc/squid
[root@localhost init.d]# cd /etc/squid/
[root@localhost squid]# touch study.list
[root@localhost squid]# vim study.list
[root@localhost init.d]# service squid reload

進行訪問測驗

二、Squid 日志分析
SARG 全稱是 SquidAnalysis Report Generator,是一款 Squid 日志分析工具,采用HTML 格式,詳細列出每位用戶訪問 Internet 的站點資訊、時間占用資訊、排名、連接次數、訪問量等,
2.1 安裝部署SARG
安裝包拷貝到當前目錄下
[root@localhost ~]# tar zvxf sarg-2.3.7.tar.gz -C /opt ##解壓到/opt目錄下
[root@localhost ~]# yum install gd gd-devel -y
[root@localhost ~]# mkdir /usr/local/sarg
[root@localhost ~]# cd /opt/sarg-2.3.7/
[root@localhost sarg-2.3.7]# ./configure --prefix=/usr/local/sarg \ ##指定sarg目錄
--sysconfdir=/etc/sarg \ ##組態檔
--enable-extraprotection ##開啟安全防護
[root@localhost sarg-2.3.7]# make && make install ##編譯安裝
[root@localhost sarg-2.3.7]# cd /etc/sarg/
[root@localhost sarg]# vim sarg.conf
組態檔中默認注釋了所有的檔案,需要取消注釋激活功能
7行
access_log /usr/local/squid/var/logs/access.log ##指定訪問日志檔案
25行
title "Squid User Access Reports" ##網頁標題
120行
output_dir /var/www/html/squid-reports ##報告輸出目錄
178行
user_ip no ##使用用戶名顯示
184行
topuser_sort_field connect reverse ##top排序中有連接次數,訪問位元組,降序排列,升序是normal
190行(一定要注釋掉,否則報錯)
#user_sort_field BYTES reverse ##用戶訪問記錄連接次數、訪問位元組按降序排序
206行
exclude_hosts /usr/local/sarg/noreport ##不計入排序的站點串列檔案
257行
overwrite_report no ##同名日志是否覆寫
289行
mail_utility mailq.postfix ##發送郵件報告命令
434行
charset UTF-8 ##使用字符集
518行
weekdays 0-6 ##top排行的時間周期
525行
hours 0-23 ##top排行的時間周期
633行
www_document_root /var/www/html ##網頁根目錄
[root@localhost sarg]# touch /usr/local/sarg/noreport ##添加不計入站點檔案,添加的域名將不被顯示
[root@localhost sarg]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/ ##建sarg命令的軟連接
[root@localhost sarg]# sarg ##生成報告
[root@localhost sarg]# sarg
SARG: 紀錄在檔案: 294, reading: 100.00%
SARG: 成功的生成報告在 /var/www/html/squid-reports/2020Sep07-2020Sep07 ##提示報告生成在這個目錄,我們進入這個目錄查看
[root@localhost sarg]# ls /var/www/html/squid-reports/
2020Sep07-2020Sep07 images index.html
這個目錄是httpd的站點目錄,所以我們要安裝httpd服務
[root@localhost sarg]# yum install httpd -y
[root@localhost sarg]# systemctl start httpd
在win10虛擬機中查看日志統計

如果我們把win10的地址換一個,在重新生成日志,日志系統也會改變

執行周期性計劃任務,每天生成報告
[root@localhost sarg]# 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)
在win10中重新訪問

三、 squid反向代理
如果Squid反向代理服務器中快取了該請求的資源,則將該請求的資源直接回傳給客戶端;否則反向代理服務器將向后臺的WEB服務器請求資源,然后將請求的應答回傳給客戶端,同時也將該應答快取在本地,供下一個請求者使用,
3.1 作業機制
- 快取網頁物件,減少重復請求
- 將互聯網請求輪訓或按權重分配到內網Web服務器
- ·代理用戶請求,避免用戶直接訪問Web服務器,提高安全
3.2 搭建squid反向代理
在14.0.0.110web服務器上寫一個網頁首頁
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# vim index.html
<h1>this is web01</h1>
開啟另一臺web服務器14.0.0.177,安裝httpd,并寫入網頁首頁
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# vim index.html
<h1>this is web02</h1>
[root@localhost html]# systemctl start httpd
[root@localhost html]# iptables -F
[root@localhost html]# setenforce 0
在虛擬機win10中進行測驗


[root@localhost sarg]# vim /etc/squid.conf
http_port 14.0.0.7:80 accel vhost vport
cache_peer 14.0.0.110 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 14.0.0.177 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com

因為監聽的是80埠,所以需要將做日志分析的httpd服務停掉,否則80埠被占用,會導致的服務多載失敗,也可以換一個其他的埠,
[root@localhost sarg]# systemctl stop httpd
[root@localhost ~]# service squid restart
正在關閉 squid...
正在啟動 squid...
最后在win10虛擬機中進行設定,并測驗

改hosts檔案,將IP與域名的對應關系修改與squid中一致,hosts檔案路徑:C:\Windows\System32\drivers\etc

編輯hosts檔案



實作了反向代理,訪問成功
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/1349.html
標籤:其他
下一篇:學習FastDFS這一篇就夠了
