一、什么是Proxychains
ProxyChains 是一款用于在 Linux 系统上通过多个代理服务器转发网络流量的工具。它允许你将任何 TCP 连接的应用程序(例如浏览器、curl、wget、nmap 等)的流量通过你指定的代理链路进行转发,从而隐藏你的真实 IP 地址,绕过地理限制或防火墙,以及增强你的网络匿名性。
二、安装和配置
对于Debian系Linux,可以直接使用apt install proxychains4
安装,
其配置文件一般在/etc/proxychains4.conf
。
配置参考,以下为配置文件内容,各部分已翻译为中文:
重点在于最后的
[ProxyList]
部分,在这里添加你的代理服务器,格式为类型 IP 端口 [用户名 密码]
,类型支持http、socks4、socks5、raw,raw类型流量不经修改直接转发到代理。
# proxychains.conf VER 4.x
#
# HTTP, SOCKS4a, SOCKS5 代理隧道工具,支持DNS解析
# 以下选项定义了代理列表的处理方式
# 同一时间只能取消一个选项的注释
# 否则最后出现的选项将被采用
#
#dynamic_chain
#
# Dynamic - 每个连接都将通过代理链进行
# 所有代理按列表中的顺序链接
# 至少需要一个代理在线才能工作
# (跳过无法连接的代理)
# 否则返回EINTR给应用程序
#
strict_chain
#
# Strict - 每个连接都将通过代理链进行
# 所有代理按列表中的顺序链接
# 所有代理必须在线才能工作
# 否则返回EINTR给应用程序
#
#round_robin_chain
#
# Round Robin - 每个连接都将通过长度为chain_len的代理链进行
# 所有代理按列表中的顺序链接
# 至少需要一个代理在线才能工作
# (跳过无法连接的代理)
# 当前代理链的起点是上一次使用的代理链中最后一个代理之后的代理
# 如果在查找代理时到达代理链末尾
# 则从头开始
# 否则返回EINTR给应用程序
# 这些语义在多线程环境中不能保证
#
#random_chain
#
# Random - 每个连接将通过从列表中随机选择的代理进行
# (或代理链,参见chain_len)
# 这个选项适合测试你的IDS :)
# 仅在random_chain或round_robin_chain时有意义
#chain_len = 2
# 安静模式(库不输出任何信息)
#quiet_mode
## 代理DNS请求 - 防止DNS数据泄露
# (禁用以下3个选项以不代理DNS请求)
# 方法1. 使用proxychains4风格的方法进行远程dns:
# 启动一个线程来处理DNS请求,并从内部列表(通过remote_dns_subnet)
# 分配IP地址
# 这是最简单(设置方面)和最快的方法,但在
# 有bug的libc系统和非常复杂的软件(如网页浏览器)上
# 可能无法工作或导致崩溃
proxy_dns
# 方法2. 使用旧的proxyresolv脚本以proxychains 3.1
# 风格代理DNS请求。需要在$PATH中有`proxyresolv`
# 以及动态链接的`dig`二进制文件
# 这比`proxy_dns`慢得多,不支持.onion URL,
# 但可能与复杂软件(如网页浏览器)更兼容
#proxy_dns_old
# 方法3. 使用proxychains4-daemon进程处理远程DNS请求
# 这类似于线程化的`proxy_dns`方法,但需要
# proxychains4-daemon已在指定地址上运行
# 好处是它不进行malloc/线程操作,所以应该相当
# 兼容复杂的、异步不安全的软件
# 注意如果在使用此选项前没有启动proxychains4-daemon,
# 进程将简单地挂起
#proxy_dns_daemon 127.0.0.1:1053
# 设置用于内部远程DNS映射的A类子网号
# 默认使用保留的224.x.x.x范围
# 如果代理应用程序发出DNS请求,我们将返回该范围内的IP
# 在进一步访问此IP时,我们将向代理发送保存的DNS名称
# 如果某些控制严格的应用程序检查返回的IP并拒绝
# 连接,你可以使用另一个子网,如10.x.x.x或127.x.x.x
# 当然你应该确保代理应用程序不需要
# *实际*访问此子网
# 即不要在localnet部分使用相同的子网
#remote_dns_subnet 127
#remote_dns_subnet 10
remote_dns_subnet 224
# 超时时间(毫秒)
tcp_read_time_out 15000
tcp_connect_time_out 8000
### 本地网络排除示例
## localnet范围将*不会*使用代理连接
## 注意localnet仅在向应用程序传递纯IP地址时有效
## 主机名通过/etc/hosts解析,或proxy_dns被禁用或使用proxy_dns_old
## 排除到192.168.1.0/24网段的80端口连接
# localnet 192.168.1.0:80/255.255.255.0
## 排除到192.168.100.0/24的连接
# localnet 192.168.100.0/255.255.255.0
## 排除到任何地方的80端口连接
# localnet 0.0.0.0:80/0.0.0.0
# localnet [::]:80/0
## RFC6890 回环地址范围
## 如果启用此项,你必须确保remote_dns_subnet不是127
## 如果你想使用连接到localhost的应用程序,
## 你需要启用它
# localnet 127.0.0.0/255.0.0.0
# localnet ::1/128
## RFC1918 私有地址范围
# 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
### dnat示例
## 尝试代理到被dnat的目标的连接
## 将导致代理连接到新给定的目标
## 当我连接到1.1.1.1的1234端口时实际连接到1.1.1.2的443端口
# dnat 1.1.1.1:1234 1.1.1.2:443
## 当我连接到1.1.1.1的443端口时实际连接到1.1.1.2的443端口
## (不需要再写:443)
# dnat 1.1.1.2:443 1.1.1.2
## 无论我连接到1.1.1.1的哪个端口都实际连接到1.1.1.2的443端口
# dnat 1.1.1.1 1.1.1.2:443
## 始终将到1.1.1.1的连接改为连接到1.1.1.2
# dnat 1.1.1.1 1.1.1.2
# 代理列表格式
# 类型 IP 端口 [用户名 密码]
# (值用'tab'或'空格'分隔)
#
# 只支持数字形式的IPv4地址
#
#
# 示例:
#
# socks5 192.168.67.78 1080 lamer secret
# http 192.168.89.3 8080 justu hidden
# socks4 192.168.1.49 1080
# http 192.168.39.93 8080
#
#
# 代理类型: http, socks4, socks5, raw
# * raw: 流量不经修改直接转发到代理
# ( 支持的认证类型: http的"basic" socks的"user/pass" )
#
[ProxyList]
# 在此添加代理...
# 同时
# 默认设置为"tor"
socks5 127.0.0.1 1080
三、使用
使用 ProxyChains 非常简单,只需在命令行中使用 proxychains 命令,后面跟上你想要通过代理运行的命令即可。例如,要通过 ProxyChains 访问 Google,你可以使用以下命令:
proxychains curl https://www.google.com
参数部分
-q
安静模式,不输出任何信息-f
指定配置文件路径
示例:
proxychains -q curl https://www.google.com
四、工作原理
ProxyChains 通过拦截目标应用程序的网络连接请求,并将这些请求转发到预先配置的代理服务器链中。它支持多种类型的代理,包括 SOCKS4、SOCKS5 和 HTTP 代理。你可以配置代理链的顺序、代理类型以及每个代理的地址和端口。流量会依次经过这些代理服务器,最终到达目标服务器。目标服务器只会看到最后一个代理服务器的 IP 地址,而不会看到你的真实 IP 地址。
五、主要功能和特性
- 代理链路: 允许你指定多个代理服务器,并将流量依次通过这些服务器转发。这增加了匿名性和安全性,因为追踪你的真实 IP 地址变得更加困难。
- 多种代理类型支持: 支持 SOCKS4、SOCKS5 和 HTTP 代理。你可以混合使用不同类型的代理。
- 可配置的链路策略: 你可以选择不同的链路策略,例如严格顺序链路(strict_chain)、随机链路(random_chain)和动态链路(dynamic_chain)。
- 与 Tor 的集成: 可以与 Tor 网络集成,进一步增强匿名性。
- 易于使用: 配置相对简单,只需编辑配置文件即可。