Fail2ban封禁恶意IP,抵御SSH暴力破解
服务器暴露在公网,SSH端口每天都会收到大量暴力破解尝试。
Fail2ban 是一款日志分析工具,能自动扫描日志,发现多次登录失败的 IP 后,临时封禁该 IP,从而抵御 SSH 暴力破解。
本文面向零基础用户,从安装到验证,带你完成整个配置过程,最终实现自动封禁恶意 IP,提升服务器安全性。
安装前的环境确认
Fail2ban 基于 Python 开发,大多数 Linux 发行版都能安装。
首先通过 SSH 登录服务器,确认系统版本和 Python 环境。
cat /etc/os-release
python3 --version
确保系统已连接互联网,并拥有 sudo 权限。
如果使用 firewalld 或 iptables,Fail2ban 可以自动调用它们;
如果使用 UFW,也支持。
安装 Fail2ban
不同发行版的安装命令略有差异,以下列举常见系统。
- Debian/Ubuntu:
sudo apt update
sudo apt install fail2ban -y
- CentOS/RHEL(需先启用 EPEL):
sudo yum install epel-release -y
sudo yum install fail2ban -y
- Fedora:
sudo dnf install fail2ban -y
安装完成后,启动服务并设置开机自启:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
检查服务状态,确保活跃(active):
sudo systemctl status fail2ban
配置 SSH 防护规则
Fail2ban 的配置文件位于 /etc/fail2ban/,主配置文件是 jail.conf,但官方建议不要直接修改它,而是创建 jail.local 来覆盖默认设置。
创建并编辑 /etc/fail2ban/jail.local:
sudo nano /etc/fail2ban/jail.local
写入以下内容(根据实际情况调整):
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
参数解释:
bantime:封禁时长(秒),3600 即 1 小时。findtime:统计时间窗口(秒),600 即 10 分钟。maxretry:最大失败次数,5 次后触发封禁。port:SSH 端口,默认 ssh(22),如果修改过端口,写实际端口号。logpath:SSH 日志路径,通常由系统自动识别。
保存退出后,重启 Fail2ban 使配置生效:
sudo systemctl restart fail2ban
验证封禁效果与排查
查看当前封禁状态:
sudo fail2ban-client status sshd
输出会显示已封禁的 IP 列表和失败次数。
如果列表为空,可以模拟多次错误密码登录,观察是否触发封禁。
查看 Fail2ban 日志,确认运行正常:
tail -f /var/log/fail2ban.log
若出现错误,常见原因包括:日志路径不正确、防火墙未安装、SELinux 阻止等。
检查 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(CentOS)是否存在,并确保 Fail2ban 有权限读取。
避坑指南:确保防护生效
配置过程中容易忽略以下几点,导致防护失效:
- 防火墙兼容性:Fail2ban 依赖防火墙执行封禁,如果系统未安装 iptables 或 firewalld,需要先安装并启用。
- 日志路径差异:不同发行版的 SSH 日志位置不同,务必在
jail.local中正确指定logpath,或使用默认变量。 - 时间同步:服务器时间不准确可能导致统计异常,建议启用 NTP 同步。
- 端口修改:如果 SSH 不是默认 22 端口,必须修改
port参数,否则监控无效。 - 测试勿锁自己:在测试时,避免因多次输错密码导致自己的 IP 被封,可临时将
maxretry调大或先添加白名单。
添加白名单方法:在 jail.local 的 [DEFAULT] 段加入 ignoreip = 127.0.0.1/8 你的IP。
长期维护与调整建议
Fail2ban 默认规则已能抵御多数暴力破解,但可根据服务器负载调整参数。
如果攻击频繁,可缩短 findtime 或增加 bantime。
定期检查日志,确认封禁记录。
若服务器更换 SSH 端口,记得同步更新配置。
完成以上步骤后,你的服务器便具备自动封禁恶意 IP 的能力,SSH 暴力破解风险将显著降低。
遇到异常时,优先检查日志和防火墙状态,再调整参数。