搬瓦工 VPS 配置 Fail2Ban 是防止 SSH 暴力破解的标准做法,通过监控认证日志自动封禁多次失败登录的 IP。适用所有基于 Linux 的搬瓦工套餐,操作前需确认当前 SSH 端口并设置白名单防止误封。
先说结论:Fail2Ban 能有效减少 SSH 暴力破解尝试,但配置不当可能导致管理员被锁在门外,需优先设置白名单。
- 先判断系统发行版和 SSH 端口配置
- 优先配置 IP 白名单和重试次数阈值
- 再验证服务状态和日志记录是否正常
命令速用版
以下命令适用于大多数搬瓦工 VPS 系统,根据发行版选择安装指令。
# Ubuntu/Debian 系统
apt update
apt install fail2ban -y
# CentOS/AlmaLinux 系统
yum install epel-release -y
yum install fail2ban -y
# 启动服务并设置开机自启
systemctl enable fail2ban
systemctl start fail2ban为什么会这样
Fail2Ban 通过读取系统日志识别异常行为并调用防火墙封禁 IP。它不直接修改 SSH 配置,而是动态管理防火墙规则,当检测到同一 IP 在短时间内多次认证失败,会触发封禁动作。
这种机制适用于搬瓦工 VPS 因为系统权限完整,支持 iptables 或 firewalld。相比修改 SSH 端口,Fail2Ban 能在不改变连接习惯的前提下增加攻击成本,且误报率可控。
分步处理
配置过程分为安装、本地配置、参数调整三步,每步完成后需检查状态。
1. 创建本地配置文件
不要直接修改 jail.conf,避免更新被覆盖。复制默认配置到 jail.local。
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local2. 编辑配置参数
使用编辑器打开 jail.local,重点修改 sshd 段落。确保 ignoreip 包含当前管理 IP。
vim /etc/fail2ban/jail.local找到 [sshd] 部分,确认或修改以下参数:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 5
bantime = 3600
findtime = 600
ignoreip = 127.0.0.1/8 ::1 你的管理 IP 地址如果搬瓦工 VPS 修改了 SSH 端口,需将 port 改为实际数字,例如 port = 2222。
3. 重启服务生效
配置修改后必须重启服务才能加载新规则。
systemctl restart fail2ban怎么验证是否生效
通过客户端命令查看状态,并模拟错误登录测试封禁功能。
1. 检查服务状态
运行以下命令确认 sshd jail 处于 active 状态。
fail2ban-client status sshd输出应包含 Status 为 OK 以及当前封禁的 IP 列表。
2. 查看日志记录
检查 Fail2Ban 日志确认是否有 ban 动作记录。
cat /var/log/fail2ban.log | grep Ban3. 模拟测试
使用另一台设备连续输入错误密码超过 maxretry 次,再次运行 status 命令应能看到该 IP 出现在封禁列表中。
常见坑
配置过程中容易忽略白名单和端口同步问题,可能导致无法连接。
- 未设置白名单:如果管理 IP 动态变化且未设置 ignoreip,多次输错密码可能封禁自己。
- SSH 端口不一致:搬瓦工 VPS 若修改了默认 22 端口,jail.local 中 port 参数必须同步修改,否则监控无效。
- 防火墙冲突:部分系统同时使用 ufw 和 firewalld,Fail2Ban 默认适配主流防火墙,若混用可能导致规则不生效。
- 日志路径错误:不同发行版 SSH 日志路径不同,CentOS 通常在 /var/log/secure,Ubuntu 在 /var/log/auth.log,配置错误会导致无法读取日志。
常见问题
配置后无法 SSH 连接怎么办
立即通过搬瓦工控制面板的 KiwiVM 网页终端登录检查。查看 fail2ban 日志确认是否误封,临时停止服务恢复连接。
Fail2Ban 会影响 VPS 性能吗
公开资料中没有看到可靠的量化数据表明显著影响。它仅在日志写入时触发分析,常规负载下 CPU 和内存占用极低。
需要定期更新规则吗
不需要手动更新规则。系统包管理器更新时会同步软件版本,自定义的 jail.local 配置通常保留不变。
参考来源
- Fail2Ban Official GitHub Repository, "fail2ban/fail2ban", https://github.com/fail2ban/fail2ban
- Linux Man Pages, "fail2ban-client(1)", https://manpages.org/fail2ban-client