清风客栈 - 妖孽同学博客
Fail2Ban 在 CentOS 7 上的安装教程

一、什么是 Fail2Ban?
Fail2Ban 是一款用于防止暴力破解攻击(Brute-force attack)的开源入侵防御工具。它通过监控系统日志文件(如 /var/log/secure/var/log/auth.log),检测到多次失败登录尝试后,自动将可疑 IP 地址使用防火墙规则(如 iptablesfirewalld)进行封禁。

Fail2Ban 支持多种服务(如 SSH、FTP、HTTP、SMTP 等),并且可以通过自定义规则灵活配置。


二、Fail2Ban 的工作原理简述:

  • 日志监控:Fail2Ban 持续监控指定的日志文件。
  • 匹配规则:根据预设的正则表达式,识别出失败登录尝试。
  • 触发动作:当失败次数超过设定阈值时,执行预定义的操作(如 iptables 添加 DROP 规则)。
  • 解封机制:经过一定时间后,自动解除对 IP 的封禁。

三、在 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 中设置 destemailaction

destemail = [email protected]
action = %(action_mw)s


五、常见问题排查
1. Fail2Ban 未生效
检查服务是否运行:systemctl status fail2ban
查看 Fail2Ban 日志:tail -f /var/log/fail2ban.log
确保 fail2ban 用户有权限读取相关日志文件(如 /var/log/secure

  1. 防火墙规则未生效

查看当前封禁规则:sudo iptables -L -n | grep fail2ban
或者使用 firewalld:sudo firewall-cmd --list-all


六、总结
Fail2Ban 是一款非常实用的安全防护工具,尤其适合保护 SSH、Web 登录等服务免受暴力破解攻击。通过合理配置,可以在不影响正常访问的前提下有效提高服务器安全性。


七、参考资料
Fail2Ban 官方网站
Fail2Ban GitHub 项目页
Fail2Ban Wiki 文档

本文名称:Fail2Ban 在 CentOS 7 上的安装教程
版权声明:清风客栈发布