fail2ban 给 SSH 做什么
fail2ban 盯着你的认证日志,在某个 IP 失败登录太多次后临时封禁它——于是暴破你 SSH 的机器人在防火墙层被挡住,而不是没完没了地锤。它是有用的一层防御,但要看清它的位置:如果你已经切到 SSH 密钥并关闭密码登录,那些暴破尝试本来就不可能成功。fail2ban 是纵深防御和降日志噪音,不是第一道线。先设好密钥(密钥 vs 密码),再在上面加 fail2ban。
第 1 步——安装 fail2ban
sudo apt update && sudo apt install fail2ban # Debian/Ubuntu
# RHEL/Fedora: sudo dnf install fail2ban 它带合理的默认值,但你该把自己的配置写在 jail.local 里,免得软件更新覆盖掉。
第 2 步——配置 SSH jail
创建 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h 读作:在 10 分钟内 5 次失败登录后,把该 IP 封 1 小时。对反复试探者你可以调高 bantime(有人用一天,或用 bantime.increment = true 递增)。如果你把 SSH 挪离了 22 端口,把 port 设成你的真实端口。
第 3 步——重启并验证
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd 状态行显示当前被封的 IP 和总数。要放掉你误封的地址(比如你自己手滑登录几次之后):
sudo fail2ban-client set sshd unbanip 203.0.113.10
从手机做
fail2ban 完全能从手机走 SSH 管理:用 SFTP 或 nano 编辑 jail.local、重启服务、查状态。如果记不住确切的 fail2ban-client 子命令,描述给 TermAI 助手——"显示 sshd 被封的 IP"、"解封这个地址"——运行前先复核命令。
别把自己锁在外面
如果你自己登录失败几次,fail2ban 可能把你也封了。两个保险:测试时保持一个能用的会话开着;把你自己的 IP(或你的 Tailscale 段)加进忽略名单:
# 在 jail.local 的 [DEFAULT] 里
ignoreip = 127.0.0.1/8 100.64.0.0/10 那个 100.64.0.0/10 是 Tailscale 段——如果你走 Tailscale 连 SSH,你自己的连接就不会被封。更好的是:干脆把 SSH 留在 Tailscale 后面,公网机器人一开始就到不了。
常见问题
用了 SSH 密钥还需要 fail2ban 吗?
可选。有了密钥并关闭密码登录,暴破本来就不可能成功。fail2ban 仍能降日志噪音、挡住流量,所以很多管理员把它当额外一层。
fail2ban 封一个 IP 多久?
你设的 bantime——1 小时常见。可以调高、或对反复试探者递增。
怎么在 fail2ban 里解封一个 IP?
跑 fail2ban-client set sshd unbanip <IP>。把可信 IP 加进 ignoreip,它们永远不会被封。
快速事实
- 作用:多次 SSH 失败登录后封 IP
- 位置:纵深防御——密钥 + 禁密码更重要
- 配置:
/etc/fail2ban/jail.local→[sshd]maxretry / findtime / bantime - 别自封:
ignoreip你的 IP / Tailscale 段;更好是把 SSH 留在 Tailscale 后
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.