在本文中,我想揭示透明代理的可能性,它允許您透過外部代理伺服器重定向全部或部分流量,而客戶端絕對不會注意到。
當我開始解決這個問題時,我面臨著這樣一個事實:它的實作有一個重大問題——HTTPS 協定。 在過去的好日子裡,透明 HTTP 代理並沒有什麼特殊問題,但使用 HTTPS 代理時,瀏覽器會報告協定受到干擾,這就是幸福的終結。
在Squid代理伺服器的通用說明中,他們甚至建議產生自己的憑證並將其安裝在客戶端上,這至少完全是無稽之談,不合理,看起來像MITM攻擊。 我知道 Squid 已經可以做類似的事情,但本文是關於使用來自受人尊敬的 3APA3A 的 3proxy 的經過驗證的有效方法。
接下來,我們將詳細了解從原始程式碼建置 3proxy 的過程、其配置、使用 NAT 的完全代理程式和選擇性代理、到多個外部代理伺服器的通道分配,以及路由器和靜態路由的使用。 我們使用 Debian 9 x64 作為作業系統。 開始!
安裝 3proxy 並執行常規代理伺服器
1.安裝ifconfig(來自net-tools套件)
apt-get install net-tools
2.安裝午夜指揮官
apt-get install mc
3.我們現在有2個介面:
enp0s3 - 外部,查看互聯網
enp0s8 - 內部,必須查看本地網絡
在其他基於 Debian 的發行版上,介面通常命名為 eth0 和 eth1。
ifconfig -a
接口enp0s3:標誌=4163 最大傳輸溫度 1500
inet 192.168.23.11 網路遮罩 255.255.255.0 廣播 192.168.23.255
inet6 fe80::a00:27ff:fec2:bae4 prefixlen 64scopeid 0x20 ether 08:00:27:c2:ba:e4 txqueuelen 1000(乙太網路)
RX 封包 6412 位元組 8676619 (8.2 MiB)
RX 錯誤 0 丟棄 0 溢出 0 幀 0
TX 數據包 1726 字節 289128 (282.3 KiB)
TX 錯誤 0 丟棄 0 溢位 0 載波 0 衝突 0
enp0s8:標誌=4098 最大傳輸溫度 1500
以太 08:00:27:79:a7:e3 txqueuelen 1000(乙太網路)
RX 數據包 0 字節 0 (0.0 B)
RX 錯誤 0 丟棄 0 溢出 0 幀 0
TX 封包 0 位元組 0 (0.0 B)
TX 錯誤 0 丟棄 0 溢位 0 載波 0 衝突 0
瞧:標誌=73 最大傳輸單元 65536
inet 127.0.0.1 網路遮罩 255.0.0.0
inet6 ::1 prefixlen 128scopeid 0x10loop txqueuelen 1(本地環回)
RX 數據包 0 字節 0 (0.0 B)
RX 錯誤 0 丟棄 0 溢出 0 幀 0
TX 封包 0 位元組 0 (0.0 B)
TX 錯誤 0 丟棄 0 溢位 0 載波 0 衝突 0
enp0s8 介面目前未使用,當我們想要使用代理 NAT 或 NAT 配置時,我們將啟用它。 這時為它分配一個靜態 IP 就合乎邏輯了。
4.我們開始安裝3proxy
4.1 安裝用於從來源編譯 3proxy 的基本包
root@debian9:~# apt-get install build-essential libevent-dev libssl-dev -y
4.2. 讓我們建立一個資料夾來下載帶有來源的存檔
root@debian9:~# mkdir -p /opt/proxy
4.3. 我們進入這個資料夾
root@debian9:~# cd /opt/proxy
4.4. 現在讓我們下載最新的3proxy套件。 截至撰寫本文時,最新穩定版本為 0.8.12 (18/04/2018) 從 3proxy 官方網站下載
root@debian9:/opt/proxy# wget https://github.com/z3APA3A/3proxy/archive/0.8.12.tar.gz
4.5. 讓我們解壓縮下載的存檔
root@debian9:/opt/proxy# tar zxvf 0.8.12.tar.gz
4.6. 進入解壓縮後的目錄建構程序
root@debian9:/opt/proxy# cd 3proxy-0.8.12
4.7. 接下來,我們需要在頭檔中新增一行,以便我們的伺服器完全匿名(它確實有效,一切都被檢查,客戶端IP被隱藏)
root@debian9:/opt/proxy/3proxy-0.8.12# nano +29 src/proxy.h
新增一行
#define ANONYMOUS 1
按 Ctrl+x 和 Enter 儲存變更。
4.8. 讓我們開始組裝程序
root@debian9:/opt/proxy/3proxy-0.8.12# make -f Makefile.Linux
製作日誌make[2]:離開目錄“/opt/proxy/3proxy-0.8.12/src/plugins/TransparentPlugin”
make[1]:離開目錄“/opt/proxy/3proxy-0.8.12/src”
沒有錯誤,我們繼續。
4.9. 在系統上安裝程式
root@debian9:/opt/proxy/3proxy-0.8.12# make -f Makefile.Linux install
4.10. 進入根目錄,查看程式安裝位置
root@debian9:/opt/proxy/3proxy-0.8.12# cd ~/
root@debian9:~# whereis 3proxy
3proxy:/usr/local/bin/3proxy /usr/local/etc/3proxy
4.11. 讓我們建立一個用於設定檔的資料夾並登入使用者的主目錄
root@debian9:~# mkdir -p /home/joke/proxy/logs
4.12. 前往配置應該所在的目錄
root@debian9:~# cd /home/joke/proxy/
4.13. 建立一個空文件並將配置複製到其中
root@debian9:/home/joke/proxy# cat > 3proxy.conf
3proxy.conf守護
pid檔 /home/joke/proxy/3proxy.pid
nserver 8.8.8.8
快取 65536
使用者測試者:CL:1234
超時 1 5 30 60 180 1800 16 60
日誌 /home/joke/proxy/logs/3proxy.log D
logformat "- +_L%t.%.%N.%p %E %U %C:%c %R:%r %O %I %h %T"
旋轉3
授權強
紅暈
允許測試者
襪子-p3128
代理-p8080
若要儲存,請按 Ctrl + Z
4.14。 讓我們建立一個pid文件,以便在啟動過程中不會出現錯誤。
root@debian9:/home/joke/proxy# cat > 3proxy.pid
若要儲存,請按 Ctrl + Z
4.15。 讓我們啟動代理伺服器!
root@debian9:/home/joke/proxy# 3proxy /home/joke/proxy/3proxy.conf
4.16。 讓我們看看伺服器是否正在監聽端口
root@debian9:~/home/joke/proxy# netstat -nlp
網路統計日誌有效的網路連線(僅限伺服器)
Proto Recv-Q Send-Q 本機位址 外部位址 狀態 PID/程式名稱
tcp 0 0 0.0.0.0:8080 0.0.0.0:* 監聽 504/3proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* 監聽 338/sshd
tcp 0 0 0.0.0.0:3128 0.0.0.0:* 監聽 504/3proxy
tcp6 0 0 :::22 :::* 監聽 338/sshd
UDP 0 0 0.0.0.0:68 0.0.0.0:* 352/dhclient
如配置中所寫,我們的 Web 代理程式偵聽連接埠 8080,Socks5 代理程式偵聽連接埠 3128。
4.17。 若要在重新啟動後自動啟動代理服務,您需要將其新增至 cron 中。
root@debian9:/home/joke/proxy# crontab -e
新增一行
@reboot /usr/local/bin/3proxy /home/joke/proxy/3proxy.conf
我們按 Enter 鍵,因為 cron 應該看到行結束符,然後儲存檔案。
應該有一條關於安裝新 crontab 的訊息。
crontab:安裝新的 crontab
4.18。 讓我們重新啟動系統並嘗試透過瀏覽器連接到代理程式。 為了進行檢查,我們使用 Firefox 瀏覽器(用於 Web 代理程式)和具有驗證功能的 sock5 的 FoxyProxy 外掛程式。
root@debian9:/home/joke/proxy# reboot
4.19。 重新啟動後檢查代理程式的運作後,您可以查看日誌。 這樣就完成了代理伺服器的設定。
3 代理日誌1542573996.018 PROXY.8080 00000 測試人員 192.168.23.10:50915 217.12.15.54:443 1193 6939 0 CONNECT_ads.yahoo.com:443/1.1.
1542574289.634 SOCK5.3128 00000 測試儀 192.168.23.10:51193 54.192.13.69:443 0 0 0 CONNECT_normandy.cdn.mozilla.net:443.
設定和運行透明代理 NAT 配置
在此配置中,內部網路上的所有裝置都將透過遠端代理伺服器透明地在 Internet 上運作。 絕對所有 TCP 連線將被重定向到一個或多個(真正擴展了通道寬度,配置範例第 2 號!)代理伺服器。 DNS 服務將使用 3proxy (dnspr) 功能。 UDP 不會「向外」傳送,因為我們還沒有使用轉發機制(Linux 核心預設為停用)。
1. 是時候啟用enp0s8介面了
root@debian9:~# nano /etc/network/interfaces
/etc/network/interfaces 文件#這個文件描述您的系統上可用的網絡接口
#如何激活它們。 欲了解更多信息,請參閱的接口(5)。
來源/etc/network/interfaces.d/*
#回環網絡接口
汽車LO
iface的羅iNet的回環
# 主網絡接口
允許熱插拔 enp0s3
iface enp0s3 inet dhcp
# 輔助網路介面
允許熱插拔 enp0s8
iface enp0s8 inet 靜態
地址192.168.201.254
網絡掩碼255.255.255.0
這裡我們為enp0s8介面分配了一個靜態位址192.168.201.254和一個掩碼255.255.255.0
儲存配置 Ctrl+X 並重新啟動
root@debian9:~# reboot
2. 檢查接口
root@debian9:~# ifconfig
ifconfig 日誌enp0s3:標誌=4163 最大傳輸溫度 1500
inet 192.168.23.11 網路遮罩 255.255.255.0 廣播 192.168.23.255
inet6 fe80::a00:27ff:fec2:bae4 prefixlen 64scopeid 0x20 ether 08:00:27:c2:ba:e4 txqueuelen 1000(乙太網路)
RX 封包 61 位元組 7873 (7.6 KiB)
RX 錯誤 0 丟棄 0 溢出 0 幀 0
TX 數據包 65 字節 10917 (10.6 KiB)
TX 錯誤 0 丟棄 0 溢位 0 載波 0 衝突 0
enp0s8:標誌=4163 最大傳輸溫度 1500
inet 192.168.201.254 網路遮罩 255.255.255.0 廣播 192.168.201.255
inet6 fe80::a00:27ff:fe79:a7e3 prefixlen 64scopeid 0x20 ether 08:00:27:79:a7:e3 txqueuelen 1000(乙太網路)
RX 數據包 0 字節 0 (0.0 B)
RX 錯誤 0 丟棄 0 溢出 0 幀 0
TX 封包 8 位元組 648 (648.0 B)
TX 錯誤 0 丟棄 0 溢位 0 載波 0 衝突 0
瞧:標誌=73 最大傳輸單元 65536
inet 127.0.0.1 網路遮罩 255.0.0.0
inet6 ::1 prefixlen 128scopeid 0x10loop txqueuelen 1(本地環回)
RX 數據包 0 字節 0 (0.0 B)
RX 錯誤 0 丟棄 0 溢出 0 幀 0
TX 封包 0 位元組 0 (0.0 B)
TX 錯誤 0 丟棄 0 溢位 0 載波 0 衝突 0
3. 一切順利,現在您需要設定 3proxy 進行透明代理。
root@debian9:~# cd /home/joke/proxy/
root@debian9:/home/joke/proxy# cat > 3proxytransp.conf
1號透明代理伺服器設定範例守護
pid檔 /home/joke/proxy/3proxy.pid
nserver 8.8.8.8
快取 65536
超時 1 5 30 60 180 1800 16 60
日誌 /home/joke/proxy/logs/3proxy.log D
logformat "- +_L%t.%.%N.%p %E %U %C:%c %R:%r %O %I %h %T"
旋轉3
紅暈
僅授權
網域解析服務
允許 *
父級 1000ocks5 IP_ADDRESS OF EXTERNAL_PROXY 3128 測試儀 1234
插件/opt/proxy/3proxy-0.8.12/src/TransparentPlugin.ld.so透明_插件
tcppm -i0.0.0.0 888 127.0.0.1 11111
4. 現在我們使用新設定啟動 3proxy
root@debian9:/home/joke/proxy# /usr/local/bin/3proxy /home/joke/proxy/3proxytransp.conf
5.再次加入crontab
root@debian9:/home/joke/proxy# crontab -e
@reboot /usr/local/bin/3proxy /home/joke/proxy/3proxytransp.conf
6. 讓我們看看我們的代理商現在正在聽什麼
root@debian9:~# netstat -nlp
網路統計日誌有效的網路連線(僅限伺服器)
Proto Recv-Q Send-Q 本機位址 外部位址 狀態 PID/程式名稱
tcp 0 0 0.0.0.0:22 0.0.0.0:* 監聽 349/sshd
tcp 0 0 0.0.0.0:888 0.0.0.0:* 監聽 354/3proxy
tcp6 0 0 :::22 :::* 監聽 349/sshd
udp 0 0 0.0.0.0:53 0.0.0.0:* 354/3proxy
UDP 0 0 0.0.0.0:68 0.0.0.0:* 367/dhclient
7. 現在代理程式已準備好接受連接埠 888 上的任何 TCP 連接、連接埠 53 上的 DNS 連接,以便可以將它們重定向到遠端ocks5 代理程式和 DNS Google 8.8.8.8。 我們要做的就是設定 netfilter (iptables) 和 DHCP 規則來發布位址。
8. 安裝 iptables-persistent 和 dhcpd 軟體包
root@debian9:~# apt-get install iptables-persistent isc-dhcp-server
9.編輯dhcpd啟動文件
root@debian9:~# nano /etc/dhcp/dhcpd.conf
dhcpd.conf中#dhcpd.conf
#
# ISC dhcpd 的範例設定文件
#
# 所有支援的網路通用的選項定義...
選項域名“example.org”;
選項網域伺服器 ns1.example.org、ns2.example.org;
默認租賃時間600;
最長租用時間 7200;
ddns 更新樣式無;
# 如果此 DHCP 服務器是本地的官方 DHCP 服務器
# 網絡,權威指令應該取消註解。
權威性;
# 內部子網路的配置略有不同。
子網192.168.201.0網絡掩碼255.255.255.0 {
範圍192.168.201.10 192.168.201.250;
選項域名服務器 192.168.201.254;
可選路由器192.168.201.254;
選項廣播地址192.168.201.255;
默認租賃時間600;
最長租用時間 7200;
}
11.重啟並檢查連接埠67上的服務
root@debian9:~# reboot
root@debian9:~# netstat -nlp
網路統計日誌有效的網路連線(僅限伺服器)
Proto Recv-Q Send-Q 本機位址 外部位址 狀態 PID/程式名稱
tcp 0 0 0.0.0.0:22 0.0.0.0:* 監聽 389/sshd
tcp 0 0 0.0.0.0:888 0.0.0.0:* 監聽 310/3proxy
tcp6 0 0 :::22 :::* 監聽 389/sshd
UDP 0 0 0.0.0.0:20364 0.0.0.0:* 393/dhcpd
udp 0 0 0.0.0.0:53 0.0.0.0:* 310/3proxy
UDP 0 0 0.0.0.0:67 0.0.0.0:* 393/dhcpd
UDP 0 0 0.0.0.0:68 0.0.0.0:* 405/dhclient
udp6 0 0 :::31728 :::* 393/dhcpd
原 0 0 0.0.0.0:1 0.0.0.0:* 393/dhcpd
12. 剩下的就是將所有 tcp 請求重定向到連接埠 888 並將規則保存在 iptables 中
root@debian9:~# iptables -t nat -A PREROUTING -s 192.168.201.0/24 -p tcp -j REDIRECT --to-ports 888
root@debian9:~# iptables-save > /etc/iptables/rules.v4
13. 若要擴充通道頻寬,您可以同時使用多個代理伺服器。 總數必須為 1000。與指定代理伺服器建立新連線的機率為 0.2、0.2、0.2、0.2、0,1、0,1。
注意:如果我們有網頁代理,那麼我們需要編寫 connect,而不是ocks5,如果是socks4,則需要編寫socks4(socks4 不支援登入/密碼授權!)
2號透明代理伺服器設定範例守護
pid檔 /home/joke/proxy/3proxy.pid
nserver 8.8.8.8
快取 65536
最大康500
超時 1 5 30 60 180 1800 16 60
日誌 /home/joke/proxy/logs/3proxy.log D
logformat "- +_L%t.%.%N.%p %E %U %C:%c %R:%r %O %I %h %T"
旋轉3
紅暈
僅授權
網域解析服務
允許 *
父級 200ocks5 IP_ADDRESS_EXTERNAL_PROXY#1 3128 測試儀 1234
父級 200ocks5 IP_ADDRESS_EXTERNAL_PROXY#2 3128 測試儀 1234
父級 200ocks5 IP_ADDRESS_EXTERNAL_PROXY#3 3128 測試儀 1234
父級 200ocks5 IP_ADDRESS_EXTERNAL_PROXY#4 3128 測試儀 1234
父級 100ocks5 IP_ADDRESS_EXTERNAL_PROXY#5 3128 測試儀 1234
父級 100ocks5 IP_ADDRESS_EXTERNAL_PROXY#6 3128 測試儀 1234
插件/opt/proxy/3proxy-0.8.12/src/TransparentPlugin.ld.so透明_插件
tcppm -i0.0.0.0 888 127.0.0.1 11111
設定並運行 NAT + 透明代理配置
在此配置中,我們將使用常用的 NAT 機制,對各個位址或子網路進行選擇性或完全透明的代理。 內部網路使用者將使用某些服務/子網,甚至沒有意識到他們正在透過代理程式工作。 所有 https 連線都運作正常,無需產生/替換憑證。
首先,我們決定要代理哪些子網路/服務。 我們假設外部代理位於 pandora.com 等服務運作的地方。 現在仍然需要確定其子網路/位址。
1. 平
root@debian9:~# ping pandora.com
PING pandora.com (208.85.40.20) 56(84) 位元組資料。
2. 在 Google 中輸入 BGP 208.85.40.20
前往網站
可以看到我要找的子網路是AS40428 Pandora Media, Inc
開放 v4 前綴
這是所需的子網路!
199.116.161.0/24
199.116.162.0/24
199.116.164.0/23
199.116.164.0/24
199.116.165.0/24
208.85.40.0/24
208.85.41.0/24
208.85.42.0/23
208.85.42.0/24
208.85.43.0/24
208.85.44.0/24
208.85.46.0/23
208.85.46.0/24
208.85.47.0/24
3. 為了減少子網路數量,需要進行聚合。 前往網站
199.116.161.0/24
199.116.162.0/24
199.116.164.0/23
208.85.40.0/22
208.85.44.0/24
208.85.46.0/23
4. 清除iptables規則
root@debian9:~# iptables -F
root@debian9:~# iptables -X
root@debian9:~# iptables -t nat -F
root@debian9:~# iptables -t nat -X
啟用轉送和NAT機制
root@debian9:~# echo 1 > /proc/sys/net/ipv4/ip_forward
root@debian9:~# iptables -A FORWARD -i enp0s3 -o enp0s8 -j ACCEPT
root@debian9:~# iptables -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
root@debian9:~# iptables -t nat -A POSTROUTING -o enp0s3 -s 192.168.201.0/24 -j MASQUERADE
為了確保重新啟動後永久啟用轉發,讓我們更改文件
root@debian9:~# nano /etc/sysctl.conf
並取消註解該行
net.ipv4.ip_forward = 1
Ctrl+X 儲存文件
5. 我們將 pandora.com 子網封裝在代理程式中
root@debian9:~# iptables -t nat -A PREROUTING -s 192.168.201.0/24 -d 199.116.161.0/24,199.116.162.0/24,199.116.164.0/23,208.85.40.0/22,208.85.44.0/24,208.85.46.0/23 -p tcp -j REDIRECT --to-ports 888
6.讓我們遵守規則
root@debian9:~# iptables-save > /etc/iptables/rules.v4
透過路由器設定設定和運行透明代理
在此配置中,透明代理伺服器可以是家庭/公司路由器後面的單獨 PC 或虛擬機器。 在路由器或設備上註冊靜態路由就足夠了,整個子網路將使用代理,而不需要任何額外的設定。
重要的! 我們的網關必須從路由器接收靜態 IP,或將其本身配置為靜態。
1.設定靜態網關位址(enp0s3適配器)
root@debian9:~# nano /etc/network/interfaces
/etc/network/interfaces 文件#這個文件描述您的系統上可用的網絡接口
#如何激活它們。 欲了解更多信息,請參閱的接口(5)。
來源/etc/network/interfaces.d/*
#回環網絡接口
汽車LO
iface的羅iNet的回環
# 主網絡接口
允許熱插拔 enp0s3
iface enp0s3 inet 靜態
地址192.168.23.2
網絡掩碼255.255.255.0
網關192.168.23.254
# 輔助網路介面
允許熱插拔 enp0s8
iface enp0s8 inet 靜態
地址192.168.201.254
網絡掩碼255.255.255.0
2.允許192.168.23.0/24子網路的設備使用代理
root@debian9:~# iptables -t nat -A PREROUTING -s 192.168.23.0/24 -d 199.116.161.0/24,199.116.162.0/24,199.116.164.0/23,208.85.40.0/22,208.85.44.0/24,208.85.46.0/23 -p tcp -j REDIRECT --to-ports 888
3.讓我們遵守規則
root@debian9:~# iptables-save > /etc/iptables/rules.v4
4. 讓我們在路由器上註冊子網
路由器網路列表199.116.161.0 255.255.255.0 192.168.23.2
199.116.162.0 255.255.255.0 192.168.23.2
199.116.164.0 255.255.254.0 192.168.23.2
208.85.40.0 255.255.252.0 192.168.23.2
208.85.44.0 255.255.255.0 192.168.23.2
208.85.46.0 255.255.254.0 192.168.23.2
使用的材料/資源
1. 3proxy計劃官方網站
2.從原始碼安裝3proxy的說明
3. GitHub上的3proxy開發分支
來源: www.habr.com