Regex
POST的fail2ban正則表達式未觸發
所以我試圖在我的伺服器上限制 POST 請求。我環顧四周,嘗試了我可以在網際網路上找到的所有字元串排列。
這是我的 jail.local apache conf
[apache-postUsHttp] enabled = true port = http,https filter = apache-postflood logpath = /var/log/apache2/other_vhosts_access.log findtime = 30 bantime = 3600 maxretry = 10
在這裡你有 apache-postflood.conf 過濾器
# Fail2Ban configuration file # # # $Revision: 1 $ # [Definition] # Option: failregex # Notes.: Regexp to catch known spambots and software alike. Please verify # that it is your intent to block IPs which were driven by # abovementioned bots. # Values: TEXT # failregex = ^<HOST>.*"POST.* # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex =
這是一個範例訪問文章日誌。
my.tld:80 x.x.x.x - - [25/Aug/2016:05:53:52 -0400] "POST /location/of/file.php HTTP/1.1" 302 300 "http://my.tld/" "Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_4 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G35 Safari/601.1"
我還嘗試了以下 failregex = ^ -.* “POST.*
以及許多其他細微的變化。但無論我做什麼,我的fail2ban日誌中都沒有過濾器通知/資訊。
我知道時間戳正在解析並且它正在讀取日誌,因為當我打開調試登錄時,它肯定會全部登錄。
你的正則表達式是錯誤的。您試圖在行首進行匹配
<HOST>
,而^<HOST>
您想要的那個不在 my.tld:80: 之後。就像是
'^.*:80 <HOST> - - .*"POST.*'
可能對你有用,但你可能需要調整它。不要忘記有方便測試的fail2ban-regex(1)。
所以我想通了。
問題出在共享訪問日誌中。
我在這台伺服器上的多個站點使用一個訪問日誌,該日誌試圖使用第一個主機,作為網站的名稱,並試圖查找 dns 以禁止它。
IE
my.tld:80 x.x.x.x ......
xxxx 是我需要正則表達式的 ip。如果有人能告訴我正確的正則表達式,那就太好了,但只需為這個站點製作我自己的日誌文件就可以解決這個問題。