要搭建自己的代理服务器,通常需要在 Linux 服务器上安装并配置专用的代理软件,例如用于 HTTP/HTTPS 缓存的 Squid、轻量级 HTTP/SOCKS 的 3proxy,或功能强大的 SOCKS5 服务端 Dante,并定义监听端口、访问控制和认证机制。
自建代理服务器可以让您掌控网络流量、保护隐私、访问受地域限制的内容,或为内部网络提供更强的安全性。软件的选择取决于具体需求,例如协议支持(HTTP、HTTPS、SOCKS)、缓存需要以及可接受的复杂度。
通用前置条件
在配置任何代理之前,请确认您的服务器满足以下基本要求:
* 操作系统: 通常使用 Linux 发行版(例如 Ubuntu、Debian、CentOS)。
* 网络接入: 服务器必须具备合适的网络连通性;如需外部访问,还需要公网 IP 地址。
* 防火墙配置: 在服务器防火墙(例如 ufw、firewalld)上开放所需端口(例如 HTTP 用 3128,SOCKS 用 1080)。
Squid 代理服务器
Squid 是面向 Web 客户端的功能完整的高性能缓存代理,支持 HTTP、HTTPS、FTP 等协议。它擅长缓存高频访问的内容,从而降低带宽消耗并缩短响应时间。
安装(Debian/Ubuntu)
sudo apt update
sudo apt install squid
在 CentOS/RHEL 上:sudo yum install squid 或 sudo dnf install squid。
基础配置
主配置文件通常位于 /etc/squid/squid.conf。
1. 定义监听端口:
找到或添加 http_port 指令。
http_port 3128
2. 访问控制列表(ACL):
Squid 使用 ACL 定义网段、用户或其他条件,并通过 http_access 规则来执行相应动作。
```
# 定义局域网 ACL(请替换为您服务器的本地子网或客户端 IP)
acl localnet src 192.168.1.0/24 # 示例:允许该子网内的客户端
acl localhost src 127.0.0.1/32
# 允许已定义的 ACL 访问
http_access allow localhost
http_access allow localnet
# 拒绝其他所有访问
http_access deny all
```
如需允许任意 IP 地址访问(安全性较低,请谨慎使用并配合认证):
```
acl all src 0.0.0.0/0
http_access allow all
```
- 重启 Squid:
bash sudo systemctl restart squid sudo systemctl enable squid sudo systemctl status squid
用户认证(Basic Auth)
启用基础的用户名/密码认证以提升安全性。
1. 安装 Apache 工具包(用于 htpasswd):
bash
sudo apt install apache2-utils
2. 创建密码文件:
bash
sudo htpasswd -c /etc/squid/passwd yourusername
# 输入并确认密码。添加更多用户时省略 -c:
# sudo htpasswd /etc/squid/passwd anotheruser
3. 配置 Squid 认证:
将下列行添加到 squid.conf(例如文件开头或 AUTH 部分):
```
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5 startup=5 idle=1
auth_param basic realm "Squid Proxy Authentication"
auth_param basic credentialsttl 2 hours
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_access deny all
```
请确保 `http_access allow authenticated` 出现在任何会拦截已认证用户的 `http_access deny all` 规则*之前*。
- 重启 Squid。
HTTPS 拦截(透明代理)
Squid 可以拦截并解密 HTTPS 流量,这需要生成自定义 SSL 证书并让客户端设备信任该证书。这是一种复杂配置,主要用于企业环境的内容过滤与监控;由于涉及安全和隐私问题,一般不建议个人使用。
3proxy 代理服务器
3proxy 是一款轻量、灵活的代理服务器,支持 HTTP、HTTPS(CONNECT)、SOCKS4/5、FTP 等协议。它以占用资源小、配置灵活著称。
安装(源码编译)
为获得最新版本和最大控制权,3proxy 通常从源码编译。
1. 安装编译工具:
bash
sudo apt update
sudo apt install build-essential git
2. 下载并编译:
bash
git clone https://github.com/z3APA3A/3proxy.git
cd 3proxy
make -f Makefile.Linux
sudo make -f Makefile.Linux install
二进制文件通常会安装到 /usr/local/bin/3proxy。
基础配置
创建一个配置文件,例如 /etc/3proxy/3proxy.cfg。
1. DNS 解析器:
nserver 8.8.8.8 # Google DNS
nserver 1.1.1.1 # Cloudflare DNS
2. 认证(按需):
auth strong
users yourusername:CL:yourpassword # CL 表示明文,生产环境请使用哈希
3. 定义代理:
* HTTP 代理:
proxy -p3128
* SOCKS5 代理:
socks -p1080
* HTTP 与 SOCKS 并用:
proxy -p3128
socks -p1080
4. 访问控制:
放在 users 之后、proxy/socks 行之前:
allow yourusername # 仅允许指定用户
# 或允许所有已认证用户:
# allow *
# 或允许来自特定 IP:
# allow 192.168.1.0/24
一种基础但安全性较低的配置,允许任何人从任何地方连接:
allow * *
proxy -p3128
socks -p1080
5. 启动 3proxy:
bash
/usr/local/bin/3proxy /etc/3proxy/3proxy.cfg
如需后台运行,可在配置文件中使用 start 3proxy /etc/3proxy/3proxy.cfg,或使用 systemd 进行规范的服务管理。
Systemd 服务(可选)
创建 /etc/systemd/system/3proxy.service:
[Unit]
Description=3proxy Proxy Server
After=network.target
[Service]
ExecStart=/usr/local/bin/3proxy /etc/3proxy/3proxy.cfg
Restart=always
User=nobody # 以非特权用户运行
[Install]
WantedBy=multi-user.target
然后执行:
sudo systemctl daemon-reload
sudo systemctl enable 3proxy
sudo systemctl start 3proxy
sudo systemctl status 3proxy
Dante SOCKS 服务器
Dante 是一款稳健的 SOCKS 代理服务器,主要支持 SOCKS4 和 SOCKS5。它以稳定性和性能著称,适合高流量的 SOCKS 隧道场景。
安装(Debian/Ubuntu)
sudo apt update
sudo apt install dante-server
在 CentOS/RHEL 上:sudo yum install dante-server 或 sudo dnf install dante-server。
基础配置
主配置文件是 /etc/danted.conf。
1. 定义网络接口和端口:
logoutput: stderr
internal: eth0 port = 1080 # 将 eth0 替换为服务器的内网接口名
external: eth0 # 将 eth0 替换为服务器的外网接口名
如果只有一个接口,则 internal 和 external 都使用它。
2. 用户权限:
user.privileged: root
user.notprivileged: nobody
3. 认证方式:
对于用户名/密码认证,Dante 使用系统用户。
socksmethod: username none
username 要求客户端认证,none 则允许免认证访问。
4. 访问规则:
定义 client 规则(谁可以连接到代理)和 socks 规则(代理将转发哪些流量)。
```
# 客户端规则:允许任何人连接到代理
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
socksmethod: username none # 应用上面定义的认证方式
}
# SOCKS 规则:允许代理将流量转发到任意目标
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
socksmethod: username none
}
```
如需将客户端访问限制在特定 IP 段:
```
client pass {
from: 192.168.1.0/24 to: 0.0.0.0/0
socksmethod: username none
}
```
- 为认证创建系统用户:
如果使用socksmethod: username,请创建一个系统用户(出于安全考虑,不创建家目录、不允许 shell 登录)。
bash sudo adduser --no-create-home --shell /usr/sbin/nologin proxyuser # 为 proxyuser 设置强密码 - 重启 Dante:
bash sudo systemctl restart danted sudo systemctl enable danted sudo systemctl status danted
对比表:Squid、3proxy 与 Dante
| 特性 | Squid | 3proxy | Dante SOCKS 服务器 |
|---|---|---|---|
| 类型 | HTTP/HTTPS、缓存、正向/反向 | HTTP、HTTPS(CONNECT)、SOCKS4/5、FTP | SOCKS4/5 |
| 复杂度 | 中到高(功能繁多) | 低到中(配置紧凑) | 中(稳健的 SOCKS 实现) |
| 主要用途 | Web 缓存、内容过滤、访问控制 | 轻量代理、SOCKS 网关、用途广泛 | 高性能 SOCKS 代理、隧道 |
| 性能 | 高(尤其是启用缓存时) | 极轻量、高效 | 高,针对 SOCKS 流量优化 |
| 认证 | Basic、Digest、NTLM、外部 helper | Basic、NTLM、基于 IP、外部 helper | 用户名/密码(系统用户)、基于 IP |
| 系统支持 | Linux、FreeBSD、Windows(通过 Cygwin) | Linux、Windows、BSD、macOS | Linux、FreeBSD、Solaris、macOS |
| 配置方式 | 丰富、精细、文本式 | 紧凑、类脚本、文本式 | 文本式、分区清晰 |
通用安全与性能注意事项
- 防火墙: 始终配置服务器防火墙(例如
ufw、firewalld),仅允许可信 IP 或 IP 段访问代理端口。 - 认证: 为代理认证使用高强度且唯一的密码。面向公网的代理必须始终启用认证。
- 最小权限: 以专用的非特权用户(例如
nobody或自定义用户)运行代理服务,以降低被入侵时的潜在损失。 - 监控: 定期检查代理日志中的异常活动,并监控服务器资源(CPU、内存、网络 I/O),以发现性能瓶颈或潜在攻击。
- 更新: 及时更新代理软件和操作系统,以修补安全漏洞。
- 硬件: 确保服务器具备与预期负载相匹配的 CPU、内存和网络带宽。对于启用大量缓存的 Squid,使用 SSD 存储更有优势。
