【问题标题】:Fail2ban regex for special log formatFail2ban 正则表达式用于特殊日志格式
【发布时间】:2019-12-21 20:53:28
【问题描述】:

我有一个日志文件,其中的行如下所示:

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 可以读取日志文件。感谢您的帮助!

【问题讨论】:

    标签: regex fail2ban


    【解决方案1】:

    Fail2ban 在搜索 failregex 的匹配项开始之前从字符串中删除与 datepattern 匹配的时间戳。
    所以你可以删除\"%Y-%m-%d %H:%M:%S\"

    或者更好地使用这样的东西:

    failregex = ^\s*\S*\s+\[WARNING\]: authenticate: failed login attempt \{(?:"(?!ip")[^"]+":(?:"(?:[^"]|\\")*(?!\\)"|[^,]*),\s*)*"ip":"<HOST>"
    

    这更安全一些 - 提前锚定,如果看起来像 json 的部分在中间发生变化(标签顺序等),它会匹配。
    (?:"(?!ip")[^"]+":(?:"(?:[^"]|\\")*(?!\\)"|[^,]*),\s*)* 部分是一个“简单”匹配器,用于绕过除 "ip" 之外的任何标记的 json dict 元素。

    【讨论】:

    • 谢谢你!这确实有效。我发现 failregex = ^.*authenticate\: ​​failed login attempt.*\"ip\"\:\"\".*$ 也有效。另一方面:我了解您维护 Fail2ban:再次感谢您!我非常感谢 Fail2ban 开发人员的工作。 Fail2ban 对于任何具有面向公众的登录页面的应用程序来说都是至关重要的。继续努力!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多