首页 > 解决方案 > fail2ban-regex 与 alert_json 格式的 snort 日志文件不匹配

问题描述

我尝试将 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 上试过这个,它匹配。我已经发现时间戳可能有问题,但我不知道是哪个?

有人可以帮忙吗?谢谢

标签: regexsnortfail2ban

解决方案


它可能取决于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 替换规则,您必须转义 every %as 。 另请注意,fail2ban 在应用 pref- 或之前会删除部分消息匹配日期模式。%%
failregex

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


推荐阅读