1. 這是什麼
Proxychains4(又稱 proxychains-ng)是一款強大的代理鏈工具,能夠強制任何 TCP 連線通過指定的代理伺服器(如 SOCKS4、SOCKS5、HTTP)進行轉發。
簡單來說,它可以讓任何不支援代理設定的程式也能透過代理伺服器連線,實現:
- 隱藏真實 IP 位址
- 穿透網路限制
- 存取內網資源
- 串聯多個代理(代理鏈)
Proxychains4 是 proxychains-ng(New Generation)的執行檔名稱,是原版 proxychains 的改進版本,提供更好的效能和穩定性。
2. ProxyChains 與 ProxyChains4 的差異
歷史背景
| 項目 | ProxyChains | ProxyChains4 (proxychains-ng) |
|---|---|---|
| 全名 | ProxyChains | ProxyChains New Generation |
| 原始作者 | netcreature | rofl0r |
| 首次發布 | 2006 年 | 2012 年 |
| 最後更新 | 2012 年(已停止維護) | 持續維護中 |
| GitHub | 已封存 | rofl0r/proxychains-ng |
ProxyChains4 是原版 ProxyChains 的分支(fork),由於原版長期未維護,社群開發者 rofl0r 接手並重新改寫,命名為 proxychains-ng(New Generation),執行檔名稱為 proxychains4。
主要差異比較
| 功能特性 | ProxyChains | ProxyChains4 |
|---|---|---|
| 維護狀態 | ❌ 已停止(2012) | ✅ 持續更新 |
| 64 位元支援 | ⚠️ 部分支援 | ✅ 完整支援 |
| 多執行緒程式 | ❌ 不穩定 | ✅ 穩定支援 |
| DNS 代理 | ⚠️ 有 bug | ✅ 修復並改進 |
| 效能 | 較慢 | 顯著提升 |
| 設定檔語法 | 舊版 | 相容舊版 + 新增選項 |
| macOS 支援 | ❌ 有問題 | ✅ 良好支援 |
| Hook 機制 | LD_PRELOAD | 改進的 LD_PRELOAD |
技術差異詳解
64 位元與多執行緒支援:
# 舊版在 64 位元系統上經常出現錯誤
proxychains nmap -sT target.com
# 錯誤:segmentation fault 或連線失敗
# 新版穩定支援
proxychains4 nmap -sT target.com
# 正常運作
DNS 洩漏修復:
ProxyChains(舊版)的 proxy_dns 功能有 bug,某些情況下 DNS 查詢仍會洩漏真實 IP。ProxyChains4(新版)完全重寫 DNS 代理機制,新增 proxy_dns_old 選項提供相容模式。
# ProxyChains4 設定檔
proxy_dns # 新版 DNS 代理(推薦)
# proxy_dns_old # 舊版 DNS 代理(相容模式)
設定檔位置差異:
| 版本 | 預設設定檔路徑 |
|---|---|
| ProxyChains | /etc/proxychains.conf |
| ProxyChains4 | /etc/proxychains4.conf 或 /etc/proxychains.conf |
ProxyChains4 新增設定選項:
# 遠端 DNS 子網段(避免某些 DNS 問題)
remote_dns_subnet 224
# 設定 TCP 逾時(毫秒)
tcp_read_time_out 15000
tcp_connect_time_out 8000
# localnet 排除範圍(不經過代理)
localnet 127.0.0.0/255.0.0.0
localnet 10.0.0.0/255.0.0.0
localnet 172.16.0.0/255.240.0.0
localnet 192.168.0.0/255.255.0.0
效能比較
| 測試項目 | ProxyChains | ProxyChains4 | 改善幅度 |
|---|---|---|---|
| 連線建立速度 | ~150ms | ~80ms | ~47% ⬆️ |
| 大量連線穩定性 | 經常崩潰 | 穩定 | 顯著改善 |
| 記憶體使用 | 較高 | 較低 | ~30% ⬇️ |
| CPU 使用率 | 較高 | 較低 | ~25% ⬇️ |
工具相容性比較
| 工具/程式 | ProxyChains | ProxyChains4 |
|---|---|---|
| nmap | ⚠️ 不穩定 | ✅ 穩定 |
| curl | ✅ 正常 | ✅ 正常 |
| wget | ✅ 正常 | ✅ 正常 |
| msfconsole | ⚠️ 有問題 | ✅ 穩定 |
| sqlmap | ⚠️ 偶爾失敗 | ✅ 穩定 |
| Firefox | ❌ 不支援 | ⚠️ 部分支援 |
| 靜態編譯程式 | ❌ 不支援 | ❌ 不支援 |
指令名稱差異
# 舊版
proxychains wget https://example.com
# 新版
proxychains4 wget https://example.com
# 某些系統上 proxychains 是 proxychains4 的別名
which proxychains
# /usr/bin/proxychains -> proxychains4
為什麼應該使用 ProxyChains4?
- 持續維護:定期修復 bug 和安全漏洞
- 更好的穩定性:特別是在 64 位元系統和多執行緒程式上
- DNS 安全:修復了 DNS 洩漏問題
- 更好的相容性:支援更多現代工具和作業系統
- 效能提升:更快的連線速度和更低的資源消耗
- Kali Linux 預設:Kali 已將 proxychains4 作為預設版本
快速判斷你使用的版本
# 方法 1:檢查版本
proxychains4 --version
# proxychains-ng 4.16
# 方法 2:檢查執行檔路徑
which proxychains4
# /usr/bin/proxychains4
# 方法 3:檢查套件資訊(Debian/Ubuntu)
dpkg -l | grep proxychains
# proxychains4 4.16-1 amd64 ...
結論:ProxyChains4 是 ProxyChains 的現代化替代品,功能更強、更穩定、持續維護中。除非有特殊需求,否則應一律使用 ProxyChains4。
3. 什麼時候使用
Proxychains4 適用於以下情境:
滲透測試場景:
– 透過已取得的跳板主機存取目標內網
– 隱藏攻擊來源 IP
– 繞過目標網路的存取限制
日常使用場景:
– 存取地區限制的網路資源
– 透過 SSH Tunnel 存取遠端網路
– 讓不支援代理的程式使用代理
開發測試場景:
– 測試應用程式在不同網路環境下的行為
– 模擬跨區域網路連線
4. 為什麼需要使用
解決的核心問題
許多命令列工具(如 nmap、sqlmap、curl)本身不支援代理設定,或設定方式各不相同。Proxychains4 提供統一的解決方案:
[你的電腦] → [Proxychains4] → [代理伺服器] → [目標主機]
與其他方案比較
| 方案 | 優點 | 缺點 |
|---|---|---|
| Proxychains4 | 通用性高、支援任何 TCP 程式 | 僅支援 TCP、需要設定 |
| 程式內建代理 | 原生支援、穩定 | 並非所有程式都支援 |
| VPN | 全域代理、簡單 | 不夠靈活、可能被偵測 |
| Tor | 高度匿名 | 速度慢、部分網站封鎖 |
獨特優勢
- 代理鏈(Proxy Chain):可串聯多個代理,增加匿名性
- 動態代理:支援隨機選擇代理,避免單一代理被封鎖
- 透明代理:對應用程式完全透明,無需修改程式
5. 怎麼安裝
Kali Linux(內建)
Kali Linux 已預裝 proxychains4,可直接使用:
proxychains4 --version
若未安裝,執行:
sudo apt update
sudo apt install proxychains4
Debian / Ubuntu
sudo apt update
sudo apt install proxychains4
macOS
# 使用 Homebrew
brew install proxychains-ng
# 執行檔名稱為 proxychains4
proxychains4 --version
Arch Linux
sudo pacman -S proxychains-ng
從原始碼編譯
# 下載原始碼
git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
# 編譯安裝
./configure --prefix=/usr --sysconfdir=/etc
make
sudo make install
sudo make install-config
從舊版遷移
如果你之前使用舊版 ProxyChains,遷移到 ProxyChains4 非常簡單:
# 步驟 1:安裝 ProxyChains4
sudo apt install proxychains4
# 步驟 2:複製設定檔(如有自訂設定,格式相容可直接複製)
sudo cp /etc/proxychains.conf /etc/proxychains4.conf
# 步驟 3:(選用)建立別名
echo 'alias proxychains="proxychains4"' >> ~/.bashrc
source ~/.bashrc
確認安裝
# 檢查版本
proxychains4 --version
# 檢查設定檔位置
proxychains4 -h
6. 怎麼用(參數與設定說明)
基本語法
proxychains4 [選項] <要執行的程式> [程式參數]
設定檔位置
Proxychains4 會依序尋找設定檔:
./proxychains.conf(當前目錄)~/.proxychains/proxychains.conf(使用者目錄)/etc/proxychains4.conf(系統目錄,Debian/Ubuntu)/etc/proxychains.conf(系統目錄)/usr/local/etc/proxychains.conf(macOS Homebrew)
設定檔詳解
# 編輯設定檔
sudo vim /etc/proxychains4.conf
完整設定範例:
# ========== 代理鏈模式 ==========
# 選擇以下其中一種模式(取消註解)
# dynamic_chain:動態鏈,跳過失效的代理繼續執行
dynamic_chain
# strict_chain:嚴格鏈,所有代理必須可用,依序連線
# strict_chain
# round_robin_chain:輪詢鏈,輪流使用代理
# round_robin_chain
# random_chain:隨機鏈,隨機選擇代理
# random_chain
# ========== 其他選項 ==========
# 允許代理 DNS 查詢(建議開啟,避免 DNS 洩漏)
proxy_dns
# 安靜模式,減少輸出訊息
quiet_mode
# 設定 TCP 連線逾時(毫秒)
tcp_read_time_out 15000
tcp_connect_time_out 8000
# 隨機鏈使用的代理數量
# chain_len = 2
# 排除本地網路(不經過代理)
localnet 127.0.0.0/255.0.0.0
localnet 10.0.0.0/255.0.0.0
localnet 172.16.0.0/255.240.0.0
localnet 192.168.0.0/255.255.0.0
# ========== 代理清單 ==========
[ProxyList]
# 格式:<協定> <IP> <Port> [帳號] [密碼]
# SOCKS5 代理(最常用)
socks5 127.0.0.1 1080
# SOCKS4 代理
# socks4 192.168.1.100 1080
# HTTP 代理
# http 192.168.1.100 8080
# 需要認證的代理
# socks5 192.168.1.100 1080 username password
# 多個代理(代理鏈)
# socks5 127.0.0.1 1080
# socks5 192.168.1.100 9050
# http 10.10.10.10 8080
代理鏈模式說明
| 模式 | 說明 | 適用場景 |
|---|---|---|
dynamic_chain |
依序使用代理,跳過失效的 | 一般使用(推薦) |
strict_chain |
嚴格依序,任一失效則中斷 | 需要固定路徑 |
round_robin_chain |
輪流使用每個代理 | 負載平衡 |
random_chain |
隨機選擇代理 | 高度匿名需求 |
常用指令範例
基本使用:
# 透過代理執行 wget
proxychains4 wget https://www.google.com
# 透過代理執行 curl
proxychains4 curl -I https://example.com
# 透過代理執行 nmap
proxychains4 nmap -sT -Pn 10.10.1.1
# 透過代理啟動 msfconsole
proxychains4 msfconsole
指定設定檔:
proxychains4 -f /path/to/custom.conf nmap -sT 10.10.1.1
安靜模式:
proxychains4 -q curl https://example.com
7. 紅隊怎麼用
場景一:後滲透內網掃描
當你已經取得一台跳板主機的存取權限,需要進一步探索內網:
步驟 1:在跳板主機建立 SOCKS 代理
使用 SSH Dynamic Port Forwarding:
# 在攻擊機上執行,建立 SOCKS5 代理
ssh -D 1080 -N -f user@compromised-host
或使用 Chisel(更隱蔽):
# 跳板主機(伺服器端)
./chisel server -p 8000 --socks5
# 攻擊機(客戶端)
./chisel client compromised-host:8000 1080:socks
步驟 2:設定 proxychains4
# 編輯設定檔
sudo vim /etc/proxychains4.conf
# 設定代理
[ProxyList]
socks5 127.0.0.1 1080
步驟 3:透過代理掃描內網
# 掃描內網主機
proxychains4 nmap -sT -Pn -p 22,80,443,445,3389 10.10.1.0/24
# 使用 Metasploit 進行滲透
proxychains4 msfconsole

