服务器: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.* 时它是什么意思?我在主配置中遗漏了什么吗?
答案1
尽管我不明白如何通过failregex
像你这样的锚定来实现这一点,但我会尝试在这里解释 fail2ban 的工作原理。
标签<HOST>
也可以通过主机名找到主机。为了避免这种情况,你可以使用标签<ADDR>
(>= v.0.10 以上)或设置usedns = no
jail。
你真的没有几行以 2-3 位数字开头,然后是竖线,后面跟着一些文本吗?我的意思是一些多行日志行……
Fail2ban 通常将匹配项存储到数据库,因此您也可以从那里获取匹配的行:
sqlite3 'file:/var/lib/fail2ban/fail2ban.sqlite3?mode=ro' "select * from bans where jail = 'expanse-bot' and ip like '0.0.0.%'"
顺便说一句,(\d{2}|\d{3})
可以用 替换\d{2,3}
,末尾的 catch-all.*
完全无关紧要,可以安全删除(RE 未固定在消息末尾)。但.*
中间(在“Expanse 索引网络之前”)可以用更精确的内容替换。
如果您的 RE 最初未锚定(并且这些奇怪的地址在重启时出现) - 这可能是旧的、之前匹配和被禁止的票证(fail2ban 在重启后恢复活动 IP)。只需通过手动取消禁止来删除它们,请参阅fail2ban-client --help | grep unban
。