将日志字符串转换为fail2ban的正则表达式

时间:2019-10-02 10:23:07

标签: regex security terminal vnc fail2ban

我在转换与VNC服务器和客户端交互相关的日志字符串时遇到麻烦,因此我可以使用fail2ban禁止某些IP。

VNC日志中有问题的字符串如下:

** (vino-server:28986): WARNING **: 01:02:54.300: VNC authentication failure from '888.88.9.999.dynamic.whatever.net'

这是我需要匹配的确切字符串(带有所有括号,星号...),并且显然告诉了以下命令 fail2ban 主机所在的位置。

我尝试过的很远:

执行检查的命令: fail2ban-regex "log line" "failregex"


fail2ban-regex "00:19:51.297: VNC authentication failure from 'server-185-153-197-251.cloudedic.net'" "VNC authentication failure from '<HOST>'"

它有效;但是日志行字符串与日志中的字符串不同。

使用确切的日志行时,我经常失败:

fail2ban-regex "** (vino-server:11241): WARNING **: 00:19:51.297: VNC authentication failure from 'server-185-153-197-251.cloudedic.net'" "authentication failure from '<HOST>'"
  • 这与不了解应该如何放置failregex表达式有关吗?

  • 这与在日志文件中包含特殊字符有关吗?

  • 字符串有错误吗?

如果您可以帮助我朝正确的方向发展,我将非常感谢您,以便我可以对正则表达式有更多的了解并能够保护系统。

1 个答案:

答案 0 :(得分:1)

这与regex基本上没有任何关系,更多的是fail2ban事情-为避免与期望的数据混淆,将其某些默认datepattern固定在行首(尤其是最简单的时间,如您的格式),因此您已经为此指定您自己的datepattern

这应该对您有用:

msg="** (vino-server:11241): WARNING **: 00:19:51.297: VNC authentication failure from 'server-185-153-197-251.cloudedic.net'"
fail2ban-regex -d '\s%H:%M:%S\.%f:' "$msg" "authentication failure from '<HOST>'"

请注意,fail2ban将在开始datepattern搜索之前删去与failregex匹配的消息部分,因此,预先为您的日志摘录锚定的failregex如下:

fail2ban-regex -d '\s%H:%M:%S\.%f:' "$msg" "^\*\* \(\S+\): WARNING \*\*: VNC authentication failure from '<HOST>'"

还要注意,在fail2ban配置文件中,您必须使用%指定%%-char,所以它看起来像这样:

datepattern = \s%%H:%%M:%%S\.%%f: