![](/img/trans.png)
[英]RegEx for use with fail2ban on nginx with wordpress and custom log format
[英]Fail2ban regex for special log format
我有一個日志文件,其中的行如下所示:
2019-12-21 20:30:02 index [WARNING]: authenticate: failed login attempt {"action":"login","username":"tgbtgbtgbtgb","ip":"61.142.184.152"} - {"file":"Login.php","line":147, ...
我使用以下正則表達式在 Fail2ban 中設置了一個過濾器:
\"%Y-%m-%d %H:%M:%S\" index [WARNING]: authenticate: failed login attempt {\"action\":\"login\",\"username\":\".*\",\"ip\":\"<HOST>\".*
不幸的是,Fail2ban 無法根據上面的正則表達式捕獲失敗的登錄嘗試。 有什么問題?
/etc/fail2ban/jail.local
的配置塊是:
[appname]
enabled = true
filter = appname
logpath = /path/to/logfile.log
port = 80,443
maxretry = 3
bantime = 259200
此外,Fail2ban 可以讀取日志文件。 感謝您的幫助!
在開始搜索failregex
匹配之前, datepattern
從字符串中刪除時間戳匹配的datepattern
。
所以你可以刪除\\"%Y-%m-%d %H:%M:%S\\"
。
或者更好地使用這樣的東西:
failregex = ^\s*\S*\s+\[WARNING\]: authenticate: failed login attempt \{(?:"(?!ip")[^"]+":(?:"(?:[^"]|\\")*(?!\\)"|[^,]*),\s*)*"ip":"<HOST>"
這更安全一點 - 提前錨定,並且如果看起來像 json 的部分在中間發生變化(標簽順序等),它也會匹配。
部分(?:"(?!ip")[^"]+":(?:"(?:[^"]|\\\\")*(?!\\\\)"|[^,]*),\\s*)*
是 json dict 元素的“簡單”匹配器,繞過除"ip"
之外的任何標簽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.