插件窝 干货文章 细述:Fail2ban 阻止暴力破解案例

细述:Fail2ban 阻止暴力破解案例

Fail2ban sudo fail ban 534    来源:    2025-05-16

Fail2ban 阻止暴力破解案例详解

Fail2ban 是一款开源的入侵防御工具,通过监控系统日志文件来检测恶意行为(如暴力破解、DoS攻击等),并自动更新防火墙规则来阻止这些攻击。下面我将详细介绍一个典型的 Fail2ban 阻止 SSH 暴力破解的案例。

案例背景

假设我们有一台运行 SSH 服务的 Linux 服务器,不断受到来自不同 IP 地址的暴力破解攻击。攻击者尝试使用各种用户名和密码组合来试图获取系统访问权限。

实施步骤

1. 安装 Fail2ban

# 在基于 Debian/Ubuntu 的系统上
sudo apt update
sudo apt install fail2ban

# 在基于 RHEL/CentOS 的系统上
sudo yum install epel-release
sudo yum install fail2ban

2. 配置 Fail2ban

Fail2ban 的主要配置文件位于 /etc/fail2ban/jail.conf,但最佳实践是创建本地配置文件:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

修改或添加以下内容:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 10m
bantime = 1h
ignoreip = 127.0.0.1/8 192.168.1.0/24
  • maxretry: 允许的最大失败尝试次数
  • findtime: 检测时间窗口(10分钟内)
  • bantime: 禁止时间(1小时)
  • ignoreip: 不受限制的IP地址或网络

3. 重启 Fail2ban 服务

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

4. 监控 Fail2ban 状态

# 查看 Fail2ban 状态
sudo fail2ban-client status

# 查看特定 jail 的状态(如 sshd)
sudo fail2ban-client status sshd

# 查看系统日志
sudo tail -f /var/log/fail2ban.log

实际案例效果

假设攻击者从 IP 123.45.67.89 尝试暴力破解:

  1. 攻击者尝试使用不同用户名/密码组合登录 SSH
  2. 每次失败尝试都会记录到 /var/log/auth.log
  3. Fail2ban 监控该日志,检测到来自同一 IP 的多次失败尝试
  4. 当失败次数达到 maxretry (5次) 时,Fail2ban 会执行以下操作:
    • 在防火墙中添加规则阻止该 IP
    • 记录到 /var/log/fail2ban.log
    • 发送通知邮件(如果配置了邮件通知)

日志示例:

2023-05-15 14:30:22,748 fail2ban.actions [12345]: NOTICE [sshd] Ban 123.45.67.89

高级配置

自定义过滤规则

可以创建自定义过滤器来检测特定模式。例如,在 /etc/fail2ban/filter.d/ 中创建新规则。

更长的封禁时间

对于重复攻击者,可以配置递增的封禁时间:

[sshd]
bantime = 1h
maxretry = 5
findtime = 10m

邮件通知

配置邮件通知攻击事件:

[sshd]
destemail = admin@example.com
sender = fail2ban@example.com
mta = sendmail
action = %(action_mwl)s

验证效果

使用以下命令查看当前被禁止的 IP:

sudo iptables -L -n
# 或
sudo fail2ban-client status sshd

总结

Fail2ban 通过实时监控日志、自动更新防火墙规则,有效阻止了 SSH 暴力破解攻击。在本案例中,任何 IP 地址如果在 10 分钟内尝试 5 次失败的 SSH 登录,将被自动封禁 1 小时。这种机制大大提高了服务器的安全性,同时减少了管理员手动干预的工作量。