讲解 Fail2ban sshd Jail、本地覆盖、日志 backend、状态检查、解封和安全边界。
默认顺序:先在云安全组把 SSH 只开放给固定管理来源,并确认密钥登录和云控制台救援可用;再在 Ubuntu 安装 Fail2ban,把自定义配置写入 /etc/fail2ban/jail.d/,不要直接改发行版的 jail.conf。Fail2ban 软件本身免费,不会删除磁盘数据,但规则错误会把管理员封掉,所以全程保留第二个已登录会话。

安装前先完成基础加固
- 建立可验证的 SSH 密钥登录。
- 通过安全组和 UFW 限制管理来源。
- 确认 SSH 实际端口和认证日志位置。
- 保留云控制台或实例连接等恢复入口。
安装并检查
sudo apt update
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban --no-pager
sudo fail2ban-client ping
不要直接修改 jail.conf
在 /etc/fail2ban/jail.d/sshd.local 创建本地覆盖:
[sshd]
enabled = true
port = ssh
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
ignoreip = 127.0.0.1/8 ::1 203.0.113.10示例可信 IP 必须替换。SSH 使用自定义端口时应写实际端口。日志来自 journald 还是文件,取决于系统与 Fail2ban 版本。
验证配置与封禁状态
sudo fail2ban-client -t
sudo systemctl restart fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo journalctl -u fail2ban -n 100 --no-pager应从不在 ignoreip 中的测试来源谨慎验证,避免把唯一管理地址封禁。确认失败次数、被封来源和系统防火墙规则一致。
误封后的解封
sudo fail2ban-client set sshd unbanip 198.51.100.25
sudo fail2ban-client status sshd先恢复访问,再检查时间窗口、反向代理、共享出口和日志格式。大量用户共享同一 NAT 出口时,过于激进的规则可能影响正常用户。
常见故障
| 现象 | 重点检查 |
|---|---|
| Jail 未启动 | 配置语法、日志 backend、服务名 |
| 有失败但不封禁 | 过滤器是否匹配当前日志 |
| 显示封禁但仍可连接 | nftables/iptables 后端与网络路径 |
| 管理员被封 | ignoreip、共享出口与阈值 |
边界条件
攻击者可以更换 IP,Fail2ban 只能提高批量尝试成本。公网 SSH 的首要措施仍是限制来源、使用密钥、最小权限和及时更新。
最小 sshd jail 应核对什么
启用 sshd jail,端口必须与 sshd 实际监听一致,日志后端要匹配 systemd journal 或认证日志。maxretry、findtime 和 bantime 应根据真实攻击和管理员登录习惯设置。管理固定 IP 可加入忽略列表,但不要把整个公网或过大的办公网段排除。
配置上线前的安全动作
- 开第二个 SSH 会话,并确认云控制台终端能进入实例。
- 运行
fail2ban-client -t检查语法,再重载服务。 - 用
fail2ban-client status sshd核对过滤器、失败数和封禁数。 - 从受控测试来源故意输错有限次数,观察是否封禁;不要用唯一管理 IP 测试。
- 确认正常密钥登录、sudo 和应用端口不受影响。
没有封禁或误封怎么分支
- 失败次数一直为 0:检查 sshd 日志位置、journal backend 和过滤器是否匹配当前日志格式。
- 封禁了代理/堡垒机:Fail2ban 看到的可能是代理地址,需要调整真实来源链路,而非盲目白名单全网。
- 自己被封:从控制台或另一来源执行解封,先保留证据再调整阈值。
- 服务重启失败:用测试命令定位配置文件,停用最近新增 jail 而不是删除全部安全规则。
验收与回退
连续观察认证日志,确认攻击来源被封、正常登录不受影响、服务重启后 jail 自动恢复。Fail2ban 只处理重复失败,不代替禁用密码登录、补丁、MFA/堡垒机和安全组。若新规则影响运维,从控制台停用该自定义 jail、恢复备份配置并重启 Fail2ban,安全组的受限来源规则继续保留。
Ubuntu Fail2ban 怎么保护 SSH现场验收单
- 入口或命令:SSH 终端安装 fail2ban,配置写入 /etc/fail2ban/jail.d/,另保留云控制台连接
- 提交前风险:软件免费但服务器、日志和告警资源有成本;误配会封禁管理员,不删除磁盘数据
- 不能继续时:日志后端不匹配、sshd 端口错、规则未加载、代理 IP 被封、自己被封、重启后状态变化
- 完成证据:fail2ban-client 显示 jail 生效,测试失败登录被封,正常密钥登录和控制台救援可用
- 退出办法:保留第二会话;误封用控制台或白名单来源解封,失败停用自定义 jail 并恢复配置

