你是否遇到过某个程序需要代理,但它本身却不支持代理设置?也许你正在使用一个没有内置代理选项的命令行工具,或者你想通过多个代理来路由流量以获得额外的匿名性。这时 ProxyChains 就能派上用场了。

什么是 ProxyChains?

ProxyChains 是一个强大的 UNIX 工具,它可以强制程序的任何网络连接通过一个或多个代理服务器,即使该程序本身不支持代理。

它的工作原理是通过 LD_PRELOAD 钩住动态链接程序中的网络相关库调用,透明地将这些连接重定向到 SOCKS4、SOCKS5 或 HTTP 服务器等代理。

ProxyChains 支持 Linux、BSD、macOS 和 Haiku。最重要的是,它完全免费且开源。

无论你是安全研究员、渗透测试人员,还是只是想绕过地理限制的人,本指南都将引导你了解所需的一切。

ProxyChains 具体做什么?

你可以将 ProxyChains 视为网络流量的隧道构建器。当你在命令前加上 proxychains 运行程序时,其网络连接会自动重定向到你定义的代理。

ProxyChains 通过 LD_PRELOAD 钩住动态链接程序中的网络相关库调用来工作,在连接到达网络之前拦截它们。

请注意,这种方法仅适用于动态链接的程序。使用 dlopen() 加载模块的程序、以及生成多个后台进程的程序可能无法可靠工作。

常见用例包括:

  • 在连接网站时隐藏你的真实 IP 地址
  • 将多个代理链接在一起以获得额外的匿名性(例如 Tor → SOCKS5 → HTTP)
  • 绕过防火墙或地理限制
  • 使用没有内置代理支持的 nmap 或 curl 等网络工具
  • 测试应用程序在代理后面的行为

对于渗透测试和信息收集,推荐的顺序是:VPN → ProxyChains → 目标。这样,你的 ISP 只能看到发往 VPN 的加密流量,你的 VPN 提供商看到的是发往代理的连接而非最终目标,而目标只能看到你链中的最后一个代理。

重要提示: ProxyChains 不加密你的流量,并且它仅路由 TCP 连接。无论你配置何种代理类型,UDP 和 ICMP 都不受支持。你的隐私完全取决于你使用的代理以及它们是否支持加密(如 Tor 或基于 TLS 的 SOCKS5)。仅靠 ProxyChains 只能向目标隐藏你的 IP 地址。为了获得强大的隐私保护,请将其与 VPN 或 Tor 结合使用。

在 Linux 上安装 ProxyChains

ProxyChains 在大多数 Linux 发行版的仓库中都有提供。

在 Arch Linux 和 Manjaro 上:

sudo pacman -S proxychains-ng tor

在 Debian、Ubuntu 和 Pop!_OS 上:

sudo apt update
sudo apt install proxychains4 tor -y

在 Kali Linux 上,ProxyChains 是预装的,但你可能希望将其更新到最新版本。

在 Red Hat、Fedora、AlmaLinux 和 Rocky Linux 上:

对于使用 dnf 或 yum 的发行版:

sudo dnf install proxychains-ng tor

如果你需要从源码编译,可以克隆仓库:

git clone https://github.com/rofl0r/proxychains-ng
cd proxychains-ng
./configure --prefix=/usr --sysconfdir=/etc
make -j $(nproc)
sudo make install
sudo make install-config

这会将配置文件安装到 /etc/proxychains.conf。你还需要安装 Tor,因为默认配置使用本地 Tor 代理(通过 proxychains4 软件包安装)。

启动 Tor 服务

在我们配置任何东西之前,先启动 Tor 服务。Tor 默认在 127.0.0.1:9050 上提供一个 SOCKS 代理。

sudo systemctl start tor
sudo systemctl enable tor  # Starts Tor automatically at boot

检查它是否正常运行:

sudo systemctl status tor

你应该会在输出中看到 "active (running)"。

配置 ProxyChains

现在到了重要部分。主配置文件通常位于 Debian/Ubuntu/Kali(通过 proxychains4 软件包安装)的 /etc/proxychains4.conf,或源码构建和其他一些发行版的 /etc/proxychains.conf。

用你喜欢的文本编辑器打开它:

sudo nano /etc/proxychains4.conf

步骤 1:选择链类型

在文件开头找到链类型部分。你会看到几个选项,每个都有特定的行为:

#dynamic_chain
#strict_chain
#round_robin_chain
#random_chain

