在雨云或其他 Linux 云服务器上配置 Fail2ban 防止 SSH 暴力破解,最直接的方法是安装 Fail2ban 服务并启用 sshd 监狱,设定合理的重试次数和封禁时长。适用场景为开放 SSH 端口的公网服务器,风险边界在于配置错误可能导致管理员自身 IP 被误封,操作前务必保留备用连接通道。
先说结论:Fail2ban 能有效自动化封禁频繁尝试登录的 IP,但必须配合防火墙后端使用,且不能替代强密码或密钥认证。
- 先判断:确认服务器操作系统类型及防火墙后端是 iptables、nftables 还是 firewalld。
- 优先做:修改 jail.local 配置文件而非直接修改 jail.conf,避免更新被覆盖。
- 再验证:使用 fail2ban-client 命令查看状态,并通过日志确认封禁动作是否触发。
命令速用版
以下命令适用于基于 Debian/Ubuntu 或 CentOS/RHEL 的常见 Linux 发行版,需 root 权限执行。
# 安装 Fail2ban
sudo apt install fail2ban # Debian/Ubuntu
sudo yum install fail2ban # CentOS/RHEL
# 启动并设置开机自启
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# 查看 SSH 监狱状态
sudo fail2ban-client status sshd为什么会这样
Fail2ban 的工作原理是定期扫描指定的日志文件,匹配预设的正则表达式来识别失败登录尝试。
当同一 IP 在指定时间内失败次数超过阈值,Fail2ban 会调用系统防火墙命令将该 IP 加入拒绝列表。这种机制属于事后防御,旨在增加攻击者的时间成本,而非完全阻止连接请求。
分步处理
配置过程分为安装、配置文件初始化、参数调整和启动服务四个步骤。
- 初始化配置:安装完成后,将默认配置复制到本地配置文件,命令为
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local。 - 编辑配置:使用编辑器打开
/etc/fail2ban/jail.local,找到[sshd]段落。 - 设定参数:设置
enabled = true,调整maxretry(允许最大重试次数,建议 3-5 次)和bantime(封禁时长,单位秒,建议 3600 以上)。 - 重载服务:保存文件后,执行
sudo systemctl restart fail2ban使配置生效。
怎么验证是否生效
验证分为状态检查和日志审计两部分,确保服务运行且规则被加载。
执行 sudo fail2ban-client status sshd,输出中应包含 Currently failed 和 Total banned 字段。查看日志文件 /var/log/fail2ban.log,搜索 "Ban" 关键字,确认是否有 IP 被封禁的记录。
常见坑
配置 Fail2ban 时容易忽略防火墙兼容性和自身 IP 白名单设置。
- 防火墙后端冲突:如果服务器使用 firewalld 或 ufw,需在 jail.local 中指定
banaction为对应后端,否则封禁命令无效。 - 自身误封:测试时不要在自己当前连接的 IP 上多次输错密码,建议先将管理 IP 加入
ignoreip白名单。 - 配置优先级:直接修改
jail.conf会在软件升级时被还原,必须修改jail.local。
常见问题
如何解除被误封的 IP?
使用命令 sudo fail2ban-client set sshd unbanip <IP 地址> 即可立即解封指定 IP。
SSH 端口修改后如何配置?
在 jail.local 的 [sshd] 段落中添加 port = 你的端口号,确保 Fail2ban 监控正确的端口。
Fail2ban 会影响服务器性能吗?
公开资料中没有看到可靠的量化数据,但在常规配置下,Fail2ban 作为后台守护进程占用的 CPU 和内存资源极低,通常可忽略不计。
参考来源
- Fail2ban Official GitHub, fail2ban/fail2ban, https://github.com/fail2ban/fail2ban
- Ubuntu Documentation, Fail2ban, https://ubuntu.com/server/docs/security-fail2ban