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服務器

第一步:代理服務器添加網卡

一個連接外網,一個連接內網

 

第二步:生成網卡配置文件

[root@ken network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@ken 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網卡配置完成

[root@ken 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安裝

第一步:關閉防火牆

[root@ken ~]# systemctl stop firewalld
[root@ken ~]# setenforce 0

 

第二步:下載squid服務程序

[root@ken ~]# yum install squid -y

 

第三步:啟動squid

squid默認監聽的是3128端口,安全起見,在公司內部布置的正向代理服務器建議修改監聽的端口號。

[root@ken ~]# systemctl restart squid
[root@ken ~]# 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 :拒絕其他任何主機的訪問
[root@ken ~]# 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服務

[root@ken ~]# 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         #接受客戶端地址的訪問

 

第二步:重啟服務

[root@ken ~]# 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

 

第二步:重啟服務

[root@ken ~]# 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

 

第二步:重啟服務

[root@ken ~]# systemctl restart squid

 

第三步:windows端查看

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM