安装
# 对于 Ubuntu, Debian
sudo apt install -y fail2ban
# 对于 CentOS, Fedora
sudo yum install -y epel-release
sudo yum install -y fail2ban
# 开启fail2ban服务
systemctl enable --now fail2ban
fail2ban 默认配置为 /etc/fail2ban/jail.conf
,为避免更新时配置被覆盖,生成自定义配置:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
显示 fail2ban 配置
cat /etc/fail2ban/jail.local
编辑/etc/fail2ban/jail.local
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log # Ubuntu/Debian
#logpath = /var/log/secure # CentOS
maxretry = 3
bantime = 600
参数
* enabled - 表示是否开启监控服务
* port - 监控服务的端口号
* filter - 启用的日志过滤器, 引用位于 /etc/fail2ban/filter.d 目录中的文件
* logpath - 监控服务的日志文件路径
* maxretry - 最大失败重试次数(maxretry attempts)
* bantime - 禁止IP地址的持续时间(秒)
多配置路径1:/etc/fail2ban/jail.d/sshd.conf
[sshd]
enabled = true
mode = normal
backend = systemd
多配置路径2:/etc/fail2ban/jail.d/nginx.conf
[nginx-http-auth]
enabled = true
mode = fallback
port = http,https
logpath = /var/log/nginx/access.log
[nginx-limit-req]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
[nginx-botsearch]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
[nginx-bad-request]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
[php-url-fopen]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
参数
nginx-http-auth:
mode = fallback表示使用fallback模式。在这种模式下,Fail2Ban会在特定时间段内(默认为10分钟)累积失败次数,然后根据规则封锁IP。
nginx-limit-req:
这个规则用于检测客户端在短时间内发起的请求次数是否超过阈值,从而防止DDoS攻击。
nginx-botsearch:
该规则用于检测一定时间内访问频率异常的客户端,可能是爬虫或恶意行为。
nginx-bad-request:
用于检测HTTP请求中可能的恶意行为或异常情况,例如恶意扫描或非法请求。
php-url-fopen:
该规则用于防止通过php://协议进行的潜在攻击,这是一种可能被滥用的PHP特性。
重启 fail2ban
systemctl restart fail2ban
查看 iptables 配置
iptables -nvL
解禁/封禁 ip
fail2ban-client set ssh-iptables unbanip 8.8.8.8
fail2ban-client set ssh-iptables banip 8.8.8.8
显示状态
fail2ban-client status
fail2ban-client status sshd
fail2ban-client status nginx-http-auth
显示日志
tail -n5 /var/log/fail2ban.log
tail -f /var/log/auth.log
2023年1月13日 处理修复
2024年1月18日 更新补充
2024年1月18日 更新补充
更新 2024-01-18