实战解析:基于ELK Stack与Grok的华为USG防火墙会话日志深度分析

张开发
2026/6/23 21:22:18 15 分钟阅读
实战解析:基于ELK Stack与Grok的华为USG防火墙会话日志深度分析
1. 华为USG防火墙日志分析实战背景第一次接触华为USG系列防火墙日志分析时我被满屏的%%01POLICY/6/POLICYPERMIT(l)日志搞得头晕眼花。作为企业网络安全的守门人这些日志里藏着大量关键信息——谁在访问内网服务器异常流量来自哪里安全策略是否生效但原始日志就像加密电报需要专业工具解码。ELK StackElasticsearchLogstashKibana是我用过最趁手的日志分析工具链。其中Logstash的Grok插件就像瑞士军刀能把非结构化的日志文本拆解成结构化数据。实测在USG6500设备上单条日志通过Grok解析后能提取出12个关键字段包括五元组信息、策略动作和时间戳。这比用Excel手动分析效率提升至少20倍。2. 环境准备与日志采集2.1 基础环境搭建我的实验环境采用三台CentOS 7.9服务器配置如下组件版本资源配置备注Elasticsearch7.17.34核8G需要调整JVM堆内存参数Logstash7.17.32核4G安装grok插件Kibana7.17.32核4G需配置Elasticsearch连接注意华为USG防火墙默认使用UDP 514端口发送syslog需要在防火墙上放行该端口。2.2 防火墙日志配置登录USG防火墙Web界面关键配置步骤如下进入系统 日志 日志主机新增日志主机地址填写Logstash服务器IP日志类型选择会话日志格式选择原始格式非华为专有格式执行以下命令检查日志接收情况# 在Logstash服务器验证UDP 514端口 sudo tcpdump -i eth0 port 514 -vv3. Logstash Grok深度解析3.1 日志样本分析典型USG防火墙日志示例Apr 29 2021 08:30:52 USG-FW01 %%01POLICY/6/POLICYPERMIT(l):vsyspublic, protocol6, source-ip192.168.1.100, source-port49187, destination-ip10.0.0.1, destination-port445, time2021/4/29 16:30:52, source-zonetrust, destination-zoneuntrust这条日志包含三个时间戳系统时间、策略时间、会话时间需要特别注意时区统一问题。我在实际项目中就遇到过因时区不一致导致的时间轴错乱。3.2 Grok模式开发经过多次调试最终可用的Grok模式如下filter { grok { match { message (?syslog_time%{MONTH}\s%{MONTHDAY}\s%{YEAR}\s%{TIME}) %{HOSTNAME:firewall_name} %%01POLICY/6/%{WORD:policy_action}\(l\):vsys%{WORD:vsys}, protocol%{INT:protocol}, source-ip%{IP:src_ip}, source-port%{INT:src_port}, destination-ip%{IP:dst_ip}, destination-port%{INT:dst_port}, time(?policy_time%{YEAR}/%{MONTHNUM}/%{MONTHDAY}\s%{TIME}), source-zone%{WORD:src_zone}, destination-zone%{WORD:dst_zone}(, application-name%{WORD:app_name}|) } } # 协议号转名称 translate { field protocol destination protocol_name dictionary { 6 TCP 17 UDP 1 ICMP } } }踩坑提醒华为防火墙不同版本日志格式可能有细微差异建议先用Kibana的Grok Debugger测试。4. Kibana可视化实战4.1 索引模式创建在Kibana中进入Stack Management 索引模式创建名为firewall-*的索引模式时间字段选择policy_time4.2 关键仪表盘配置我常用的五个可视化组件流量拓扑图使用Maps功能将src_ip和dst_ip作为地理坐标端口分布热力图用Lens展示dst_port的分布情况策略动作统计饼图显示POLICYPERMIT和POLICYDENY比例异常流量检测设置阈值告警当同一源IP在1分钟内访问超过50个不同端口时触发时间序列分析折线图展示每小时流量趋势// 示例检测扫描行为的告警规则 { query: { bool: { must: [ { range: { timestamp: { gte: now-1m } } }, { term: { protocol_name: TCP } } ] } }, aggs: { src_ip_count: { terms: { field: src_ip, size: 10 }, aggs: { unique_ports: { cardinality: { field: dst_port } } } } } }5. 高级技巧与故障排查5.1 性能优化方案当处理每秒超过1000条日志时需要调整以下参数# logstash.yml pipeline.workers: 4 pipeline.batch.size: 125 queue.type: persisted5.2 常见问题处理字段缺失检查Grok模式是否匹配日志实际格式时间戳解析错误使用date过滤器统一时间格式filter { date { match [policy_time, yyyy/MM/dd HH:mm:ss] target timestamp } }日志量暴增在防火墙上设置日志过滤策略只收集关键事件在实际项目中我曾用这套方案发现过内网主机被植入挖矿程序的异常连接。通过分析目的端口为3333的TCP连接最终定位到三台被入侵的服务器。

更多文章