Squid實現正向代理及訪問控制--技術流ken
Squid及正向代理簡介
Squid cache(簡稱為Squid)是一個流行的自由軟體,它符合GNU通用公共許可證。Squid作為網頁伺服器的前置cache伺服器,可以代理使用者向web伺服器請求資料並進行快取,也可以用在區域網中,使區域網使用者通過代理上網。Squid主要設計用於在Linux一類系統執行。--摘自360百科
本篇部落格將詳細演示如何使用squid實現正向代理以及瀏覽內容過濾。
所謂正向代理模式,是指讓使用者通過Squid服務程式獲取網站頁面等資源,以及基於訪問控制列表(ACL)功能對使用者訪問網站行為進行限制,在具體的服務方式上又分為標準代理模式與透明代理模式。標準正向代理模式是把網站資料快取到伺服器本地,提高資料資源被再次訪問時的效率,但是使用者在上網時必須在瀏覽器等軟體中填寫代理伺服器的IP地址與埠號資訊,否則預設不使用代理服務。
Squid正向代理訪問流程
使用Squid服務程式提供正向代理服務的拓撲如下圖所示。區域網內的主機如果想要訪問外網,則必須要通過Squid伺服器提供的代理才行,這樣當Squid伺服器接收到使用者的指令後會向外部發出請求,然後將接收到的資料交還給發出指令的那個使用者,從而實現了使用者的代理上網需求。另外,從拓撲圖中也不難看出,企業中的主機要想上網,就必須要經過公司的閘道器伺服器,既然這是一條流量的必經之路,因此企業一般還會把Squid服務程式部署到公司伺服器位置,並通過CL(訪問控制列表)功能對企業內員工進行上網審計及限制。
Squid安裝環境準備
這裡我準備了兩臺虛擬機器,鑑於工作中大部分都是Windows使用代理,所以我就使用windows來演示了。一臺安裝linux,另外一臺安裝windows,無論是windows還是linux都是一樣的!
伺服器端需要準備兩塊網絡卡,一塊網絡卡負責對內通訊,另外一張網絡卡負責對外通訊。
伺服器端linux: 外網IP: 172.20.10.2
內網IP: 192.168.11.2
客戶端windows:內網IP: 192.168.11.137
linux伺服器
第一步:代理伺服器新增網絡卡
一個連線外網,一個連線內網
第二步:生成網絡卡配置檔案
[[email protected] network-scripts]# cp ifcfg-eth0 ifcfg-eth1 [[email protected] network-scripts]# vim ifcfg-eth1 NAME="eth1" DEVICE="eth1" ONBOOT=yes NETBOOT=yes BOOTPROTO=static TYPE=Ethernet IPADDR=192.168.11.2 NETMASK=255.255.255.0
第三步:重啟網路
至此linux網絡卡配置完成
[[email protected] network-scripts]# ip a | grep eth1 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 inet 192.168.11.2/24 brd 192.168.108.255 scope global noprefixroute eth1
windows客戶端
只需要給客戶端新增一個內網IP即可
現在可以使用僅主機模式下的windows訪問外網,發現是訪問不通的
Squid安裝
第一步:關閉防火牆
[[email protected] ~]# systemctl stop firewalld [[email protected] ~]# setenforce 0
第二步:下載squid服務程式
[[email protected] ~]# yum install squid -y
第三步:啟動squid
squid預設監聽的是3128埠,安全起見,在公司內部佈置的正向代理伺服器建議修改監聽的埠號。
[[email protected] ~]# systemctl restart squid [[email protected] ~]# ss -tnl | grep 3128 LISTEN 0 1024 :::3128 :::*
Squid實現正向代理
其實下載並啟動完成之後,我們就可以使用squid代理服務了。
第一步:開啟你的瀏覽器工具>Internet選項,看到如下介面
第二步:點選連線>區域網設定
可以看到如下的介面
第三步:填寫伺服器端內網IP及squid的埠號,點選確定即可。
填寫的是內網代理端的內網IP,可以和客戶端通訊的IP網段
第四步:瀏覽器測試
重新整理瀏覽器即可發現僅主機模式下的windows也可以上網了
Squid常用的訪問控制列表
url_regex與urlpath_regex的區別
1. url_regex
url_regex ACL用於匹配請求URL的任何部分,包括傳輸協議和原始伺服器主機名。例如,如下ACL匹配從FTP伺服器的MP3檔案請求:
acl FTPMP3 url_regex -i ^ftp://.*\.mp3$
2. urlpath_regex
urlpath_regex與url_regex非常相似,不過傳輸協議和主機名不包含在匹配條件裡。這讓某些型別的檢測非常容易。例如,假設你必須拒絕URL裡的"sex",但仍允許在主機名裡含有"sex"的請求,那麼這樣做:
acl Sex urlpath_regex sex
另一個例子,假如你想特殊處理cgi-bin請求,你能這樣捕獲它們:
acl CGI1 urlpath_regex ^/cgi-bin
當然,CGI程式並非總在/cgi-bin/目錄下,這樣你應該編寫其他的ACL來捕獲它們。
總結
1. url_regex匹配整個URL部分,包含傳輸協議和主機名
2. urlpath_regex不包含傳輸協議和主機名
3. 可以單獨使用url_regex完成百分之90以上的工作
4. url_regex和urlpath_regex都支援正則
5. URL中的.需要使用\進行轉義
Squid正向代理之ACL訪問控制
演示一:只允許192.168.43.1主機使用代理服務
第一步:修改配置檔案
acl ken src 192.168.43.1/24 :定義了一個別名ken
http_access all ken :定義了允許來自ken的訪問
http_access deny all :拒絕其他任何主機的訪問
[[email protected] ~]# vim /etc/squid/squid.conf
...
27 acl ken src 192.168.43.1/24 28 29 # 30 # Recommended minimum Access Permission configuration: 31 # 32 # Deny requests to certain unsafe ports 33 http_access all ken 34 http_access deny all
...
第二步:重啟squid服務
[[email protected] ~]# systemctl restart squid
第三步:window端重新整理介面
發現已經上不去網了
演示二:禁止訪問www.baidu.com網站
在做一個演示的時候把之前定義的規則都刪掉
第一步:修改配置檔案
acl ken url_regex www.baidu.com #定義url_regex規則 acl kenken src 192.168.11.137 #定義客戶端地址 # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny ken #拒接url http_access allow kenken #接受客戶端地址的訪問
第二步:重啟服務
[[email protected] ~]# systemctl restart squid
第三步:window端檢視
現在我的部落格又能訪問了
現在訪問下百度網站試試
現在訪問被拒絕了,說明我們配置是生效的
演示三:禁止網址中包含redis的網站
第一步:修改配置檔案
新增如下內容
.*表示任意長度的任意內容
acl ken url_regex .*redis.* acl kenken src 192.168.11.137 # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny ken http_access allow kenken
第二步:重啟服務
[[email protected] ~]# systemctl restart squid
第三步:windows端檢視
現在我的部落格還是能訪問的
瀏覽一下redisdoc網站
可以發現只要帶有redis的網站都會被拒絕訪問
演示四:禁止訪問網址中以mp3為結尾的網站
這個我就不演示了無非就是新增一條 acl ken url_regex .*mp3$
acl寫來寫去還是考驗大家的正則表示式
大家有興趣的可以找一個這樣的網站來測試一下
演示五:基於時間段20:00-8:00
第一步:修改配置檔案
定義一個時間段
拒絕該時間段的訪問
acl ken time 20:00-23:50 acl kenken src 192.168.11.137 # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny ken http_access allow kenken
第二步:重啟服務
[[email protected] ~]# systemctl restart squid
第三步:windows端檢視
該時段下的上網服務會被拒絕