16.3.3 透明正向代理

2023-05-12 10:16 更新

正向代理服務(wù)一般是針對企業(yè)內(nèi)部的所有員工設(shè)置的,鑒于每位員工所掌握的計算機知識不盡相同,如果您所在的公司不是IT行業(yè)的公司,想教會大家如何使用代理服務(wù)也不是一件容易的事情。再者,無論是什么行業(yè)的公司,公司領(lǐng)導(dǎo)都希望能采取某些措施限制員工在公司內(nèi)的上網(wǎng)行為,這時就需要用到透明的正向代理模式了。

“透明”二字指的是讓用戶在沒有感知的情況下使用代理服務(wù),這樣的好處是一方面不需要用戶手動配置代理服務(wù)器的信息,進(jìn)而降低了代理服務(wù)的使用門檻;另一方面也可以更隱秘地監(jiān)督員工的上網(wǎng)行為。

在透明代理模式中,用戶無須在瀏覽器或其他軟件中配置代理服務(wù)器地址、端口號等信息,而是由DHCP服務(wù)器將網(wǎng)絡(luò)配置信息分配給客戶端主機。這樣只要用戶打開瀏覽器便會自動使用代理服務(wù)了。如果大家此時并沒有配置DHCP服務(wù)器,可以像如圖16-12所示來手動配置客戶端主機的網(wǎng)卡參數(shù)。

圖16-12 配置Windows客戶端的網(wǎng)絡(luò)信息

為了避免實驗之間互相影響,更好地體驗透明代理技術(shù)的效果,我們需要把客戶端瀏覽器的代理信息刪除(即圖16-6的操作),然后再刷新頁面,就會看到訪問任何網(wǎng)站都失敗了,如圖16-13所示。

圖16-13 停止使用代理服務(wù)后無法成功訪問網(wǎng)站

有些時候會因為Windows系統(tǒng)的緩存原因?qū)е乱廊荒芸吹骄W(wǎng)頁內(nèi)容,這時可以換個網(wǎng)站嘗試一下訪問效果。

既然要讓用戶在無需過多配置系統(tǒng)的情況下就能使用代理服務(wù),作為運維人員就必須提前將網(wǎng)絡(luò)配置信息與數(shù)據(jù)轉(zhuǎn)發(fā)功能配置好。前面已經(jīng)配置好的網(wǎng)絡(luò)參數(shù),接下來要使用8.3.2節(jié)介紹的SNAT技術(shù)完成數(shù)據(jù)的轉(zhuǎn)發(fā),讓客戶端主機將數(shù)據(jù)交給Squid代理服務(wù)器,再由后者轉(zhuǎn)發(fā)到外網(wǎng)中。簡單來說,就是讓Squid服務(wù)器作為一個中間人,實現(xiàn)內(nèi)網(wǎng)客戶端主機與外部網(wǎng)絡(luò)之間的數(shù)據(jù)傳輸。

由于當(dāng)前還沒有部署SNAT功能,因此當(dāng)前內(nèi)網(wǎng)中的客戶端主機是不能訪問外網(wǎng)的:

    C:\Users\linuxprobe>ping www.linuxprobe.com
    Ping 請求找不到主機 www.linuxprobe.com。請檢查該名稱,然后重試。

第8章已經(jīng)介紹了iptables與firewalld防火墻理論知識以及策略規(guī)則的配置方法,大家可以任選其中一款完成接下來的實驗。劉遄老師覺得firewalld防火墻實在太簡單了,因此決定使用純命令行的iptables防火墻管理工具來演示部署方法。

