1. 程式人生 > >Squid緩存服務器(緩存機制、代理模式、ACL訪問控制、squid用戶認證功能等)

Squid緩存服務器(緩存機制、代理模式、ACL訪問控制、squid用戶認證功能等)

數量 connect ren tun nes 瀏覽器 本機 安全措施 path

squid代理服務器概述:

Squid是Linux系統中最常用的一款開元代理服務軟件(官方網站:http://www.squid-cache.org) ,可以很好的實現HTTP、FTP、DNS查詢,以及SSL等應用的緩存原理,功能十分強大。

squid代理的作用:

1.作為應用層的代理服務軟件,通過緩存方式為用戶提供Web加速訪問。

  1. 對用戶的Web訪問請求具備進行過濾控制的功能。

squid代理服務器的緩存機制圖解:

技術分享圖片

squid的兩種代理模式:

一、正向代理模式有兩種類型:
1.傳統正向代理
作用:多見於Internet環境,實現代理上網、可以隱藏本機真實IP地址,為下載工具使用多個代理可以規避服務器的並發連接限制。

2.透明代理
作用:多見於局域網環境,如在Linux網關中啟用透明代理後,對控制用戶訪問網站行為的訪問控制列表(ACL)進行限制。局域網主機無需進行額外的設置就可以享受更好的上網速度。
二、反向代理模式:
作用:加快用戶訪問網站的速度,降低網站資源服務器的負載壓力
三、傳統正向代理模式與透明正向代理模式的區別:
傳統正向代理模式用戶需要配置代理服務器的信息。若使用透明代理模式,則用戶感知不到代理服務器的存在。
四、正向代理和反向代理的概念理解:
正向代理:代理服務器 代理客戶端訪問後端web服務器。
應用場景:為在防火墻內的局域網客戶端提供訪問Internet的途徑。正向代理還可以使用緩沖特性減少網絡使用率。
安全性:正向代理允許客戶端通過它訪問任意網站並且隱藏客戶端自身,因此你必須采取安全措施以確保僅為經過授權的客戶端提供服務。
反向代理:代理服務器 代表後端web服務器響應客戶端的訪問請求。
應用場景:反向代理還可以為後端的多臺服務器提供負載平衡,為後端較慢的服務器提供緩沖服務。另外,反向代理還可以啟用高級URL策略和管理技術,從而使處於不同web服務器系統的web頁面同時存在於同一個URL空間下。
安全性:反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。

ACL訪問控制:

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


在配置文件squid.conf中,ACL訪問控制通過兩個步驟來實現:
1.使用acl配置項定義需要控制的條件
2.通過http_access配置項對已定義的列表做“允許”或“拒絕”訪問的控制**
ACL訪問控制列表定義格式:acl 列表名稱 列表類型 列表內容
常用的ACL訪問控制列表類型:
技術分享圖片
註:沒有設置任何規則時,squid服務將拒絕客戶端的請求,有規則但找不到相匹配的項時,squid將采用與最後一條規則相反的權限,即如果最後一條規則是allow,就拒絕客戶端的請求,否則允許該請求,我們要盡量避免找不到規則的情況出現。**

Squid日誌分析:

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

部署 Squid以上所講的代理服務實驗:

實驗環境準備:

主機 操作系統 IP地址 軟件版本
Win7客戶端 Windows7 192.168.138.131 系統自帶瀏覽器
squid代理服務器 centos 7.5 192.168.138.132 squid3.5.20
web服務器 centos 7.5 192.168.138.128 httpd-2.4.6

> Squid主要組成部分:

主程序:/usr/sbin/squid
配置目錄:/etc/squid
主配置文件:/etc/squid/squid.conf
監聽tcp端口號:3128
默認訪問日誌文件:/var/log/squid/access.log

實驗過程:

yum install -y squid #yum在線安裝squid
技術分享圖片
systemctl enable squid.service
systemctl start squid.service #開啟squid服務
netstat -tunlp | grep squid #查看監聽狀態
技術分享圖片
註:yum安裝完成後無需配置即為標準正向代理模式。


在客戶端Windows7系統上對IE瀏覽器進行代理服務器設置:
技術分享圖片
技術分享圖片


接下來在另外一臺centos 7.5 系統上搭建Apache服務,並在win7客戶端測試訪問,確保實驗順利進行:
yum install -y httpd #直接用yum安裝 :
技術分享圖片
在客戶端進行訪問測試(需先關閉之前設置的代理服務器配置):
技術分享圖片


> 在客戶端瀏覽器上恢復代理服務器的設置,接下來在傳統正向代理模式下列舉幾種應用場景進行實驗

1.只允許IP為192.168.138.131的客戶端使用代理上網,禁止其他主機的代理請求:
vim /etc/squid/squid.conf #編輯配置文件
1 #
2 # Recommended minimum configuration:
3 #
4
5 # Example rule allowing access from your local networks.
6 # Adapt to list your (internal) IP networks from where browsing
7 # should be allowed
8 acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
9 acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
10 acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
11 acl localnet src fc00::/7 # RFC 4193 local private network range
12 acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
13
14 acl SSL_ports port 443
15 acl Safe_ports port 80 # http
16 acl Safe_ports port 21 # ftp
17 acl Safe_ports port 443 # https
18 acl Safe_ports port 70 # gopher
19 acl Safe_ports port 210 # wais
20 acl Safe_ports port 1025-65535 # unregistered ports
21 acl Safe_ports port 280 # http-mgmt
22 acl Safe_ports port 488 # gss-http
23 acl Safe_ports port 591 # filemaker
24 acl Safe_ports port 777 # multiling http
25 acl CONNECT method CONNECT
26 acl client src 192.168.138.131 #新增規則
27 #
28 # Recommended minimum Access Permission configuration:
29 #
30 # Deny requests to certain unsafe ports
31 http_access all client # 允許client的規則
32 http_access deny all #拒絕其他所有規則
33 http_access deny !Safe_ports
34
35 # Deny CONNECT to other than secure SSL ports
36 http_access deny CONNECT !SSL_ports
37
38 # Only allow cachemgr access from localhost
39 http_access allow localhost manager
40 http_access deny manager
41
42 # We strongly recommend the following be uncommented to protect innocent
43 # web applications running on the proxy server who think the only
44 # one who can access services on "localhost" is a local user
45 #http_access deny to_localhost
46
47 #
48 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
49 #
技術分享圖片
iptables -F #清空防火墻規則
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
在ip為192.168.138.131的客戶端驗證:
技術分享圖片
新開一臺客戶端進行驗證:
技術分享圖片技術分享圖片
驗證已成功,僅限192.168.138.131客戶機訪問,其他客戶端訪問不了。


ACL訪問控制還有如下可修改參數:

vim /etc/squid.conf
acl localhost src 192.168.100.1/32 ---(src:針對源一個IP地址訪問控制)
acl MYLAN src 192.168.100.0/24 --(針對一個網段訪問控制)
acl destionhost dst 192.168.172.130.32--(針對目標地址進行控制)
acl MC20 maxconn 20 ---(最大鏈接數量,也就是並發數)
acl BURL url_regex -i ^rtsp:// ^emule:// (基於正則表達式,對訪問路徑比如:以 http:// 開頭的)
acl PURL urlpath_regex -i .mp3$ .mp4$ .rmv$ (以MP3 為結尾的路徑控制)
** mkdir /etc/squid #啟用對象列表管理

vim /etc/squid/dest.list

192.168.138.50
192.168.138.60
192.168.138.70 #目標web
對很多網絡的ip進行打包管理

vim /etc/squid.conf
acl destionhostdst "/etc/squid/dest.list"

http_access deny destionhost #拒絕列表(註意事項)

systemctl restart squid.service


> 2.用戶認證功能:

vim /etc/squid/squid.conf #編輯配置文件
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd #選擇的認證方式為basic,認證程序路徑和密碼文件路徑。
auth_param basic children 5 #認證程序的進程數
auth_param basic realm this is squid server #驗證域的提醒字符串
auth_param basic credentialsttl 2 hours #認證有效時間
auth_param basic casesensitive off
acl auth_user proxy_auth REQUIRED #設置允許認證的用戶訪問

http_access deny !auth_user
http_access allow auth_user
http_access deny all
每次修改完配置文件後記得重啟服務。
技術分享圖片
接下來yum -y install httpd httpd-devel expect 使用apache的工具htpasswd生成密碼文件
技術分享圖片
生成密碼文件:htpasswd -c /etc/squid/passwd yang:
New password: #輸入密碼
Re-type new password: #再次確認密碼
Adding password for user yang
技術分享圖片
創建成功後會生成/etc/squid/passwd密碼文件:
cat /etc/squid/passwd #查看
技術分享圖片
squid -k parse #檢查一下文件參數
技術分享圖片
記得重啟服務systemctl restart squid.service ;然後在客戶端進行訪問測試。(需要登錄用戶密碼才能訪問)
技術分享圖片
技術分享圖片


設置內存及硬盤緩沖區大小
cache_mem 64M
cache_dir ufs /var/spool/squid 2000 16 256
技術分享圖片
systemctl restart squid.service #重啟服務
squid -z #初始化緩存


透明正向代理模式:

將各個主機網卡改為僅主機模式,設置成100段落的ip地址:

主機 ip地址
squid代理服務器 ens33:192.168.100.1
ens36:12.0.0.1
web服務器 12.0.0.12
Windows客戶端 192.168.100.12

通過SNAT技術完成數據的轉發,讓客戶端將數據發給Squid代理服務器,再由其轉發到外網
//在squid上開啟路由轉發
echo "1" > /proc/sys/net/ipv4/ip_forward

//清空防火墻策略
iptables -F
iptables -t nat -F
setenforce 0

//修改著配置文件
vim /etc/squid.conf

//修改監聽地址,因為是內網需要訪問外網,所以監聽的是內網 transparent:意思就是透明模式
http_port 192.168.100.1:3128 transparent

//定義防火墻策略:
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128

iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128

iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

如果要再Linux客戶機的命令行界面中使用代理服務器(比如:elinks 網頁瀏覽器、wget 下載工具),必須通過環境變量來指定代理服務器的地址、端口等信息。
[root@localhost ~]# vim /etc/profile #添加如下內容到環境變量中
添加如下內容:
HTTP_PROXY=http:192.168.100.50:3128 #為使用HTTP協議指定代理
HTTPS_PROXY=http:192.168.100.50:3128 #為使用HTTPS協議指定代理
FTP_PROXY=http:192.168.100.50:3128 #為使用FTP協議指定代理
NO_RPOXY=192.168.20.,192.168.30. #對兩個局域網段不使用代理
export HTTP_PROXY HTTPS_PROXY FRP_PROXY NO_PROXY

[root@localhost ~]# source /etc/profile #重新加載


下篇詳細寫squid 日誌分析和squid 反向代理。

Squid緩存服務器(緩存機制、代理模式、ACL訪問控制、squid用戶認證功能等)