服务器:Nginx
Fail2ban 版本:v0.9.3
似乎无论我尝试什么,我都无法让 fail2ban 始终从日志条目中找到正确的主机。
/etc/fail2ban/filter/expanse-bot.conf:
[Definition]
failregex = ^(\d{2}|\d{3}) \| <HOST> \| .*\"Expanse indexes the network.*
^(\d{2}|\d{3})
捕获端口 80 或 443。我最初在行的开头尝试了一个通配符,^.*<HOST>
但没有奏效。
日志条目:
443 | 34.77.162.32 | - | [14/Mar/2021:11:08:23 -0500] | redacted-domain.com | "GET / HTTP/1.1" | 200 | 144126 | "-" | "Expanse indexes the network perimeters of our customers. If you have any questions
or concerns, please reach out to: [email protected]" | - | 123.45.67.89:1234
在/var/log/fail2ban.log
中,它显示了日志中不存在的这些奇数 IP 地址:
2021-03-14 11:07:02,716 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 0.0.0.3
2021-03-14 11:07:03,656 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 0.0.0.4
2021-03-14 11:07:03,865 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 0.0.0.5
2021-03-14 11:07:04,075 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 0.0.0.6
但是,那么它是否正确禁止?:
2021-03-14 11:13:48,075 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.13
2021-03-14 11:13:51,288 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.27
2021-03-14 11:15:19,595 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.16
2021-03-14 11:16:30,884 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.12
2021-03-14 11:18:14,208 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.18
2021-03-14 11:19:39,513 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.11
我的配置/etc/fail2ban/jail.local
:
[expanse-bot]
enabled = true
filter = expanse-bot
logpath = /var/log/nginx/access.log
port = http,https
maxretry = 1
findtime = 3
bantime = 86400
action = iptables-allports[name=expanse-bot]
一旦它通过那些奇怪的 IP 地址,它就会按预期进行。我只是不明白 0.0.0.* 在日志中不存在时的含义是什么?我在主要配置中缺少什么吗?
虽然我不明白如何使用
failregex
像你这样的锚定,但我将尝试解释 fail2ban 在这里的工作原理。标记
<HOST>
也可以通过其主机名找到主机。为避免这种情况,您可以使用 tag<ADDR>
代替(仅限 >= v.0.10)或设置usedns = no
在 jail 中。你真的没有一些以 2-3 位数字和管道开头的行和一些文本吗?我的意思是一些多行日志行...
Fail2ban 通常将匹配项存储到数据库中,因此您也可以从那里获取匹配的行:
顺便说一句
(\d{2}|\d{3})
,可以替换为结尾\d{2,3}
的全部.*
内容根本不重要,并且可以安全地删除(RE 未锚定在消息末尾)。但是.*
在中间(在“扩展网络索引”之前)可以用更精确的东西代替。如果您的 RE 最初未锚定(并且这个奇怪的地址出现在重新启动时) - 这可能是旧的、以前匹配的和被禁止的票证(fail2ban 在重新启动后恢复活动 IP)。只需手动取消禁止即可删除它们,请参阅
fail2ban-client --help | grep unban
。