fail2ban-regex 与 alert_json 格式的 snort 日志文件不匹配

时间:2021-03-22 11:40:46

标签: regex snort fail2ban

我尝试将 fail2ban-regex 与 alert_json 格式的 snort3 日志文件进行匹配。

日志文件中的 alert_json 输出示例:
{ "timestamp" : "21/03/22-12:23:56.370262", "seconds" : 1616412236, "action" : "allow", "class" : "none", "b64_data" : "lVAAFpTzAXEAAAAAoAJyELUuAAACBAW0BAIICikv9agAAAAAAQMDBw==", "dir" : "C2S", "dst_addr" : "6.7.8.9", "dst_ap" : "6.7.8.9:0", "eth_dst" : "00:11:22:33:44:55", "eth_len" : 102, "eth_src" : "11:11:22:33:44:55", "eth_type" : "0x800", "gid" : 1, "icmp_code" : 3, "icmp_id" : 0, "icmp_seq" : 0, "icmp_type" : 3, "iface" : "eth0", "ip_id" : 5814, "ip_len" : 68, "msg" : "ICMP Traffic Detected", "mpls" : 0, "pkt_gen" : "raw", "pkt_len" : 88, "pkt_num" : 2270045, "priority" : 0, "proto" : "ICMP", "rev" : 0, "rule" : "1:10000001:0", "service" : "unknown", "sid" : 10000001, "src_addr" : "1.2.3.4", "src_ap" : "1.2.3.4:0", "tos" : 192, "ttl" : 64, "vlan" : 0 }

我的 fail2ban-regex 不匹配:

^\{.*\"src_addr\"\ :\ \"<HOST>\".*\}$

我在 regexr.com 上试过了,结果匹配。 我已经发现时间戳可能有问题,但我不知道是哪个?

有人可以帮忙吗? 谢谢

1 个答案:

答案 0 :(得分:0)

它可能取决于fail2ban版本,例如最新的fail2ban>= 0.10.6/0.11.2不再需要时间戳(它会模拟“现在”),所以它向我显示IP和当前时间(当我执行它时):

$ fail2ban-regex -v /tmp/log '^\{.*\"src_addr\"\ :\ \"<HOST>\".*\}$'
...
Lines: 1 lines, 0 ignored, 1 matched, 0 missed

要指定自己的 datepattern,您必须在过滤器中设置它(或使用 -d 参数提供给 fail2ban-regex),这样就可以了:

# either for timestamp tag:
$ fail2ban-regex -v -d ^\{\s*"timestamp"\s*:\s*"%y/%m/%d-%H:%M:%S\.%f" /tmp/log \"src_addr\"\ :\ \"<HOST>\"

# or for posix seconds (probably better because don't need conversion):
$ fail2ban-regex -v -d '"seconds"\s*:\s*{EPOCH}\s*,\s*' /tmp/log '\"src_addr\"\ :\ \"<HOST>\"'

请注意,在fail2ban 配置中,由于python ini-configs 替换规则,您必须将每个% 转义为%%
另请注意,fail2ban 在应用首选项或 failregex 之前删除了消息匹配日期模式的一部分。

另请注意,您的 RE 有点脆弱,请参阅 https://github.com/fail2ban/fail2ban/issues/2932#issuecomment-777320874 以获得更好的示例。