06470512f69136047054b8142d567c75fd0d9ad1
### 严重修复 1. 跨服务器无法登录 - 新增SESSION_COOKIE_DOMAIN/SECURE/NAME配置 2. SOCKS5用户密码明文存储→bcrypt哈希(兼容自动迁移) 3. 仪表盘审计日志不显示→替换为空循环为真实API加载 4. 管理员登录防爆破未生效→auth.py集成check_fail2ban ### 中等问题修复 5. 流量趋势图表无数据→新增record_traffic_snapshot后台线程 6. 网络流量累计值跳变→新增基线差值机制 7. asyncio连接计数非线程安全→加锁保护 ### 优化改进 8. API密钥页面截断文本修复 9. 新增gunicorn/bcrypt依赖 10. 更新README环境变量文档和生产建议 11. 登录密码常量时间对比防时序攻击 12. 仪表盘图表添加animation:false防卡顿
SOCKS Manager — SOCKS5 代理管理平台
内建 asyncio SOCKS5 服务器的完整代理管理平台,一个 Python 进程即可运行。
架构
┌──────────────────────────────────────────────┐
│ Web 管理面板 (Flask + Bootstrap 5 暗色主题) │
├──────────────────────────────────────────────┤
│ RESTful API (/api/*) │
├────────────┬──────────────┬──────────────────┤
│ engine/ │ services/ │ │
│ └server.py │ └user_service│ 数据: SQLite │
│ asyncio │ 流量/认证 │ socks_manager.db│
│ SOCKS5 │ └stats_ │ │
│ 服务器 │ 监控/趋势 │ │
│ └instances │ └backup_ │ │
│ 多实例 │ 备份恢复 │ │
└────────────┴──────────────┴──────────────────┘
功能覆盖
| 需求 | 实现 |
|---|---|
| 多实例管理 | 每个实例独立事件循环,支持创建/启动/停止/重启 |
| 基础参数 | 监听地址(IPv4/IPv6)、端口、超时可视化配置 |
| 底层引擎 | 内建 asyncio SOCKS5 服务器(RFC 1928/1929) |
| 配置热重载 | 修改参数后重启实例生效,不中断 Web 面板 |
| 多身份认证 | 无认证 / 账号密码认证 |
| 流量控制 | 总流量上限、月流量上限、超额自动停机 |
| 速度与并发 | 上下行带宽限制(Mbps)、最大并发连接数 |
| IP 白名单/黑名单 | 用户级逗号分隔配置 |
| 账号生命周期 | 生效时间、过期时间、一键封禁/解封 |
| 大盘控制台 | CPU/内存/网络吞吐量/活跃连接实时图表 |
| 实时连接追踪 | 源IP/目标域名/协议/持续时间,手动断开 |
| 流量统计报表 | 30 天折线/柱状图(Chart.js) |
| 详细审计日志 | 按事件/用户/IP 筛选,分页查询 |
| 级联代理 | 连接建立时自动代理至目标(可扩展 upstream) |
| 负载均衡 | 多实例配置后按端口轮询 |
| 管理员认证 | 环境变量 SM_ADMIN_PASSWORD 保护 |
| 自动备份 | 一键备份 SQLite,按份数清理 |
| RESTful API | 全部管理功能通过 /api/ 暴露 |
快速开始
cd /root/socks-manager
# 安装依赖
pip install -r requirements.txt --break-system-packages
# 设置管理员密码
export SM_ADMIN_PASSWORD=***
# 启动
python3 run.py
访问 http://你的IP:5000,用户名 admin,密码为环境变量值。
环境变量
| 变量 | 默认值 | 说明 |
|---|---|---|
SM_ADMIN_USER |
admin |
管理员用户名 |
SM_ADMIN_PASSWORD |
"" |
管理员密码(必须设置) |
SM_SECRET_KEY |
sm-dev-key-change-in-prod |
Flask 会话密钥(生产环境务必修改) |
SM_SESSION_DOMAIN |
None |
会话 Cookie 域名(跨域访问时设置) |
SM_COOKIE_SECURE |
false |
Cookie Secure 标志(HTTPS 时设为 true) |
SM_SESSION_NAME |
sm_session |
会话 Cookie 名称 |
SM_DB_URI |
sqlite:///socks_manager.db |
数据库连接串 |
SM_PORT |
5000 |
Web 面板端口 |
SM_HOST |
0.0.0.0 |
监听地址 |
SM_BACKUP_DIR |
./backups/ |
备份目录 |
SM_LOG_LEVEL |
INFO |
日志级别 |
核心代码结构
├── app.py # Flask 应用工厂
├── config.py # 配置
├── auth.py # 登录认证
├── models.py # SQLAlchemy 数据模型
├── database.py # 数据库初始化
├── run.py # 启动入口
│
├── engine/
│ ├── server.py # asyncio SOCKS5 服务器(核心引擎)
│ └── instances.py # 多实例管理器
│
├── services/
│ ├── user_service.py # 用户管理/认证/流量/防爆破
│ ├── stats_service.py# 监控/统计/趋势
│ └── backup_service.py# 备份与恢复
│
├── api/
│ └── v1.py # RESTful API(实例/用户/日志/备份)
│
├── web/
│ └── routes.py # Web 管理面板路由
│
└── templates/ # Jinja2 模板(暗色 Bootstrap 5)
├── base.html # 布局(侧边栏+导航+全局样式)
├── dashboard.html # 仪表盘(实时图表)
├── instances.html # 代理实例管理
├── users.html # 用户管理
├── stats.html # 流量统计
├── connections.html# 活跃连接
├── logs.html # 审计日志
└── system.html # 系统管理
API 参考
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/dashboard |
仪表盘汇总 |
| GET/POST | /api/instances |
实例列表/创建 |
| PUT/DELETE | /api/instances/<id> |
更新/删除实例 |
| POST | /api/instances/<id>/start |
启动实例 |
| POST | /api/instances/<id>/stop |
停止实例 |
| GET/POST | /api/users |
用户列表/创建 |
| PUT/DELETE | /api/users/<id> |
更新/删除用户 |
| GET | /api/logs |
审计日志(支持筛选) |
| GET/POST | /api/backups |
备份列表/创建 |
| GET | /api/stats/system |
实时系统指标 |
| GET | /api/stats/connections |
活跃连接 |
生产建议
- 使用 gunicorn 替代内置开发服务器:
gunicorn -w 4 -b 0.0.0.0:5000 run:app - 前置 Nginx 反向代理 + Let's Encrypt SSL
- 设置
SM_COOKIE_SECURE=true(HTTPS 时) - 设置
SM_SECRET_KEY为随机字符串 - 设置
SM_SESSION_DOMAIN为你的域名(跨机器访问时) - 定期备份
socks_manager.db - 配置
SM_LOG_LEVEL=WARN减少日志量
Description