fail2ban 是一款高效的开源工具,用于防止服务器遭受暴力破解攻击。本文详细介绍如何安装、配置 fail2ban,并优化其规则以保护 SSH、FTP 等服务,同时提供日志监控和自定义过滤器的实用技巧。
1. 什么是 fail2ban?
fail2ban 是一款基于 Python 开发的入侵防御工具,通过监控系统日志(如 /var/log/auth.log)检测恶意登录尝试,并自动触发防火墙规则(如 iptables 或 firewalld)封锁攻击者 IP。它支持多种服务(SSH、FTP、Apache 等),是服务器安全加固的必备工具。
2. 安装 fail2ban
在主流 Linux 发行版中,可通过包管理器直接安装:
Debian/Ubuntu
sudo apt update && sudo apt install fail2ban
CentOS/RHEL
sudo yum install epel-release && sudo yum install fail2ban
Arch Linux
sudo pacman -S fail2ban
3. 基础配置
fail2ban 的主配置文件位于 /etc/fail2ban/jail.conf
,但建议创建 /etc/fail2ban/jail.local
覆盖默认配置:
[DEFAULT]
禁止时间(秒)
bantime = 86400
检测时间窗口
findtime = 600
最大失败次数
maxretry = 5
使用 firewalld 替代 iptables
banaction = firewallcmd-ipset
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
4. 自定义过滤器规则
若需针对特定攻击模式(如暴力破解 WordPress)添加规则,可在 /etc/fail2ban/filter.d/
创建自定义过滤器:
/etc/fail2ban/filter.d/wordpress.conf
[Definition]
failregex = ^<HOST>."POST.wp-login.php. 200$
ignoreregex =
然后在 jail.local
中启用:
[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/nginx/access.log
5. 常用命令与管理
启动服务
sudo systemctl start fail2ban
设置开机自启
sudo systemctl enable fail2ban
查看状态
sudo fail2ban-client status
解封特定 IP
sudo fail2ban-client set sshd unbanip 192.168.1.100
6. 高级优化技巧
- 邮件通知: 在
jail.local
中配置destemail
和sender
接收告警 - 多IP封禁: 使用
action = %(action_mwl)s
同时记录日志并发送邮件 - CDN兼容: 通过
X-Forwarded-For
获取真实IP时需调整过滤器
7. 验证与测试
故意输入错误 SSH 密码触发封禁,然后检查状态:
sudo tail -f /var/log/fail2ban.log
输出示例:2023-01-01 12:00:00 fail2ban.actions [12345]: NOTICE [sshd] Ban 203.0.113.45
通过合理配置 fail2ban,可有效降低 90% 以上的暴力破解风险。建议定期审查日志并更新过滤规则以应对新型攻击手法。
评论