Fail2ban正则表达式用于特殊日志格式

时间:2019-12-21 20:53:28

标签: regex fail2ban

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

private static CardLayout cards;
private static JPanel panel;

private Main() {
    super("Card Layout");
    setBounds(0, 0, 500, 500);
    setDefaultCloseOperation(3);

    panel = new JPanel();

    add(panel);

    cards = new CardLayout();

    JPanel p1 = new JPanel();
    p1.setBackground(Color.WHITE);

    JPanel p2 = new JPanel();
    p2.setBackground(Color.BLACK);

    JPanel p3 = new JPanel();
    p3.setBackground(Color.RED);

    JPanel p4 = new JPanel();
    p4.setBackground(Color.BLUE);

    panel.add("white", p1);
    panel.add("black", p2);
    panel.add("red", p3);
    panel.add("blue", p4);

    panel.setLayout(cards);

    // cards.next(panel); This works fine for me.
    cards.show(panel, "red");

    setVisible(true);
}

public static void main(String[] args) {
    new Main();
}

我在Fail2ban中使用以下正则表达式设置了过滤器:

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>\".* 中的配置块为:

/etc/fail2ban/jail.local

此外,Fail2ban可以读取日志文件。谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

Fail2ban在开始搜索datepattern的匹配项之前从字符串中删除匹配的时间戳failregex
因此,您只需删除\"%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"以外的任何标签。