Nginx

Fail2ban 禁止不在日誌中的奇數 IP 地址(0.0.0.4、0.0.0.5 等)

  • March 16, 2021

伺服器: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

引用自:https://serverfault.com/questions/1057265