请求编写Logstash Filter以提取Cisco ASA指定ACL_ID的流量日志
Logstash Filter 配置方案(针对Cisco ASA %ASA-4-106100日志)
前提假设
假设你的%ASA-4-106100日志格式示例如下:
%ASA-4-106100: access-list ACL_PROD denied tcp 192.168.20.5/32(54321) -> 172.16.10.20/32(443) hit-cnt 3 first hit [0xdef456]
这里需要匹配的指定ACL_ID为ACL_PROD,哈希码格式为[0xxxxxxx]。
完整Filter配置
filter { # 仅处理Cisco ASA的106100日志 if [message] =~ /%ASA-4-106100/ { # 用grok解析日志核心字段 grok { match => { "message" => "%ASA-4-106100: access-list %{DATA:acl_id} %{DATA:action} %{DATA:proto} %{DATA:src_full} -> %{DATA:dst_full} hit-cnt %{NUMBER:hit_cnt} first hit %{DATA:hash_code}" } add_tag => ["asa_acl_hit"] } # 筛选符合条件的日志:指定ACL_ID + 合法哈希码格式 if [acl_id] == "ACL_PROD" and [hash_code] =~ /^\[0x[0-9a-fA-F]+\]$/ { # 提取不带端口的源地址 mutate { split => { "src_full" => "(" } add_field => { "src_ip" => "%{[src_full][0]}" } remove_field => ["src_full"] } # 保留带端口的目的地址并重命名字段 mutate { rename => { "dst_full" => "dst_ip_port" } } } else { # 不符合条件的日志直接丢弃 drop {} } } }
配置说明
- 日志类型前置筛选:通过正则匹配只处理%ASA-4-106100类型日志,减少无效解析开销。
- Grok字段解析:将日志中的ACL_ID、动作、协议、源/目的全地址、命中次数、哈希码等信息提取为独立字段,便于后续条件判断和字段处理。
- 精准条件过滤:仅保留ACL_ID匹配目标值、哈希码符合
[0x十六进制]格式的日志,其余直接丢弃。 - 目标字段处理:
- 源地址:拆分带端口的源地址字符串,提取括号前的IP/掩码部分作为
src_ip字段。 - 目的地址:直接将解析出的带端口完整地址重命名为
dst_ip_port,保留原始格式。
- 源地址:拆分带端口的源地址字符串,提取括号前的IP/掩码部分作为
自定义调整点
- 若日志格式有细节差异,可修改grok匹配模式中的占位符,比如用
%{IP:src_ip_raw}/%{NUMBER:src_mask}更精准匹配IP和掩码。 - 将
ACL_PROD替换为你实际需要匹配的ACL_ID。 - 若哈希码格式不同,调整正则表达式
/^\[0x[0-9a-fA-F]+\]$/即可。
内容的提问来源于stack exchange,提问作者Andrey Glushchenko
相关产品推荐
相关产品推荐

