Fail2Ban 是一款开源的安全工具,主要用于防止暴力破解攻击。它通过监控系统日志文件(如 SSH、HTTP 等)来检测恶意登录尝试,并根据配置自动封禁攻击源 IP。
功能:
- 日志监控:Fail2Ban 通过配置的正则表达式扫描日志文件,识别出失败的登录尝试。
- IP封禁:当检测到一定次数的失败登录时,它会通过
iptables
或nftables
临时封禁攻击者的 IP 地址,防止继续攻击。 - 自动解除封禁:Fail2Ban 会在设定的时间后自动解除封禁,以确保正常用户不会被长期封锁。
原理:
- 监控日志:Fail2Ban 定期扫描指定的日志文件,查找失败的登录记录。
- 规则匹配:通过配置文件中的规则定义,Fail2Ban 识别出失败的登录尝试(如 SSH 登录失败)。
- 封禁 IP:当某个 IP 达到失败尝试的阈值时,Fail2Ban 会执行封禁动作(通常是修改防火墙规则),阻止该 IP 访问系统。
- 自动解除:封禁的 IP 会在配置的时间后被解除,避免误封正常用户。
安装教程:
更新你的系统软件包、安装依赖与Fail2ban
sudo apt update && sudo apt install -y python3-systemd fail2ban
安装完成后,Fail2Ban 服务会自动启动,你可以通过以下命令检查服务状态:
sudo systemctl status fail2ban
配置 Fail2Ban
Fail2Ban 的默认配置文件通常位于 /etc/fail2ban
目录下,主配置文件是 fail2ban.conf
和 jail.conf
。但是,最好不要直接修改 jail.conf
,而是创建一个局部配置文件 jail.local
,以便在更新时不会丢失你的修改。
- 创建或编辑
jail.local
配置文件:
sudo nano /etc/fail2ban/jail.local
- 在文件中添加或修改你需要的配置。例如,开启常见的服务防护(如 SSH):
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = -1 # 或者 bantime = "infinity"
backend=systemd
#enabled=true
[DEFAULT]
allowipv6 = auto
[sshd]
部分是一个监狱的定义,专门用于监控SSH服务的登录尝试。enabled = true
表示这个监狱是激活状态。port = ssh
指定了SSH服务监听的端口号,默认是22。filter = sshd
指定了Fail2Ban使用哪个过滤器来解析日志文件中的登录失败尝试。过滤器定义在/etc/fail2ban/filter.d/
目录下。logpath = /var/log/auth.log
(对于Debian系)或logpath = /var/log/secure
(对于CentOS系)指定了Fail2Ban监控的日志文件路径。这些路径分别适用于Debian系和CentOS系的系统。bantime = -1
设置了封禁的时长,这里是永久。封禁期满后,IP地址将被解封。maxretry = 3
设置了在findtime
指定的时间窗口内允许的最大失败尝试次数。超过这个次数的失败尝试将导致来源IP被封禁。
启动和管理 Fail2Ban
Fail2Ban 会自动启动,但如果需要手动启动、停止或重启它,可以使用以下命令:
- 启动 Fail2Ban:
sudo systemctl start fail2ban
- 停止 Fail2Ban:
sudo systemctl stop fail2ban
- 重启 Fail2Ban:( 编辑完
/etc/fail2ban/jail.local
文件之后,并不需要完全重启系统或者 Fail2Ban 服务,但你需要 重启 Fail2Ban 服务 来使配置生效。)
sudo systemctl restart fail2ban
- 查看 Fail2Ban 服务状态:
sudo systemctl status fail2ban
查看日志
你可以使用 fail2ban-client status <jail>
命令查看当前在某个监控规则下被封禁的 IP 地址。
例如,要查看 sshd
(SSH)规则下的封禁 IP:
sudo fail2ban-client status sshd
这将显示类似以下的输出:
root@sora:~# sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 2
| |- Total failed: 155
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 22
|- Total banned: 22
`- Banned IP list: 218.92.0.137 92.255.85.253 185.213.165.172