場景二:多層代理跳板
當需要穿透多層網路:
[攻擊機] → [跳板1] → [跳板2] → [目標內網]
設定多層代理鏈:
dynamic_chain
proxy_dns
[ProxyList]
socks5 127.0.0.1 1080 # 跳板1
socks5 127.0.0.1 1081 # 跳板2(透過跳板1轉發)
場景三:隱藏攻擊來源
結合 Tor 增加匿名性:
# 啟動 Tor 服務
sudo systemctl start tor
# 設定 proxychains4 使用 Tor
[ProxyList]
socks5 127.0.0.1 9050
# 透過 Tor 執行偵察
proxychains4 nmap -sT -Pn target.com
場景四:繞過網路偵測
使用 random_chain 模式,每次連線隨機選擇代理:
random_chain
chain_len = 2
proxy_dns
[ProxyList]
socks5 proxy1.example.com 1080
socks5 proxy2.example.com 1080
socks5 proxy3.example.com 1080
http proxy4.example.com 8080
紅隊工具整合範例
# SQLMap 透過代理
proxychains4 sqlmap -u "http://target.com/page?id=1" --dbs
# Hydra 暴力破解
proxychains4 hydra -l admin -P passwords.txt ssh://10.10.1.100
# Gobuster 目錄掃描
proxychains4 gobuster dir -u http://10.10.1.100 -w wordlist.txt
# Nikto 網站掃描
proxychains4 nikto -h http://10.10.1.100
# CrackMapExec
proxychains4 crackmapexec smb 10.10.1.0/24
注意事項
| 限制 | 說明 | 解決方案 |
|---|---|---|
| 僅支援 TCP | UDP 流量不會被代理 | 使用 -sT 而非 -sU |
| ICMP 不支援 | ping 無法使用 | 使用 -Pn 跳過主機發現 |
| 部分程式不相容 | 某些靜態編譯程式無法 hook | 改用其他工具 |
8. 藍隊怎麼用(偵測特徵)
常見攻擊特徵
| 特徵 | 說明 |
|---|---|
| SOCKS 流量模式 | 大量連線經由同一 SOCKS 代理埠 |
| 異常 SSH 隧道 | 長時間維持的 SSH 連線 + 高流量 |
| DNS 查詢異常 | 啟用 proxy_dns 時,DNS 查詢也會經由代理 |
| 連線模式異常 | 同一來源對多個內網 IP 發起連線 |
| 工具特徵 | 特定掃描工具的流量模式(nmap、sqlmap) |
網路層偵測
Wireshark 過濾器:
# 偵測 SOCKS5 流量
tcp.port == 1080
# 偵測 SOCKS 握手
tcp.payload[0:2] == 05:01 or tcp.payload[0:2] == 05:00
# 偵測異常 SSH 隧道(大量資料傳輸)
ssh && tcp.len > 1000
Zeek/Bro 規則:
event connection_established(c: connection) {
if (cidresp_p == 1080/tcp) {
print fmt("Potential SOCKS proxy usage: %s -> %s",
cidorig_h, cidresp_h);
}
}
主機層偵測
偵測 proxychains4 執行:
# 即時監控程序執行
sudo auditctl -w /usr/bin/proxychains4 -p x -k proxychains_exec
# 查看審計日誌
sudo ausearch -k proxychains_exec
Sysmon for Linux 規則:
<RuleGroup name="Proxychains Detection" groupRelation="or">
<ProcessCreate onmatch="include">
<Image condition="contains">proxychains</Image>
<CommandLine condition="contains">proxychains4</CommandLine>
</ProcessCreate>
</RuleGroup>
可疑 SSH 隧道偵測
# 找出建立 Dynamic Port Forwarding 的 SSH 連線
ps aux | grep "ssh -D"
# 監控本機監聽的 SOCKS 埠
ss -tlnp | grep -E "1080|9050|8080"
netstat -tlnp | grep -E "1080|9050|8080"
防火牆規則
阻擋未授權的 SOCKS 代理:
# iptables 規則
sudo iptables -A OUTPUT -p tcp --dport 1080 -j DROP
sudo iptables -A OUTPUT -p tcp --dport 9050 -j DROP
# 僅允許特定主機建立 SSH 隧道
sudo iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner allowed_user -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 22 -j DROP
SIEM 告警規則
# 偵測異常 SOCKS 代理使用
IF internal_host establishes connection to port 1080 or 9050
AND destination is not in approved_proxy_list
THEN alert "Potential Unauthorized SOCKS Proxy Usage"
# 偵測 SSH 隧道行為
IF ssh_connection duration > 1 hour
AND data_transferred > 100MB
AND connection_count_through_tunnel > 50
THEN alert "Potential SSH Tunnel for Pivoting"
EDR 偵測邏輯
# 偵測 proxychains 執行
- name: Proxychains Execution Detection
conditions:
- process_name: "proxychains4"
- or:
- child_process_name: "nmap"
- child_process_name: "sqlmap"
- child_process_name: "hydra"
- child_process_name: "msfconsole"
severity: high
# 偵測動態 SSH 轉發
- name: SSH Dynamic Port Forwarding
conditions:
- process_name: "ssh"
- command_line_contains: "-D"
severity: medium
防禦建議
1. 網路分段:
– 限制跳板主機的橫向移動能力
– 實施零信任網路架構
2. 監控關鍵埠位:
– 1080(SOCKS)
– 9050(Tor)
– 8080(HTTP Proxy)
– 3128(Squid)
3. SSH 加固:
# /etc/ssh/sshd_config
AllowTcpForwarding no
PermitTunnel no
GatewayPorts no
4. 應用程式白名單:
– 限制可執行的程式清單
– 監控非標準工具的執行
9. 常見問題與故障排除
Q1: 連線逾時或失敗?
# 檢查代理伺服器是否可用
nc -zv 127.0.0.1 1080
# 測試代理連線
curl --socks5 127.0.0.1:1080 https://www.google.com
Q2: DNS 洩漏問題?
確保設定檔中啟用 proxy_dns:
proxy_dns
Q3: nmap 掃描失敗?
Proxychains 僅支援 TCP,必須使用 TCP Connect Scan:
# 正確方式
proxychains4 nmap -sT -Pn target.com
# 錯誤方式(SYN Scan 需要原始封包)
proxychains4 nmap -sS target.com # 不會生效
Q4: 輸出太多雜訊?
使用安靜模式:
proxychains4 -q curl https://example.com
或在設定檔中加入:
quiet_mode
Q5: 某些程式無法使用?
靜態編譯的程式無法被 proxychains hook,可嘗試:
– 使用動態編譯版本
– 改用其他支援代理的替代工具
– 使用 tsocks 或 torsocks 作為替代方案
10. 相關工具比較
| 工具 | 用途 | 特點 |
|---|---|---|
| Proxychains4 | 通用代理工具 | 簡單、通用 |
| Chisel | TCP/UDP 隧道 | 支援 UDP、單一執行檔 |
| Ligolo-ng | 隧道工具 | 無需 SOCKS、高效能 |
| sshuttle | VPN over SSH | 無需 root 權限 |
| revsocks | 反向 SOCKS 代理 | 適合受限環境 |
| gost | 多功能代理 | 支援多種協定 |
總結
Proxychains4 是滲透測試和網路管理中不可或缺的工具。對紅隊而言,它提供了靈活的代理機制,能夠隱藏攻擊來源並穿透網路限制;對藍隊而言,了解其運作原理和特徵有助於建立有效的偵測與防禦策略。
重點回顧:
| 角色 | 關鍵要點 |
|---|---|
| 新手 | 直接使用 ProxyChains4,設定 dynamic_chain + proxy_dns |
| 紅隊 | 結合 SSH/Chisel 建立隧道,透過代理進行內網滲透 |
| 藍隊 | 監控 SOCKS 埠(1080/9050)、SSH 隧道、異常連線模式 |
記得:永遠在授權範圍內進行測試。
