Fail2ban 禁止不在日誌中的奇數 IP 地址(0.0.0.4、0.0.0.5 等)
伺服器: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: scaninfo@expanseinc.com" | - | 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 通常將匹配項儲存到數據庫中,因此您也可以從那裡獲取匹配的行:
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}
的全部.*
內容根本不重要,並且可以安全地刪除(RE 未錨定在消息末尾)。但是.*
在中間(在“擴展網路索引”之前)可以用更精確的東西代替。如果您的 RE 最初未錨定(並且這個奇怪的地址出現在重新啟動時) - 這可能是舊的、以前匹配的和被禁止的票證(fail2ban 在重新啟動後恢復活動 IP)。只需手動取消禁止即可刪除它們,請參閱
fail2ban-client --help | grep unban
。