阿帕奇訪問日誌
我使用 fail2ban 來檢測對我的任何託管域的惡意請求,它執行良好,但有一個例外。
如果請求被發送到 IP 而不是 fqdn 或子域,它會被擷取並寫入 other_vhosts_access.log,因為 ip 本身不是虛擬主機。
範例條目:
somedomain.de:80 20.37.96.167 - -
$$ 24/Jan/2020:15:47:04 +0100 $$“POST //4walls/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1” 301 587 " https://www.google.com/ " “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36”
看來,apache 對 IP 進行反向查找並首先記下主機名。
這會導致 fail2ban 自我禁止伺服器 IP 而不是請求者 IP。
如何防止 somedomain.de:80 條目?
apache 對 IP 進行反向查找並首先記下主機名。
如果您的過濾器製作正確(例如,沒有包羅萬象的錨定正則表達式),則無論域和外國地址的確切寫入位置都沒有關係。
我假設在您的範例日誌條目中,這
somedomain.de
是您的,並且20.37.96.167
是“入侵者”的地址。然後正確的失敗正則表達式如下所示:# ban everything (with code 300-599): failregex = ^\S+\s+<ADDR>\s+\S+\s+\S+\s+\[\]\s+"[^\"]+" [345]\d+
錨定部分
^\S+\s+<ADDR>
匹配somedomain.de:80 20.37.96.167
並會在字元串中搜尋 begin 僅由於 anchor^
。這對於正則表達式也足夠了,如果您必須禁止所有內容
other_vhosts_access.log
(無論生成的 http 狀態如何)。如果你有 fail2ban 版本 <= 0.9 使用
<HOST>
而不是<ADDR>
.您還可以檢查
fail2ban-regex
它是否會擷取一些誤報,例如:fail2ban-regex --raw -vv /path/to/log '^\S+\s+<ADDR>\s+\S+\s+\S+\s+\[\]\s+"[^\"]+" [345]\d+' \ | grep <your-IP-or-hostname>