我在转换与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表达式有关吗?
这与在日志文件中包含特殊字符有关吗?
字符串有错误吗?
如果您可以帮助我朝正确的方向发展,我将非常感谢您,以便我可以对正则表达式有更多的了解并能够保护系统。
答案 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: