Fail2ban 是一款开源的入侵防御工具,通过监控系统日志文件来检测恶意行为(如暴力破解、DoS攻击等),并自动更新防火墙规则来阻止这些攻击。下面我将详细介绍一个典型的 Fail2ban 阻止 SSH 暴力破解的案例。
假设我们有一台运行 SSH 服务的 Linux 服务器,不断受到来自不同 IP 地址的暴力破解攻击。攻击者尝试使用各种用户名和密码组合来试图获取系统访问权限。
# 在基于 Debian/Ubuntu 的系统上
sudo apt update
sudo apt install fail2ban
# 在基于 RHEL/CentOS 的系统上
sudo yum install epel-release
sudo yum install 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地址或网络sudo systemctl restart fail2ban
sudo systemctl enable 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 尝试暴力破解:
/var/log/auth.log
maxretry
(5次) 时,Fail2ban 会执行以下操作:
/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 小时。这种机制大大提高了服务器的安全性,同时减少了管理员手动干预的工作量。