Ubuntu服务器搭建SOCKS5代理服务

本文将分享基于Ubuntu服务器搭建SOCKS5代理的方案,涵盖安装配置、安全加固、性能优化和监控告警全流程。

方案选型

在评估多种SOCKS5实现后,选择Dante Server作为核心组件,主要因为:

  • 开源且持续维护
  • 支持用户名/密码认证
  • 低资源消耗(内存<10MB)
  • 完善的日志系统
  • 支持IPv4/IPv6双栈

环境准备

# 系统更新
sudo apt update && sudo apt upgrade -y

# 安装必要组件
sudo apt install -y dante-server

详细配置

主配置文件

/etc/danted.conf
# 日志配置
logoutput : /var/log/danted.log

# 网络接口配置
internal : eth0 port = 1080
external : eth0

# 认证方式
method : username

# 用户权限
user.privileged : root
user.notprivileged : nobody

# 访问控制规则
client pass {
from : 0.0.0.0/0 to: 0.0.0.0/0
log : connect disconnect error
}

pass {
from : 0.0.0.0/0 to: 0.0.0.0/0
command : bind connect udpassociate
log : connect disconnect error
method : username
}

internalexternal 根据实际网络环境调整,确保监听正确的接口和端口。

创建代理用户

# 创建系统用户(禁止登录)
sudo useradd -r -s /bin/false proxyuser

# 设置密码(会提示输入)
sudo passwd proxyuser
安全提示
proxyuser 是代理认证使用的用户名,密码请设置复杂且安全,建议密码长度至少16位,包含大小写字母、数字和特殊字符。

安全加固

防火墙配置

注意:
如果服务器直接暴露在公网,强烈建议配置防火墙规则限制访问来源。
如果使用比如阿里云等云服务商,可以不使用ufw,建议在安全组中添加相应的入站规则。
# 安装UFW防火墙
sudo apt install -y ufw 

# 仅允许指定IP段访问
sudo ufw allow from 192.168.1.0/24 to any port 1080

# 或者仅允许特定IP:203.0.113.45
sudo ufw allow from 203.0.113.45 to any port 1080

系统级防护

# 禁止密码暴力破解
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

jail.local中添加:

[danted]
enabled = true
filter = danted
logpath = /var/log/danted.log
maxretry = 3

性能优化

调整系统限制

# 修改文件描述符限制
echo "ulimit -n 65535" >> /etc/default/danted

# 调整内核参数
echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf
sudo sysctl -p

高并发配置建议

对于超过1000并发连接的场景:

# 在danted.conf中添加
io-timeout : 60
client-limit : 2048

启动与验证

# 启动服务
sudo systemctl enable --now danted

# 验证服务状态
sudo systemctl status danted

# 测试连接
curl --socks5 username:password@server_ip:1080 http://example.com

常见问题排查

Q1: 客户端连接超时

  • 检查UFW防火墙规则
  • 验证服务监听状态:ss -tulnp | grep 1080

Q2: 认证失败

  • 检查用户是否存在:getent passwd proxyuser
  • 测试本地认证:sudo -u proxyuser -s

Q3: 高负载下连接断开

  • 检查ulimit设置
  • 查看系统内存:free -h