使用 fail2ban 配合 Nginx 动态封锁恶意IP


Vamev 才搭建一段时间,结果查看 nginx 日志发现已经有好多 IP 想爆破我的网站,一直在请求 wlwmanifest.xml 页面

因此尝试使用 Fail2ban 封禁这些恶意扫描 IP

安装 Fail2ban

以 Debian 10 为例:

apt install fail2ban -y

安装完成后,查看运行状态:

systemctl status fail2ban

看到 Active: active (running) 就是正常运行了

配置 Fail2ban

首先进入目录:

cd /etc/fail2ban/filter.d

新建过滤规则:

nano nginx-cc.conf

写入以下内容:

[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =.*(robots.txt|favicon.ico|jpg|png)

接着在 /etc/fail2ban 新建 jail.local

nano /etc/fail2ban/jail.local

写入如下内容:

[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = iptables-allports[name=nginx-cc]
logpath = /var/wwwlogs/vamev.com.log
bantime = 12h
findtime = 60
maxretry = 5

以上参数说明:

  • port:需要封禁的端口,这里设置的是一般做站的 80 和 443 端口
  • filter:过滤规则,使用前面自定义的 nginx-cc
  • logpath:监控的网站日志文件路径
  • bantime:封禁时间,单位为秒,-1 表示永久
  • findtime:查找时间段,单位为秒
  • maxretry:允许的最大失败次数,结合前面的 findtime,比如这里配置的是每 60 秒内触发 5 次规则,那么就封禁掉该 IP 12 小时
  • action:表示使用 iptables 进行封禁

保存退出,重启 fail2ban:

systemctl restart fail2ban

查看效果

过了一段时间,查看封禁效果:

fail2ban-client status nginx-cc

输出:

Status for the jail: nginx-cc
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     138
|  `- File list:        /var/wwwlogs/vamev.com.log
`- Actions
   |- Currently banned: 9
   |- Total banned:     12
   `- Banned IP list:   139.162.168.39 161.35.235.11 34.124.205.167 95.91.110.186 144.76.71.176 34.124.207.56 5.9.155.37 192.99.9.25 148.251.8.250

可以根据需要再调整 bantime、findtime、maxretry

声明:Vamev|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 使用 fail2ban 配合 Nginx 动态封锁恶意IP


Vamev Drive 家庭影院资源库