3proxy 是一套轻量级、高性能的代理服务器软件,可安装并配置为提供 HTTP、HTTPS、SOCKSv4/4.5/5 和 FTP 代理服务,以及 TCP 端口映射和流量重定向;在类 Unix 系统上主要通过源码编译安装,在 Windows 上则使用预编译的二进制文件。
3proxy 是一款紧凑而灵活的代理服务器,专为资源占用极低、可配置性极高的环境设计。体积小、效率高,使它适用于嵌入式系统、个人使用,或者 Squid 这类全功能代理显得过于臃肿的场景。
前置条件
安装 3proxy 之前,请确认目标系统满足以下要求:
- 操作系统:用于编译的类 Unix 系统(Linux、FreeBSD、macOS),或使用二进制发行版的 Windows。本指南以 Linux 为主。
- 编译器:GCC 或 Clang(用于源码编译)。
- 构建工具:
make工具。 - 网络访问:能够下载源码文件。
- 用户权限:安装和配置系统服务需要
root或sudo权限。
安装
安装 3proxy 通常包括下载源码、编译,然后将二进制文件和配置文件放到合适的位置。
下载源码
请始终从 3proxy 官网或其 GitHub 仓库下载最新的稳定版本。
# 进入临时目录
cd /tmp
# 下载最新稳定版本(如版本不同,请替换为当前版本)
# 最新链接请查看 https://3proxy.ru/ 或 https://github.com/3proxy/3proxy
wget https://3proxy.ru/0.9.4/3proxy-0.9.4.tar.gz
# 解压压缩包
tar -xzf 3proxy-0.9.4.tar.gz
# 进入解压后的目录
cd 3proxy-0.9.4
编译与安装
3proxy 使用简单的 Makefile,编译过程很直接。
# 编译 3proxy
make -f Makefile.Linux
# 创建安装目录
mkdir -p /usr/local/3proxy/bin
mkdir -p /usr/local/3proxy/etc
mkdir -p /usr/local/3proxy/logs
# 安装编译好的二进制文件和示例配置
cp src/3proxy /usr/local/3proxy/bin/
cp 3proxy.cfg.sample /usr/local/3proxy/etc/3proxy.cfg
# 设置合适的权限(可选,但推荐)
chmod 755 /usr/local/3proxy/bin/3proxy
chmod 640 /usr/local/3proxy/etc/3proxy.cfg
如果系统需要特定功能(例如 NTLM 认证、IPv6 支持),请查阅 src/Makefile.Linux 中的编译选项。例如启用 NTLM:make -f Makefile.Linux NTLM。
基础配置
3proxy 的主配置文件是 3proxy.cfg,它定义监听端口、代理类型、认证方式和访问规则。默认位置为 /usr/local/3proxy/etc/3proxy.cfg。
核心指令
一个最小化的 3proxy.cfg 包含:
nserver:指定用于主机名解析的 DNS 服务器。timeouts:设置各类连接超时。log:定义日志文件路径和格式。users:声明用于认证的用户。auth:指定认证方式。proxy、socks、tcppm:定义代理服务。
示例:简单的 HTTP/HTTPS 代理
以下配置在 3128 端口上建立一个 HTTP/HTTPS 代理,要求用户名 testuser、密码 password123 的基本认证。
# /usr/local/3proxy/etc/3proxy.cfg
# 全局设置
nserver 8.8.8.8 # Google 公共 DNS
nserver 8.8.4.4
# 超时(秒)
timeouts 1 5 30 60 180 1800 15 60
# 日志设置
# log /usr/local/3proxy/logs/3proxy.log D # 按天轮转
log /usr/local/3proxy/logs/3proxy.log
logformat "- +_L%t.%. %N.%O %I %E %U %C:%c %R:%r %O %h %T"
# 认证用户:用户名:密码
users testuser:CL:password123
# 认证方式
# CL:明文密码(不建议用于生产环境)
# LM:LAN Manager 哈希
# NT:NTLM 哈希
# P:加密密码(3proxy 内部格式,使用 `3proxy -e` 生成)
auth strong # 使用强认证(需要 LM/NT 或 P)
# 若使用简单的 CL 密码,请改用 'auth iponly,basic'
# 允许已认证用户访问
allow testuser
# 定义 HTTP/HTTPS 代理服务
# -p 3128:监听 3128 端口
# -n:为该服务禁用 NTLM 认证(若已启用全局 NTLM)
# -a:启用基本认证
proxy -p3128
使用 3proxy -e 生成加密密码:
/usr/local/3proxy/bin/3proxy -e password123
输出结果(例如 _E_01000000010000000000000000000000)随后可以带 _E_ 前缀用于 users 指令:users testuser:_E_01000000010000000000000000000000。
运行 3proxy
配置好 3proxy.cfg 之后,启动服务器:
/usr/local/3proxy/bin/3proxy /usr/local/3proxy/etc/3proxy.cfg
以守护进程方式在后台运行:
/usr/local/3proxy/bin/3proxy /usr/local/3proxy/etc/3proxy.cfg -d
进阶配置主题
认证方式
3proxy 支持多种认证方式:
iponly:仅基于客户端 IP 地址认证(无需用户名/密码)。basic:HTTP Basic 认证(以明文发送凭据)。digest:HTTP Digest 认证。ntlm:NTLM 认证(需在编译时启用 NTLM 支持)。strong:自动选择可用的最强方式。
auth iponly 示例:
# /usr/local/3proxy/etc/3proxy.cfg
auth iponly
allow 192.168.1.0/24 # 允许该子网内所有客户端,无需显式用户认证
proxy -p3128
访问控制
allow 和 deny 指令按多种条件控制客户端访问。规则按顺序处理,第一条匹配的规则生效。
# /usr/local/3proxy/etc/3proxy.cfg
# 拒绝指定 IP 地址
deny 192.168.1.10
# 允许指定用户
allow myuser
# 允许指定子网使用 HTTP/HTTPS
allow * 192.168.1.0/24 * * HTTP HTTPS
# 拒绝访问指定目标域名
deny * * .example.com
allow/deny 的语法为 allow [user] [src_ip] [dst_ip] [target_port] [protocol]。* 表示通配符。
代理链(上级代理)
3proxy 可以使用 parent 指令将请求转发到另一台代理服务器。
# /usr/local/3proxy/etc/3proxy.cfg
# 链接到上游 HTTP 代理
parent 1000 http 192.168.1.100 8080 myuser:mypass
# 链接到上游 SOCKS5 代理
parent 1000 socks5 192.168.1.101 1080
第一个参数 1000 是以毫秒为单位的超时时间。
SOCKS 代理
要配置 SOCKS 代理(v4、v4.5、v5),使用 socks 指令。
# /usr/local/3proxy/etc/3proxy.cfg
# 在 1080 端口定义 SOCKS 代理服务
socks -p1080
TCP 端口映射(TCPPM)
tcppm 指令可将 TCP 连接从本地端口转发到远程主机和端口。
# /usr/local/3proxy/etc/3proxy.cfg
# 将本地 2222 端口的连接转发到 remotehost:22(SSH)
tcppm -p2222 remotehost.example.com 22
日志配置
log 指令指定日志文件,logformat 定义输出结构,rotate 配置日志轮转。
# /usr/local/3proxy/etc/3proxy.cfg
# 将日志写入 /usr/local/3proxy/logs/access.log
log /usr/local/3proxy/logs/access.log
# 自定义日志格式
logformat "- +_L%t.%. %N.%O %I %E %U %C:%c %R:%r %O %h %T"
# 按天(D)、按周(W)、按月(M)或按大小(S<bytes>)轮转日志
rotate D /usr/local/3proxy/logs/archive
系统集成(systemd 服务)
为保证运行稳定,可将 3proxy 作为 systemd 服务运行。
-
创建服务文件:
/etc/systemd/system/3proxy.service```ini
[Unit]
Description=3proxy Lightweight Proxy Server
After=network.target[Service]
Type=forking
ExecStart=/usr/local/3proxy/bin/3proxy /usr/local/3proxy/etc/3proxy.cfg -d
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
User=nobody # 或使用专用的非特权用户,例如 '3proxy'
Group=nogroup # 或使用专用用户组[Install]
WantedBy=multi-user.target
`` *注意*:如有需要,创建3proxy用户/用户组:sudo useradd -r -s /sbin/nologin 3proxy。请相应调整/usr/local/3proxy/logs` 的文件归属。 -
重新加载 systemd,启用并启动服务:
bash sudo systemctl daemon-reload sudo systemctl enable 3proxy.service sudo systemctl start 3proxy.service sudo systemctl status 3proxy.service
故障排查建议
- 查看日志:出现错误信息或访问问题时,务必查看 3proxy 日志文件(默认为
/usr/local/3proxy/logs/3proxy.log)。 - 防火墙规则:确认防火墙(例如
ufw、firewalld、iptables)允许入站连接访问 3proxy 的监听端口(例如 3128、1080)。
bash # ufw 示例 sudo ufw allow 3128/tcp - 配置语法:检查
3proxy.cfg是否存在语法错误。3proxy 对配置格式要求严格。 - 权限:确认 3proxy 二进制文件具有执行权限,且运行该服务的用户对日志目录有写权限。
- 重启服务:任何配置变更之后,请重新加载或重启 3proxy 服务(
sudo systemctl restart 3proxy)。
3proxy 与 Squid 对比
| 特性 | 3proxy | Squid |
|---|---|---|
| 资源占用 | 极低(CPU、RAM 占用小) | 中到高(取决于负载/功能) |
| 复杂度 | 相对简单,纯文本配置 | 复杂,配置选项繁多 |
| 代理类型 | HTTP、HTTPS、SOCKS、FTP、TCPPM | HTTP、HTTPS、FTP、ICP、ESI |
| 缓存 | 无原生缓存 | 强大且高度可配置的缓存 |
| SSL 拦截 | 有限/基础 | 高级,基于证书 |
| 认证 | Basic、Digest、NTLM、基于 IP | 全面(LDAP、Kerberos、RADIUS) |
| 适用场景 | 轻量、个人、嵌入式 | 企业级、高流量、内容过滤 |
| 开发情况 | 活跃,单一开发者 | 活跃,社区驱动 |
