Regex

POST的fail2ban正則表達式未觸發

  • August 25, 2016

所以我試圖在我的伺服器上限制 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。如果有人能告訴我正確的正則表達式,那就太好了,但只需為這個站點製作我自己的日誌文件就可以解決這個問題。

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