什么是 Fail2Ban?
Fail2ban 是一款用Python 编写的入侵防御软件框架,主要用于保护服务器免受暴力破解攻击。它通过监控系统日志文件,识别并阻止频繁尝试登录失败的IP 地址,从而提高服务器的安全性。
Fail2ban 的工作原理:
- 1. 监控日志:Fail2ban 持续监控系统日志文件,例如/var/log/auth.log(包含SSH 登录信息)或/var/log/apache/access.log(包含Apache Web 服务器日志)。
- 2. 识别恶意行为:它会根据预定义的规则(过滤器)来分析日志,识别出可疑的活动,例如多次登录失败、寻找漏洞等。
- 3. 触发封禁:一旦检测到恶意行为,Fail2ban 会触发预定义的动作,通常是使用防火墙(如iptables)来封禁对应的IP 地址,阻止其进一步访问服务器。
- 4. 可配置性:Fail2ban 具有高度的可定制性,可以配置不同的过滤器和动作,适用于不同的服务,并可以设置封禁时间、通知方式等。
Fail2ban 的优点:
- 防止暴力破解:有效阻止恶意用户通过暴力破解密码的方式入侵服务器。
- 保护多种服务:支持监控多种服务,如SSH、Apache、FTP 等。
- 自动封禁:能够自动检测和封禁恶意IP,无需人工干预。
- 可定制性强:可以根据实际需求进行配置,灵活应对各种安全威胁。
安装Fail2Ban
sudo apt update
sudo apt install fail2ban rsyslog -y
安装 rsyslog,以确保日志文件能够正常生成并供 Fail2Ban 使用
启动服务
sudo systemctl enable --now fail2ban
sudo systemctl enable --now rsyslog
检查服务状态
sudo systemctl status fail2ban
sudo systemctl status rsyslog
配置 Fail2Ban
sudo nano /etc/fail2ban/jail.local
粘贴以下内容,记得把 5522 改成你的SSH端口
[sshd]
ignoreip = 127.0.0.1/8
enabled = true
filter = sshd
port = 5522
maxretry = 3
findtime = 300
bantime = -1
banaction = ufw
logpath = /var/log/auth.log
配置说明:
- enabled = true 启用 SSH 防护
- port = 5522 指定 SSH 端口
- maxretry = 3 3次失败后封禁
- findtime = 300 在 300 秒(5 分钟)内统计失败尝试次数
- bantime = -1 封禁时间设为 -1,表示永久封禁
重启服务使配置生效
sudo systemctl restart fail2ban
管理和监控
查看运行状态
sudo systemctl status fail2ban
查看日志
sudo tail -f /var/log/fail2ban.log
管理封禁IP
查询封禁情况
sudo fail2ban-client status sshd
手动解封IP:
sudo fail2ban-client unban IP地址
常见问题处理
如果服务启动失败,检查配置文件语法:
sudo fail2ban-client -t
如果日志不更新,重启 rsyslog 服务:
sudo systemctl restart rsyslog
卸载
sudo systemctl stop fail2ban
sudo systemctl disable fail2ban
sudo apt-get remove --purge fail2ban
sudo apt-get autoremove
sudo apt-get clean
sudo rm -rf /var/log/fail2ban.log
sudo rm -rf /var/lib/fail2ban