选择适合你需求的选项:

  • dynamic_chain(推荐给初学者):按列出的顺序使用代理,但会跳过失效的代理。只要至少有一个代理工作,链就能正常运行。
  • strict_chain(默认):严格按照顺序使用代理。如果任何一个代理失败,整个链都会失败。
  • round_robin_chain:按顺序循环使用代理,每次新连接从上一次结束的地方开始。
  • random_chain:每次连接从你的列表中随机选取代理。

通过移除行首的 # 来取消注释你选择的类型,并注释掉其他行。

步骤 2:启用 DNS 代理

找到 #proxy_dns 行并取消注释。这可以防止 DNS 泄露,将 DNS 请求也通过你的代理路由:

proxy_dns

步骤 3:检查超时设置

默认的超时值通常没问题,但你可以根据需要调整:

tcp_read_time_out 15000
tcp_connect_time_out 8000

步骤 4:添加你的代理

滚动到文件末尾的 [ProxyList] 部分。默认条目是 localhost 端口 9050 上的 SOCKS4 代理(Tor):

socks4 127.0.0.1 9050

为了配合 proxy_dns 指令使用,请将其替换为 SOCKS5 条目。SOCKS5 支持正确的代理端 DNS 解析,这正是 proxy_dns 防止泄露所依赖的:

[ProxyList]
socks5 127.0.0.1 9050

添加代理的格式是:type IP_address port [username] [password]。支持的代理类型包括 http、socks4 和 socks5。

使用 Ctrl + O 保存文件,按 Enter,然后按 Ctrl + X 退出 nano。

测试你的设置

让我们验证一切是否正常工作。首先,检查你的真实 IP 地址:

curl ifconfig.me

现在检查通过 ProxyChains 后你显示的 IP:

proxychains curl ifconfig.me

这个 IP 应该与你的真实 IP 不同。

你也可以专门使用 Tor 项目的检查器进行测试:

proxychains curl https://check.torproject.org

如果一切设置正确,你应该会看到一条消息,显示 "Congratulations. This browser is configured to use Tor."

将 ProxyChains 与命令行应用程序一起使用

使用 ProxyChains 非常简单。只需在任何命令前加上 proxychains:

# Downloading files
proxychains wget http://example.com/file.zip
# Network scanning with nmap
proxychains nmap -sT -Pn target.com
# SSH connections
proxychains ssh [email protected]

对于像 nmap 这样的网络扫描工具,请记得使用 -sT(TCP 连接)标志,因为 SYN 扫描(-sS)使用原始套接字,无法通过 ProxyChains 工作。

将 Firefox 与 Tor 一起使用(重要提示)

你可能会想用 proxychains firefox 来运行 Firefox。然而,这种方法并不可靠,因为现代 Firefox 通过 dlopen() 加载的模块(如 libxul)来加载其网络代码,这些模块不会继承 ProxyChains 所依赖的 LD_PRELOAD 钩子。官方 ProxyChains 文档明确指出这是一个已知限制。

以下是正确地将 Firefox 路由到 Tor 的方法:

步骤 1:确认 Tor 正在运行

sudo systemctl status tor

如果它没有运行,请启动它:

sudo systemctl start tor

步骤 2:手动配置 Firefox

打开 Firefox 并按照以下步骤操作:

  1. 点击右上角的菜单按钮(三条横线)。
  2. 选择 设置(在某些系统上是 首选项)。
  3. 向下滚动到 代理设置 部分,然后点击 配置代理 按钮。
  4. 在出现的对话框中,选择 手动代理配置。
  5. 在 SOCKS 主机 字段中,输入 127.0.0.1,端口 输入 9050。
  6. 选择 SOCKS v5 作为 SOCKS 版本。
  7. 最重要的是,勾选 使用 SOCKS v5 时代理 DNS 复选框。这可以防止 DNS 泄露。

步骤 3:验证配置(可选)

为了进行高级验证,在 Firefox 地址栏中输入 about:config 并接受警告。搜索这些设置并确认它们匹配:

  • network.proxy.type 应为 1(手动代理配置)
  • network.proxy.socks 应为 127.0.0.1
  • network.proxy.socks_port 应为 9050
  • network.proxy.socks_version 应为 5
  • network.proxy.socks_remote_dns 应为 true

步骤 4:测试你的设置

在 Firefox 中导航到 https://check.torproject.org/。如果配置正确,页面将显示 "Congratulations. This browser is configured to use Tor."

这种手动配置方法比在 Firefox 中使用 proxychains 可靠得多。你的 proxychains 设置仍然可以完美地用于 curl、wget 和 nmap 等命令行工具。

考虑商业代理(可选)

