如何配置 Fail2ban 防止海外 VPS SSH 端口被暴力破解扫描

文章导读
对于海外 VPS,开启 Fail2ban 配合修改 SSH 端口是减少暴力破解噪音的有效手段,但不应视为唯一的安全防线。
📋 目录
  1. 命令速用版
  2. 工作原理
  3. 分步处理
  4. 验证是否生效
  5. 常见坑与排查
  6. 参考来源
A A

对于海外 VPS,开启 Fail2ban 配合修改 SSH 端口是减少暴力破解噪音的有效手段,但不应视为唯一的安全防线。

先说结论:Fail2ban 能通过分析日志自动封禁恶意 IP,但配置前需确保防火墙规则不会误伤管理员自身,且 CentOS 需先启用 EPEL 源。

  • 先判断:确认系统日志路径(Ubuntu 多在 auth.log,CentOS 多在 secure)及防火墙类型。
  • 优先做:备份配置文件,修改 SSH 默认端口并禁用 root 密码登录,再部署 Fail2ban 规则。
  • 再验证:启动服务后检查状态,确保当前管理 IP 未被误封。

命令速用版

以下命令适用于大多数基于 Debian/Ubuntu 或 CentOS 的主流发行版:

# 安装 Fail2ban
apt install fail2ban -y  # Debian/Ubuntu
yum install -y epel-release && yum install fail2ban -y  # CentOS/RHEL

# 启动并设置开机自启
systemctl enable `--now` fail2ban

# 查看 SSH 防护状态
fail2ban-client status sshd

工作原理

海外 VPS 暴露在公网后,SSH 端口(默认 22)会持续受到自动化脚本的扫描尝试。这些脚本试图通过字典爆破猜测密码。Fail2ban 的工作原理是监控认证日志文件,当检测到同一 IP 在短时间内多次失败登录时,调用防火墙命令将该 IP 暂时封禁。它不能阻止扫描发生,但能显著减少日志噪音和服务器负载,增加攻击者的时间成本。

分步处理

1. 备份并创建本地配置

不要直接修改 jail.conf,因为软件更新可能会覆盖它。复制默认配置到 jail.local 进行自定义:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

2. 配置 SSH 防护规则

编辑 /etc/fail2ban/jail.local,找到 [sshd] 部分。确保启用该规则,并根据实际情况调整阈值:

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 5
bantime = 3600

注意:logpath 通常会自动匹配,但如果修改过 SSH 日志位置,需手动指定。例如 CentOS 通常是 /var/log/secure,Ubuntu 通常是 /var/log/auth.log。

如何配置 Fail2ban 防止海外 VPS SSH 端口被暴力破解扫描

3. 加固 SSH 服务本身

Fail2ban 是事后防御,建议配合 SSH 配置优化。修改前务必备份原配置文件

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

编辑 /etc/ssh/sshd_config:

Port 2222              # 改为非标准端口
PermitRootLogin no     # 禁止 root 直接登录
PasswordAuthentication no # 建议使用密钥登录

修改后重启 SSH 服务:systemctl restart sshd。务必在断开当前连接前,新开一个终端测试新端口能否登录,防止把自己锁在外面。

4. 重启 Fail2ban

systemctl restart fail2ban

验证是否生效

使用以下命令查看 Fail2ban 运行状态及被禁 IP 列表:

fail2ban-client status
fail2ban-client status sshd

如果 Currently failed 或 Banned list 中有 IP 显示,说明规则正在工作。你也可以查看日志文件 /var/log/fail2ban.log 确认是否有 ban 动作记录。

常见坑与排查

  • 把自己封禁:测试时不要在同一台机器上多次输错密码。如果被封,需通过 VPS 服务商的控制台(VNC/WebShell)登录解除,或等待禁令过期。
  • 防火墙冲突:如果 VPS 服务商提供了云端防火墙(安全组),建议优先在云端限制 SSH 来源 IP,Fail2ban 作为补充。
  • 日志路径错误:不同系统日志路径不同,配置错误会导致 Fail2ban 无法读取日志从而不生效。
  • CentOS 源问题:CentOS 默认源通常不包含 fail2ban,必须先执行 yum install -y epel-release 启用 EPEL 源。
  • IPv6 支持:部分旧配置可能只针对 IPv4,如果服务器开启 IPv6,需确保 iptables 或 nftables 规则覆盖 IPv6。

参考来源

  • Fail2ban 官方文档:https://fail2ban.org/wiki/index.php/Main_Page
  • Fail2ban GitHub 仓库:https://github.com/fail2ban/fail2ban