新购 Hetzner 服务器如何配置 fail2ban 防止 SSH 暴力破解

文章导读
新购 Hetzner 服务器配置 fail2ban 防止 SSH 暴力破解,核心是在系统层安装 fail2ban 服务并启用 sshd 监狱,配合 UFW 或 iptables 实现自动封禁。适用场景为公网 IP 暴露且必须开放 SSH 端口的情況,风险边界是配置错误可能导致管理员自身 IP 被误封无法登录。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

新购 Hetzner 服务器配置 fail2ban 防止 SSH 暴力破解,核心是在系统层安装 fail2ban 服务并启用 sshd 监狱,配合 UFW 或 iptables 实现自动封禁。适用场景为公网 IP 暴露且必须开放 SSH 端口的情況,风险边界是配置错误可能导致管理员自身 IP 被误封无法登录。

先说结论:fail2ban 能有效缓解暴力破解日志噪音,但不能替代 SSH 密钥认证,需配合防火墙使用。

  • 先判断:确认服务器操作系统版本及防火墙类型(UFW/iptables/firewalld)。
  • 优先做:开启 SSH 密钥登录并禁用密码登录,再部署 fail2ban 作为 secondary 防护。
  • 再验证:使用 fail2ban-client status 检查监狱状态,确保未误封管理 IP。

命令速用版

apt update && apt install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
systemctl restart fail2ban
fail2ban-client status sshd

为什么会这样

SSH 服务默认监听公网端口,自动化脚本会持续尝试弱密码登录。fail2ban 通过监控系统日志识别失败尝试,当达到阈值时调用防火墙命令封禁来源 IP。Hetzner 服务器因其 IP 段知名度高,常在上线后几分钟内开始遭遇扫描,系统层防护是必要措施。

分步处理

步骤 1:安装 fail2ban
在 Debian/Ubuntu 系统上执行安装命令,Hetzner 默认模板通常基于这两者。确保软件源更新完毕后再安装,避免依赖缺失。

步骤 2:配置本地规则
不要直接修改 jail.conf,复制为 jail.local 生效。编辑 jail.local,找到 [sshd] 部分,设置 enabled = true。根据需求调整 maxretry 和 bantime,默认值通常适用于大多数场景。

步骤 3:确认防火墙后端
fail2ban 需要知道操作哪个防火墙。在 jail.local 的 [DEFAULT] section 检查 backend 和 action 设置。Ubuntu 默认使用 ufw 动作,CentOS 通常使用 iptables-multiport。Hetzner 云防火墙是独立层级,fail2ban 仅管理操作系统内部防火墙。

步骤 4:重启服务
修改配置后必须重启 fail2ban 服务使配置生效。重启前确保当前登录会话稳定,避免配置错误导致连接中断。

新购 Hetzner 服务器如何配置 fail2ban 防止 SSH 暴力破解

怎么验证是否生效

执行 fail2ban-client status sshd 查看当前状态,观察 Currently failed 和 Total banned 计数。尝试使用错误密码多次登录另一台测试机,检查该测试机 IP 是否被封禁。查看 /var/log/fail2ban.log 确认是否有 Ban 动作记录。

常见坑

直接编辑 jail.conf 会导致软件更新后配置丢失,必须使用 jail.local。Hetzner 云面板的 Network Firewall 与系统内 fail2ban 互不干涉,需在系统内确认防火墙规则是否实际下发。白名单设置遗漏可能导致管理员 IP 被误封,建议在 jail.local 中配置 ignoreip 包含管理端 IP。

常见问题

修改 SSH 端口比 fail2ban 更有用吗

修改端口能减少日志噪音,但不能替代安全认证。建议同时修改非标准端口并配置 fail2ban,两者结合能降低被扫描概率。

fail2ban 会影响服务器性能吗

公开资料中没有看到可靠的量化数据表明 fail2ban 对现代服务器性能有显著影响。日志解析消耗极少量 CPU,主要依赖正则匹配,通常可忽略不计。

被封禁的 IP 如何手动解封

使用 fail2ban-client set sshd unbanip 命令即可手动移除封禁。确认 IP 地址无误后再执行,避免命令格式错误。

参考来源

fail2ban Official GitHub Repository, fail2ban/wiki, https://github.com/fail2ban/fail2ban