默认的 Tor 代理是免费的,并且对于注重隐私的任务来说效果很好。然而,Tor 网络可能比常规代理慢,并且一些网站会阻止或限制来自 Tor 出口节点的连接。

如果你需要更快的速度、稳定的连接或专用的 IP 地址,你可以将 ProxyList 中的 Tor 条目替换为来自商业提供商的 SOCKS5 或 HTTP 代理。根据提供商和代理类型的不同,这些服务可能提供更好的性能,并且比 Tor 更不容易遇到封锁。

例如,像 Proxy-Seller 这样的提供商提供与 Proxychains 兼容的 HTTP、HTTPS 和 SOCKS5 代理。无论你选择哪个提供商,在购买前都要比较代理类型、服务器位置、认证方法、正常运行时间和定价等功能。测试服务并阅读独立评论以确保它满足你的需求也是个好主意。

SOCKS4 和 SOCKS5 的区别

在设置代理时,你会遇到 SOCKS4 和 SOCKS5。以下是为什么 SOCKS5 通常更受青睐的原因:

*SOCKS5 在协议层面支持 UDP,但 ProxyChains 仅路由 TCP 连接,无论配置了哪种代理类型。SOCKS5 的 UDP 能力无法通过 ProxyChains 使用。

SOCKS5 在 ProxyChains 中更受青睐,主要是因为它支持完整的代理端 DNS 解析(由 proxy_dns 指令使用)、认证和 IPv6 寻址。

ProxyChains 与 VPN 相比如何?

你可能想知道,既然 VPN 看起来更简单,为什么还要使用 ProxyChains。两者都能增强匿名性,但它们的工作方式截然不同。

VPN 创建一个系统级的加密隧道,将所有互联网流量路由到其服务器。这是一种全有或全无的方法,提供强大的加密和良好的速度。但是,你必须信任你的 VPN 提供商不会记录你的活动。

ProxyChains 在应用程序级别工作。它只强制特定程序(如 curl 或 nmap)通过代理链,而其他应用程序不受影响。这提供了精细的控制,但本身不提供加密。你的匿名性完全取决于你使用的代理。

速度方面,现代 VPN 通常快得多,因为它使用了像 WireGuard 这样的优化协议。ProxyChains 可能会明显变慢,特别是如果你链接了多个代理或使用了 Tor 网络,后者会在全球多个节点间反弹流量。

简而言之: 当你需要为所有内容提供快速、加密的保护时,使用 VPN。当你需要通过自定义代理链路由特定工具时,例如进行 OSINT 研究或渗透测试,使用 ProxyChains。

高级配置技巧

在链中使用多个代理

你可以链接多个代理以获得额外的匿名性。请记住,添加更多代理会增加匿名性,但会降低速度并增加连接失败的可能性。将它们全部添加到 [ProxyList] 部分:

[ProxyList]
socks5 192.168.1.10 1080
http 192.168.1.20 8080
socks5 192.168.1.30 1080

添加需要认证的代理

如果你的代理需要认证,请包含用户名和密码:

socks5 proxy.example.com 1080 username password

排除本地网络

你可以使用 localnet 指令排除特定的 IP 范围不被代理:

localnet 127.0.0.0/255.0.0.0
localnet 192.168.0.0/255.255.0.0

排查 ProxyChains 问题

如果出现问题,请尝试以下步骤:

  1. 检查 Tor 状态:sudo systemctl status tor
  2. 使用详细模式:proxychains curl -v https://check.torproject.org
  3. 验证你的代理列表:确保地址和端口正确
  4. 重启 Tor:sudo systemctl restart tor
  5. 检查配置文件路径:运行 proxychains4 --help 查看正在使用哪个配置文件
  6. 对于 Firefox 问题:请记住,Firefox 需要手动代理配置,而不是 proxychains,因为它使用了动态加载的模块,这些模块绕过了 LD_PRELOAD 钩子

常见问题(FAQ)

问:Proxychains 是免费的吗? 答:是的。Proxychains 是开源软件,可以免费使用。

问:Proxychains 支持 SOCKS5 吗? 答:是的。Proxychains 支持 SOCKS4、SOCKS5 和 HTTP 代理。

问:我可以将 Proxychains 与 SSH 一起使用吗? 答:可以。只需在命令前加上 Proxychains:

proxychains ssh user@host

问:Proxychains 适用于所有应用程序吗? 答:不。它主要适用于使用 TCP 连接的应用程序。

问:Proxychains 和 VPN 有什么区别? 答:VPN 在系统或网络级别路由流量。Proxychains 通过配置的代理路由特定的应用程序流量。