Splunk能否读取文件内部内容并基于关键词配置告警过滤规则?
Splunk过滤Docker触发的hosts文件修改告警实现方案
直接在你现有内置告警规则的搜索逻辑基础上追加过滤条件即可,按以下步骤操作:
前置检查:确认采集字段完整性
先确认你的端点采集配置(Splunk FIM、Sysmon、EDR上报日志均可)已覆盖两类必要字段,否则先补全采集配置:
- 发起hosts文件修改操作的进程名、进程可执行文件路径字段
- hosts文件变更时的内容字段:如果用Splunk自带FIM,在
inputs.conf对应hosts监控项中加content = 1配置,重启Universal Forwarder即可自动采集文件变更前后的全量内容,配置示例:
# Linux环境hosts监控配置示例 [monitor:///etc/hosts] disabled = 0 sourcetype = fim:hosts_change content = 1 index = endpoints # Windows环境hosts监控配置示例 [monitor://C:\Windows\System32\drivers\etc\hosts] disabled = 0 sourcetype = fim:hosts_change content = 1 index = endpoints
第一层过滤:进程维度排除Docker相关操作
在你原有告警搜索语句的最前端追加NOT匹配逻辑,先过滤所有明确由Docker组件发起的hosts修改:
# 将以下条件加在原有告警搜索逻辑的最前面 NOT ( process_name IN ("dockerd", "docker-proxy", "containerd", "containerd-shim-runc-v2") OR process_path IN ("*/docker/*", "*\\Docker\\*", "*/containerd/*") )
- 可根据自身环境Docker的实际安装路径调整路径匹配规则,覆盖你环境中所有Docker运行时组件的路径即可。
第二层过滤:文件内容维度排除Docker写入特征
为避免进程名伪造、第三方组件调用Docker运行时改hosts的漏过滤场景,追加内容维度的匹配规则——Docker修改hosts时会写入固定特征的条目,匹配到以下特征的事件直接排除:
# 接在上述进程过滤条件后追加 NOT ( file_content="*# Added by Docker*" OR file_content="*127.0.0.1*kubernetes*" OR (file_content="*172.17.0.*" AND file_content="*.svc.cluster.local*") )
注意:上述语句里的
process_name、process_path、file_content是通用字段名,你需要替换成自身环境日志中对应的实际字段名,可以先对hosts修改事件跑全字段搜索确认字段命名。
规则有效性校验
配置完成后做两次验证:
- 手动启动/停止一个Docker容器,触发Docker自动修改hosts的操作,确认对应事件被过滤、不触发告警
- 手动用文本编辑器修改hosts文件添加一条测试条目,确认非Docker触发的修改事件能正常命中告警规则
内容的提问来源于stack exchange,提问作者BestestCohen
相关产品推荐
相关产品推荐

