海外 VPS 配置 Fail2Ban 的核心是通过监控 SSH 登录日志自动封禁多次尝试失败的 IP 地址,适用于大多数 Linux 发行版。主要风险边界是配置错误可能导致管理员自己被封禁,因此操作前必须确认白名单机制生效。
先说结论:Fail2Ban 能有效缓解 SSH 暴力破解,但无法防御流量型 DDoS 攻击,配置重点在于日志路径匹配和本地 IP 白名单。
- 先判断:确认 VPS 操作系统类型及 SSH 日志存放位置,Debian/Ubuntu 与 CentOS 路径不同。
- 优先做:修改配置文件时复制默认配置到 jail.local,避免系统更新覆盖原始设置。
- 再验证:使用 fail2ban-client status 命令查看监狱状态,确认 SSH jails 处于 active 状态。
命令速用版
以下命令适用于基于 Debian/Ubuntu 或 CentOS/RHEL 的常见海外 VPS 环境,直接复制执行即可完成基础安装。
Debian/Ubuntu 系统:
sudo apt update && sudo apt install fail2ban -y
CentOS/RHEL 系统:
sudo yum install epel-release -y && sudo yum install fail2ban -y
启动并设置开机自启:
sudo systemctl enable fail2ban && sudo systemctl start fail2ban
为什么会这样
Fail2Ban 的工作原理是定期扫描指定的日志文件,匹配预设的正则表达式规则,触发阈值后调用防火墙接口封禁 IP。
它不直接拦截网络数据包,而是依赖系统日志(如 /var/log/auth.log 或 /var/log/secure)记录登录行为。当某个 IP 在短时间内连续出现认证失败记录,Fail2Ban 判定为暴力破解,通过 iptables 或 firewalld 下发 DROP 规则。所谓“三网攻击”在技术层面表现为来自不同网段的扫描 IP,Fail2Ban 对所有来源 IP 一视同仁,只要触发规则即封禁,不区分运营商。
分步处理
配置 Fail2Ban 需要修改 jail.local 文件,以下步骤确保配置持久化且不影响现有连接。
1. 复制默认配置文件
不要直接修改 jail.conf,系统升级会覆盖该文件。执行以下命令创建本地配置:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
2. 编辑配置参数
使用 nano 或 vim 打开 /etc/fail2ban/jail.local,找到 [sshd] 部分。关键参数说明如下:
- enabled = true:启用 SSH 监控监狱。
- port = ssh:指定监控端口,若修改过 SSH 端口需同步更改。
- maxretry = 3:允许最大失败次数,建议设置为 3 到 5 次。
- bantime = 3600:封禁时长(秒),建议初始设置为 1 小时,避免误封导致无法挽回。
- findtime = 600:计数时间窗口(秒),即 10 分钟内失败达到 maxretry 次则封禁。
3. 配置白名单
在 [DEFAULT] 部分添加 ignoreip,将当前管理 IP 加入白名单,防止自己被锁:
ignoreip = 127.0.0.1/8 ::1 你的管理 IP 地址
4. 重启服务
配置修改后必须重启服务才能生效:
sudo systemctl restart fail2ban
怎么验证是否生效
验证 Fail2Ban 是否生效需要查看服务状态并进行模拟测试,确认封禁规则已下发。
1. 检查服务状态
执行以下命令查看 SSH 监狱是否激活:
sudo fail2ban-client status sshd
输出中应包含 Status = Active 和 Currently failed 计数。
2. 查看防火墙规则
当有 IP 被封禁后,使用 iptables -L -n 或 firewall-cmd `--list-all` 查看是否存在 fail2ban 相关的链规则。
3. 模拟触发测试
使用另一台设备连续输入错误密码多次,然后在 VPS 上再次执行 status 命令,观察 Currently failed 和 Banned list 是否增加。
常见坑
配置过程中容易因日志路径错误或白名单遗漏导致服务异常或管理员被锁。
- 日志路径不匹配:CentOS 默认日志为 /var/log/secure,Ubuntu 为 /var/log/auth.log,jail.local 中 logpath 需对应修正。
- 白名单未生效:修改 ignoreip 后未重启服务,或格式错误导致解析失败,建议先测试白名单 IP 是否会被误封。
- 封禁时间过长:bantime 设置过大(如永久封禁)一旦误操作难以恢复,初期建议设置为较短时间以便观察。
- 与云防火墙冲突:部分云服务商自带安全组或防火墙,Fail2Ban 操作的是系统内部 iptables,两者需配合使用。
常见问题
Fail2Ban 能防御 DDoS 攻击吗?
不能,Fail2Ban 仅针对应用层日志行为进行封禁,无法处理流量型 DDoS 攻击。
DDoS 攻击通常耗尽带宽或连接资源,在日志生成前就已造成服务不可用,防御 DDoS 需要依赖云服务商的高防 IP 或流量清洗服务。
被 Fail2Ban 误封了怎么解封?
使用 fail2ban-client 命令手动解封特定 IP 或重启服务清除所有封禁。
执行 sudo fail2ban-client set sshd unbanip <IP 地址> 可解封单个 IP,重启 fail2ban 服务会清除所有临时封禁记录。
修改 SSH 端口后 Fail2Ban 需要调整吗?
需要,必须在 jail.local 中修改 port 参数以匹配新的 SSH 端口。
默认配置监听标准 22 端口,若 SSH 改为其他端口,Fail2Ban 监控规则需同步更新,否则无法捕获登录日志对应的连接请求。