Ubuntu Fail2ban 怎么保护 SSH?安装、封禁与误封处理

根据认证日志限制重复失败来源并保留安全恢复入口

讲解 Fail2ban sshd Jail、本地覆盖、日志 backend、状态检查、解封和安全边界。

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

Fail2ban 读取 SSH 日志并临时封禁来源流程图
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 可加入忽略列表,但不要把整个公网或过大的办公网段排除。

配置上线前的安全动作

  1. 开第二个 SSH 会话,并确认云控制台终端能进入实例。
  2. 运行 fail2ban-client -t 检查语法,再重载服务。
  3. 用 fail2ban-client status sshd 核对过滤器、失败数和封禁数。
  4. 从受控测试来源故意输错有限次数,观察是否封禁;不要用唯一管理 IP 测试。
  5. 确认正常密钥登录、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 并恢复配置

完成这项任务后继续检查

官方资料

云服务器教程Docker 拉取镜像时遇到 lease does not exist 怎么排查2026-10-15云服务器教程NGINX gRPC 上游空闲连接被 RST 重置怎么排查2026-10-14云服务器教程BuildKit prune 后 metadata_v2.db 还在变大怎么处理2026-10-13

加入开发者交流社区

与全球开发者、运维和工作室一起交流技术、分享经验、配置、账号与最新优惠信息

  • 云平台使用交流
  • 资源优惠信息
  • 最新教程与资讯
  • 开发者经验分享
联系 Telegram 客服
加入开发者交流社区