Appearance
用户管理(User Manager)
你来这里要完成什么
当你需要“让某个人能连上 VPN / 不能再连 VPN / 处理无法登录 / 被锁定”等问题时,就在这个页面做。
你在这里最常做的几件事:
- 新增用户并分配分组
- 用户离职/停用:禁用用户
- 用户无法认证:检查用户状态(active/disabled/locked)并处理
- 用户被防爆破锁定:解锁用户
常见场景与操作步骤
场景 A:我要给用户开通 VPN(新建用户)
- 先准备好分组(在「组管理」配置 IP 池/命名)
- (可选)在「邮件服务」配置 SMTP(用于通知/下发)
- 在本页创建用户并分配分组
- 到「证书管理」下载用户
.ovpn并下发 - (可选)如需静态路由/推送配置,到「CCD 管理」补齐 CCD
场景 B:用户离职/停用,禁止继续连接
- 在本页找到该用户
- 将用户状态设置为
disabled - (建议)保留审计与证书文件,按公司流程处理
场景 C:用户说“账号密码不对/一直连不上”
- 先看用户状态是否为
active - 如果是
locked:按下文“解锁”处理 - 如果是
disabled:确认是否为管理员主动禁用 - (必要时)检查认证日志与连接日志
这个页面怎么看(快速认知)
- 列表:显示用户名/分组/状态
- 筛选:按分组、按状态筛选(遇到“看不到用户”先检查筛选条件)
- 操作:创建、编辑、禁用/启用、解锁等
用户状态(你排障时最先看的)
系统目前有 3 种常见状态:
active(激活):允许 OpenVPN 认证。disabled(禁用):会从user_passwd.txt移除该用户,并禁用 CCD 文件(重命名.disabled)。locked(锁定):防暴力破解机制触发的临时锁定。锁定期内认证会被拒绝;锁定到期后可再次尝试登录。
注意:
- 列表默认常为“仅激活”,所以被锁定的用户通常不会默认出现在列表里,需要切换筛选:
仅锁定或全部状态。 locked与disabled是两回事:disabled是管理员主动禁用(强制收敛权限)。locked是系统自动触发的临时锁定(防爆破)。
OpenVPN 账号防爆破(失败次数过多锁定)
机制概览
OpenVPN 的账号密码认证通过 auth-user-pass-verify ... via-env 触发校验脚本。在认证链路中,会对失败登录进行计数,并在达到阈值后将该用户临时锁定。
默认(当前代码)策略:
- 仅按“用户名”维度锁定(不默认按 IP 锁定,避免误伤同出口用户)。
- 时间窗口:10 分钟
- 失败阈值:10 次
- 锁定时长:30 分钟
锁定后的表现
- 锁定期内:该用户认证直接失败。
- 一旦认证成功:会清空失败计数,并把用户从
locked自动恢复为active(不会覆盖disabled)。
管理员如何手动解锁
- 在用户管理页,把“状态筛选”切到
仅锁定或全部状态 - 找到对应用户,点击“启用/解锁”(会把状态置回
active)
配置说明(环境变量)
以下环境变量在 OpenVPN 容器启动时注入(例如 docker-compose.yml 的 environment:)。
VPN_LOCKOUT_WINDOW_SECONDS:统计窗口(秒),默认600VPN_USER_LOCKOUT_THRESHOLD:用户失败阈值,默认10VPN_USER_LOCKOUT_SECONDS:锁定时长(秒),默认1800
可选(默认关闭)的 IP 维度锁定:
VPN_IP_LOCKOUT_THRESHOLD:IP 失败阈值(>0 才启用)VPN_IP_LOCKOUT_SECONDS:IP 锁定时长(秒)
更完整的“会话安全/白名单/异常检测/备份与诊断”说明见:系统设置
页面流程图(创建用户)
mermaid
flowchart TD
A[打开「用户管理」] --> B[页面加载:用户列表/分组/SMTP 状态]
B --> C[页面可操作]
C --> D[点击「创建用户」]
D --> E[填写用户信息并选择分组]
E --> F{提交结果}
F -->|成功| G[提示成功并回到列表] --> B
F -->|失败| H[提示原因并允许修改重试] --> E页面流程图(解锁 locked 用户)
mermaid
flowchart TD
A[打开「用户管理」] --> B[状态筛选切到「仅锁定」]
B --> C[定位被锁定用户]
C --> D[点击「启用/解锁」]
D --> E{更新成功?}
E -->|是| F[用户状态变为 active]
E -->|否| G[提示失败原因并重试]