簡體   English   中英

用於特殊日志格式的 Fail2ban 正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM