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 已被拦截。

避坑指南

  1. 不要禁用 root 的 SSH 登录? 如果不打算禁用 root,也要确保 fail2ban 的 maxretry 设置合理(5-10次),避免正常输错密码时被误封。
  2. 注意 ssh 端口:如果你改了 SSH 默认端口,port = ssh 需要改为具体端口号,例如 port = 2222。
  3. 白名单 IP:如果你使用 VPN 或有固定管理 IP,建议加入白名单,防止自己管理时被封。编辑 /etc/fail2ban/jail.local 的 [DEFAULT] 部分添加 ignoreip = 127.0.0.1/8 你的公网IP
  4. 日志路径错误:启动失败最常见原因就是 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 里添加对应小节,方法类似。

分享到:
上一篇
日志切割自动归档节省服务器磁盘空间:日志切割自动归档实战
下一篇
多站点容器隔离防跨站入侵漏洞:新手也能上手的实战配置
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意