[資安工具] 001 Proxychains4 教學:代理鏈設定與紅藍隊實戰應用指南

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?

  1. 持續維護:定期修復 bug 和安全漏洞
  2. 更好的穩定性:特別是在 64 位元系統和多執行緒程式上
  3. DNS 安全:修復了 DNS 洩漏問題
  4. 更好的相容性:支援更多現代工具和作業系統
  5. 效能提升:更快的連線速度和更低的資源消耗
  6. 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 會依序尋找設定檔:

  1. ./proxychains.conf(當前目錄)
  2. ~/.proxychains/proxychains.conf(使用者目錄)
  3. /etc/proxychains4.conf(系統目錄,Debian/Ubuntu)
  4. /etc/proxychains.conf(系統目錄)
  5. /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

proxychains4

場景二:多層代理跳板

當需要穿透多層網路:

[攻擊機] → [跳板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,可嘗試:
– 使用動態編譯版本
– 改用其他支援代理的替代工具
– 使用 tsockstorsocks 作為替代方案


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 隧道、異常連線模式

記得:永遠在授權範圍內進行測試。


參考資源

林子婷(飛飛/Phoebe菲比)
林子婷(飛飛/Phoebe菲比)

技術專長:OSINT、滲透測試、網站開發、專業易懂教育訓練。
資安證照:OSCE3、OSED、OSWE、OSEP、OSCP、OSTH、OSWA、OSWP、OSCC、OSCC-SJD。
資安書籍:《資安這條路:領航新手的 Web Security指南》。
教學經驗:50+ 企業教學經驗、指導過上百位學員。
教學特色:新手友善、耐心指導、擅長圖解(流程圖、心智圖)引導學習。
社群經驗:目前經營全臺資安社群 CURA,曾任臺科資安社社長、逢甲黑客社社長。
社群交流:Line 社群《飛飛的資安大圈圈》,即時分享經驗、鼓勵交流。
社群分享:FB 粉專《資安這條路,飛飛來領路》,分享文章與圖卡整理。
資安網站:feifei.tw 資安系列文章