Fail2ban 是一款强大的开源入侵防御工具,通过监控日志文件检测恶意行为(如暴力破解、爬虫扫描等),并自动触发防火墙规则进行封禁。以下是详细使用指南:
sudo apt update
sudo apt install fail2ban -y
sudo yum install epel-release -y
sudo yum install fail2ban -y
sudo systemctl enable --now fail2ban
主配置文件
默认配置文件位于 /etc/fail2ban/jail.conf
,但建议创建本地副本避免升级覆盖:
sudo cp /etc/fail2ban/jail.{conf,local}
sudo nano /etc/fail2ban/jail.local
关键参数调整
修改以下全局配置(根据需求调整):
[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.1.0/24 # 白名单IP
bantime = 1h # 封禁时长(默认10分钟)
findtime = 10m # 检测时间窗口
maxretry = 5 # 最大失败尝试次数
destemail = admin@example.com # 报警邮件接收地址
/etc/fail2ban/jail.local
中 [sshd]
部分:
ini
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log # Ubuntu/Debian
# logpath = /var/log/secure # CentOS/RHEL
/etc/fail2ban/filter.d/nginx-botsearch.conf
:
ini
[Definition]
failregex = ^<HOST>.*"GET \/.* HTTP\/.*" 404 .*$
jail.local
中添加:
ini
[nginx-botsearch]
enabled = true
port = http,https
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
/etc/fail2ban/filter.d/mysql-auth.conf
:
ini
[Definition]
failregex = Access denied for user .* from <HOST>
jail.local
中启用:
ini
[mysql]
enabled = true
port = 3306
filter = mysql-auth
logpath = /var/log/mysql/error.log
iptables
或 firewalld
):
ini
[DEFAULT]
banaction = iptables-multiport # 默认动作
# 或使用 firewalld
banaction = firewallcmd-rich-rules
ini
[DEFAULT]
mta = sendmail
action = %(action_mwl)s # 封禁并发送邮件+日志
例如同时监控 SSH 的 22 和 2222 端口:
ini
[sshd]
port = 22,2222
bash
sudo fail2ban-client status <jail名称> # 例如 sshd
bash
sudo fail2ban-client set <jail> banip <IP>
sudo fail2ban-client set <jail> unbanip <IP>
bash
sudo fail2ban-client reload
/var/log/fail2ban.log
bash
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
ignoreip
包含管理IP。maxretry
和 findtime
。通过以上步骤,Fail2ban 可有效阻止暴力破解和自动化攻击,显著提升服务器安全性。建议定期检查日志并更新过滤规则以适应新威胁。