要想讓內(nèi)網(wǎng)中的客戶端主機能夠訪問外網(wǎng),客戶端主機首先要能獲取到DNS地址解析服務(wù)的數(shù)據(jù),這樣才能在互聯(lián)網(wǎng)中找到對應(yīng)網(wǎng)站的IP地址。下面通過iptables命令實現(xiàn)DNS地址解析服務(wù)53端口的數(shù)據(jù)轉(zhuǎn)發(fā)功能,并且允許Squid服務(wù)器轉(zhuǎn)發(fā)IPv4數(shù)據(jù)包。sysctl -p命令的作用是讓轉(zhuǎn)發(fā)參數(shù)立即生效:

    [root@linuxprobe ~]# iptables -F
    [root@linuxprobe ~]# iptables -t nat -A POSTROUTING -p udp --dport 53 -o eno33554968 -j MASQUERADE
    [root@linuxprobe ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    [root@linuxprobe ~]# sysctl -p 
    net.ipv4.ip_forward = 1

現(xiàn)在回到客戶端主機,再次ping某個外網(wǎng)地址。此時可以發(fā)現(xiàn),雖然不能連通網(wǎng)站,但是此時已經(jīng)能夠獲取到外網(wǎng)DNS服務(wù)的域名解析數(shù)據(jù)。這個步驟非常重要,為接下來的SNAT技術(shù)打下了扎實的基礎(chǔ)。

    C:\Users\linuxprobe>ping www.linuxprobe.com
    正在 Ping www.linuxprobe.com [116.31.127.233] 具有 32 字節(jié)的數(shù)據(jù):
    請求超時。
    請求超時。
    請求超時。
    請求超時。
    116.31.127.233 的 Ping 統(tǒng)計信息:
        數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 0,丟失 = 4 (100% 丟失),

與配置DNS和SNAT技術(shù)轉(zhuǎn)發(fā)相比,Squid服務(wù)程序透明代理模式的配置過程就十分簡單了,只需要在主配置文件中服務(wù)器端口號后面追加上transparent單詞(意思為“透明的”),然后把第62行的井號(#)注釋符刪除,設(shè)置緩存的保存路徑就可以了。保存主配置文件并退出后再使用squid -k parse命令檢查主配置文件是否有錯誤,以及使用squid -z命令對Squid服務(wù)程序的透明代理技術(shù)進(jìn)行初始化。

    [root@linuxprobe ~]# vim /etc/squid/squid.conf
    ………………省略部分輸出信息………………
    58 # Squid normally listens to port 3128
    59 http_port 3128 transparent
    60
    61 # Uncomment and adjust the following to add a disk cache directory.
    62 cache_dir ufs /var/spool/squid 100 16 256
    63 
    ………………省略部分輸出信息………………
    [root@linuxprobe ~]# squid -k parse
    2017/04/13 06:40:44| Startup: Initializing Authentication Schemes ...
    2017/04/13 06:40:44| Startup: Initialized Authentication Scheme 'basic'
    2017/04/13 06:40:44| Startup: Initialized Authentication Scheme 'digest'
    2017/04/13 06:40:44| Startup: Initialized Authentication Scheme 'negotiate'
    2017/04/13 06:40:44| Startup: Initialized Authentication Scheme 'ntlm'
    2017/04/13 06:40:44| Startup: Initialized Authentication.
    ………………省略部分輸出信息………………
    [root@linuxprobe ~]# squid -z
    2017/04/13 06:41:26 kid1| Creating missing swap directories
    2017/04/13 06:41:26 kid1| /var/spool/squid exists
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/00
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/01
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/02
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/03
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/04
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/05
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/06
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/07
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/08
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/09
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0A
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0B
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0C
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0D
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0E
    2017/04/13 06:41:26 kid1| Making directories in /var/spool/squid/0F
    [root@linuxprobe ~]# systemctl restart squid

在配置妥當(dāng)并重啟Squid服務(wù)程序且系統(tǒng)沒有提示報錯信息后,接下來就可以完成SNAT數(shù)據(jù)轉(zhuǎn)發(fā)功能了。它的原理其實很簡單,就是使用iptables防火墻管理命令把所有客戶端主機對網(wǎng)站80端口的請求轉(zhuǎn)發(fā)至Squid服務(wù)器本地的3128端口上。SNAT數(shù)據(jù)轉(zhuǎn)發(fā)功能的具體配置參數(shù)如下。

    [root@linuxprobe ~]# iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    [root@linuxprobe ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eno33554968 -j SNAT --to 您的橋接網(wǎng)卡IP地址
    [root@linuxprobe ~]# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

這時客戶端主機再刷新一下瀏覽器,就又能訪問網(wǎng)絡(luò)了,如圖16-14所示。

圖16-14 客戶端主機借助于透明代理技術(shù)成功訪問網(wǎng)絡(luò)

現(xiàn)在肯定有讀者在想,如果開啟了SNAT功能,數(shù)據(jù)不就直接被轉(zhuǎn)發(fā)到外網(wǎng)了么?內(nèi)網(wǎng)中的客戶端主機是否還依然使用Squid服務(wù)程序提供的代理服務(wù)呢?其實,只要仔細(xì)看一下iptables防火墻命令就會發(fā)現(xiàn),劉遄老師剛才并不是單純地開啟了SNAT功能,而是通過把客戶端主機訪問外網(wǎng)80端口的請求轉(zhuǎn)發(fā)到Squid服務(wù)器的3128端口號上,從而還是強制客戶端主機必須通過Squid服務(wù)程序來上網(wǎng)。為了驗證這個說法,我們編輯Squid服務(wù)程序的配置文件,單獨禁止本書的配套站點(https://www.linuxprobe.com/),然后再次刷新客戶端主機的瀏覽器,發(fā)現(xiàn)網(wǎng)頁又被禁止顯示了,如圖16-15所示

圖16-15 客戶端主機再次無法訪問網(wǎng)絡(luò)

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號