1. 程式人生 > >Squid實現正向代理及訪問控制--技術流ken

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端檢視

該時段下的上網服務會被拒絕