fail2ban自动拉黑暴力扫描恶意IP地址:入门的配置教程
网站或服务器日志里总出现大量失败的SSH登录尝试、重复的恶意扫描,手动封IP根本封不过来。
这时可以用 fail2ban 自动拉黑暴力扫描你服务器的恶意 IP 地址。
fail2ban 通过分析服务日志,发现连续失败的请求后,临时封禁来源 IP,大幅降低被暴力破解的风险。
本文以 CentOS 7 / Ubuntu 20.04 为例,带零基础用户一步步完成安装、配置和验证。
安装 fail2ban
大部分 Linux 发行版的软件源直接包含 fail2ban,不需要额外添加第三方源。
Debian / Ubuntu 用 apt:
sudo apt update
sudo apt install fail2ban -y
CentOS / RHEL 用 yum:
sudo yum install epel-release -y # 先安装EPEL源
sudo yum install fail2ban -y
安装完成后,先不急着启动,先创建本地配置文件,避免被更新覆盖。
配置 SSH 防护规则
fail2ban 默认的配置文件在 /etc/fail2ban/jail.conf,但我们不直接改它,而是新建一个 jail.local 文件,把要启用的规则写进去。
这样软件升级时默认配置不会被覆盖。
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # 复制一份作为基础
然后用编辑器打开 jail.local(这里用 nano 示例):
sudo nano /etc/fail2ban/jail.local
找到 [sshd] 部分,按以下内容调整:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log # Ubuntu路径;CentOS是 /var/log/secure
maxretry = 5
bantime = 3600
findtime = 600
- maxretry:5分钟内允许失败次数,超过后封禁。
- bantime:封禁秒数,3600秒=1小时。根据自己需求可改为86400(24小时)或更久。
- findtime:统计失败次数的窗口时间(秒)。
- logpath:SSH登录日志路径,不同系统有差异,记得改成正确的。
如果还想保护Nginx、Apache、Postfix等,可以在文件里找到对应小节,把 enabled 改成 true。
启动并设置开机自启
配置保存后,执行以下命令:
sudo systemctl enable fail2ban # 开机自启
sudo systemctl start fail2ban # 立即启动
sudo systemctl status fail2ban # 查看状态,绿色active即可
如果启动失败,先检查 logpath 是否正确,或者查看 systemctl 报错信息。
验证 fail2ban 是否正常拉黑 IP
方法一:模拟一次攻击(在自己的另一台机器上测试,别自己封自己)。
从其他机器用错误的密码连续SSH登录几次,超过 maxretry 后,fail2ban 会封禁该 IP。查看当前封禁列表:
sudo fail2ban-client status sshd
输出会显示“Currently banned: 1”和具体 IP。
方法二:直接查看 iptables 规则:
sudo iptables -L -n | grep f2b-sshd
如果看到一条规则,说明 IP 已被拦截。
避坑指南
- 不要禁用 root 的 SSH 登录? 如果不打算禁用 root,也要确保 fail2ban 的 maxretry 设置合理(5-10次),避免正常输错密码时被误封。
- 注意 ssh 端口:如果你改了 SSH 默认端口,port = ssh 需要改为具体端口号,例如 port = 2222。
- 白名单 IP:如果你使用 VPN 或有固定管理 IP,建议加入白名单,防止自己管理时被封。编辑 /etc/fail2ban/jail.local 的 [DEFAULT] 部分添加 ignoreip = 127.0.0.1/8 你的公网IP
- 日志路径错误:启动失败最常见原因就是 logpath 不匹配。Ubuntu 用 /var/log/auth.log,CentOS 用 /var/log/secure。
常见问题
Q:fail2ban 封禁后怎么手动解封?
用以下命令:
sudo fail2ban-client set sshd unbanip 被封的IP
Q:怎么调整封禁时间?
修改 jail.local 里的 bantime,然后重启服务:sudo systemctl restart fail2ban。
Q:封禁后对方还能访问其他端口吗?
fail2ban 默认规则是封禁整个 IP 的所有端口(通过 iptables),不是只封 SSH 端口。如果想只封指定端口,需要使用 iptables 级别的自定义 action。新手建议保持默认。
Q:我怎么查看 fail2ban 的日志?
默认日志在 /var/log/fail2ban.log,用 tail 命令实时查看:sudo tail -f /var/log/fail2ban.log。
完成了以上步骤,你的服务器已经具备了自动拉黑暴力扫描IP的能力。
建议定期检查 fail2ban 状态(可搭配监控告警),确保规则持续生效。
如果遇到其他服务的恶意扫描,可以在 jail.local 里添加对应小节,方法类似。