我正在使用 Fail2Ban,并已根据需要对其进行了配置。它从 nginx/error.log 读取日志,并根据有关 maxretry 和时间设置的配置采取行动。问题是,这是否可以根据状态代码制定不同的规则?
例如,我想阻止任何人404 Status code
在 5 分钟内获得 10 分,但阻止任何人在 3 分钟内获得 3 分403 Status code
。
如能得到任何帮助我将非常感激,先行致谢。
答案1
您应该添加一个/etc/fail2ban/filter.d/
具有相关名称的过滤器--例如nginx-{403,404}.conf
。
它们应该包含类似以下几行的内容:
nginx-403.conf:
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*" 403
ignoreregex =
nginx-404.conf:
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*" 404
ignoreregex =
然后您应该从您的jail.local
文件中调用它们,如果尚不存在则创建此文件(扩展默认文件jail.conf
):
对于 403:
[nginx-403]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 300
对于 404 :
[nginx-404]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 10
findtime = 300
注意:如果您运行的是旧版本的 Fail2Ban(版本 0.8.x 及更低版本),您还需要filter
在配置中定义。在较新版本中,方括号中的 jail 标题还标识了正在使用的过滤器。