一、什么是 Fail2Ban?
Fail2Ban 是一款用于防止暴力破解攻击(Brute-force attack)的开源入侵防御工具。它通过监控系统日志文件(如 /var/log/secure
或 /var/log/auth.log
),检测到多次失败登录尝试后,自动将可疑 IP 地址使用防火墙规则(如 iptables
或 firewalld
)进行封禁。
Fail2Ban 支持多种服务(如 SSH、FTP、HTTP、SMTP 等),并且可以通过自定义规则灵活配置。
二、Fail2Ban 的工作原理简述:
三、在 CentOS 7 上安装和配置 Fail2Ban
步骤 1:更新系统软件包
sudo yum update -y
步骤 2:安装 EPEL 仓库
Fail2Ban 在默认的 CentOS 仓库中不可用,需要先启用 EPEL 仓库:
sudo yum install epel-release -y
步骤 3:安装 Fail2Ban
sudo yum install fail2ban -y
安装完成后,Fail2Ban 的主配置文件位于 /etc/fail2ban/
目录下。
步骤 4:配置 Fail2Ban
1. 复制默认配置文件
为了保留原始配置,建议复制一份 jail.conf
并重命名为 jail.local
:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
2. 编辑 jail.local 配置文件
sudo vi /etc/fail2ban/jail.local
基本配置项说明:
[DEFAULT]
段是全局设置,适用于所有服务。[sshd]
、[nginx-http-auth]
等。修改以下常用参数:
[DEFAULT]
# 设置日志级别(1~4)
loglevel = 3
# 日志路径
logtarget = /var/log/fail2ban.log
# 使用的防火墙管理器(CentOS 7 默认使用 firewalld)
banaction = firewallcmd-rich-rules
# 封禁时间(单位为秒,例如600=10分钟)
bantime = 600
# 检测周期内允许的最大失败次数
maxretry = 5
# 检测周期时间(单位为秒)
findtime = 600
# 接受通知邮件的地址(可选)
destemail = [email protected]
sendername = Fail2BanAlert
mta = sendmail
# 动作(ban + 发送邮件)
action = %(action_mw)s
启用 SSH 保护示例:
确保 [sshd]
部分如下所示:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
步骤 5:启动并启用 Fail2Ban 服务
# 启动服务
sudo systemctl start fail2ban
# 设置开机自启
sudo systemctl enable fail2ban
# 查看状态
sudo systemctl status fail2ban
步骤 6:查看当前封禁的 IP
可以使用以下命令查看被封禁的 IP 地址:
sudo fail2ban-client status
sudo fail2ban-client status sshd
输出类似:
Status for the jail: sshd
|- filter
| |- File list: /var/log/secure
| |- Currently failed: 0
| `- Total failed: 12
`- action
|- Currently banned: 1
| `- IP list: 192.168.1.100
`- Total banned: 3
四、其他常见配置(可选)
1. 自定义封禁规则
你可以创建新的 jail 配置来保护其他服务,比如 Apache、Nginx、vsftpd 等。
例如添加一个针对 Nginx 登录认证失败的规则:
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
2. 邮件通知配置(可选)
如果你希望在封禁 IP 时收到邮件通知,请确保已安装邮件服务(如 sendmail 或 postfix):
sudo yum install sendmail -y
sudo systemctl start sendmail
sudo systemctl enable sendmail
然后在 jail.local
中设置 destemail
和 action
:
destemail = [email protected]
action = %(action_mw)s
五、常见问题排查
1. Fail2Ban 未生效
检查服务是否运行:systemctl status fail2ban
查看 Fail2Ban 日志:tail -f /var/log/fail2ban.log
确保 fail2ban
用户有权限读取相关日志文件(如 /var/log/secure
)
查看当前封禁规则:sudo iptables -L -n | grep fail2ban
或者使用 firewalld:sudo firewall-cmd --list-all
六、总结
Fail2Ban 是一款非常实用的安全防护工具,尤其适合保护 SSH、Web 登录等服务免受暴力破解攻击。通过合理配置,可以在不影响正常访问的前提下有效提高服务器安全性。
七、参考资料
Fail2Ban 官方网站
Fail2Ban GitHub 项目页
Fail2Ban Wiki 文档