什么是 Fail2ban?
Fail2ban 是一个入侵防御软件框架,可以保护计算机服务器免受暴力破解攻击。它通过扫描日志文件(例如 /var/log/auth.log)并禁止显示恶意迹象的 IP 地址——如密码失败次数过多,寻找漏洞等。
安装 Fail2ban
根据你使用的 Linux 发行版,选择相应的安装方式。
1. 使用包管理器安装
Debian / Ubuntu
| |
CentOS / RHEL (使用 yum 或 dnf)
在 CentOS/RHEL 上,你通常需要先安装 EPEL 仓库:
| |
2. 通过源码安装 (tar.gz)
如果你需要安装特定版本或者你的发行版没有提供包,可以从源码安装:
| |
注意:源码安装通常需要手动配置 systemd 服务文件和日志路径。
安装后,建议将 Fail2ban 设置为开机自启:
| |
配置 Fail2ban
Fail2ban 的默认配置文件是 /etc/fail2ban/jail.conf。但是,不建议直接修改此文件,因为软件包更新时可能会覆盖它。相反,你应该创建一个本地配置文件 /etc/fail2ban/jail.local 或在 /etc/fail2ban/jail.d/ 目录下创建新的 .conf 文件来覆盖默认设置。
创建本地配置文件
首先,将 jail.conf 复制到 jail.local:
| |
现在,你可以安全地编辑 jail.local 文件。
配置 SSH 防护
打开 /etc/fail2ban/jail.local 文件,找到 [sshd] 部分。你可以根据需要自定义以下参数:
| |
enabled:true表示启用此监狱(jail)。port: SSH 服务的端口。logpath: SSH 认证日志文件的路径。maxretry: 在findtime时间内允许的最大失败尝试次数。findtime: 监控失败尝试的时间窗口。bantime: 禁止 IP 地址的时间长度。1d表示一天。
重启 Fail2ban
修改配置后,你需要重启 Fail2ban 服务以使更改生效:
| |
更多实用场景配置
除了 SSH,Fail2ban 还可以保护许多其他服务。在 jail.local 中添加以下内容:
Nginx 防止恶意扫描 (404 错误过多)
| |
注意:这需要你在 /etc/fail2ban/filter.d/ 下定义 nginx-404.conf 过滤器。
MySQL/MariaDB 防护
| |
Fail2ban 常用管理命令
fail2ban-client 是管理 Fail2ban 的主要工具。
1. 查看状态
| |
2. 管理被禁 IP
| |
3. 重新加载配置
当你修改了 .local 文件或过滤器后,无需重启整个服务即可生效:
| |
常见问题与小贴士
- 白名单:在
[DEFAULT]部分设置ignoreip = 127.0.0.1/8 ::1 <你的固定IP>,防止把自己关在外面。 - 持久化:默认情况下,重启服务后之前的禁令会失效。如果需要持久化,可以配置数据库存储。
- 邮件通知:Fail2ban 支持在封禁 IP 时向管理员发送邮件提醒。
总结
Fail2ban 是一个简单而有效的工具,可以为你的服务器增加一层重要的安全保护。通过正确配置,你可以大大减少受到暴力破解攻击的风险。