网络设备日志:防火墙、交换机、路由器的格式与采集归纳

大家好,我是老宿。

干安全运维这几年,我有个特别深的感触:网络设备的日志,是整个审计体系里最容易「灯下黑」的一块。你想想看,服务器日志大家盯得紧,可防火墙、交换机、路由器这些默默转发流量的设备,往往被忽略了。

但恰恰是这些设备的日志,藏着网络攻击的第一手证据。今天我们就来聊聊,怎么把这几种主流网络设备的日志看懂、收好、用起来。

防火墙日志:iptables vs Fortinet

防火墙是网络的第一道防线,它的日志就是「谁在敲门」的记录。我个人习惯把防火墙日志分成两类:开源的和商业的。

1. iptables 日志格式

iptables 是 Linux 内置的防火墙工具,它的日志通过内核的 LOG 目标输出到 syslog。默认格式看着有点「原始」,但信息量很全。

我在项目中遇到过一个场景:某台服务器被频繁扫描,查系统日志找不到源头。后来一看 iptables 的 LOG 记录,才发现是外网 IP 在持续探测 SSH 端口。

典型的 iptables 日志长这样:

IN=eth0 OUT= MAC=00:0c:29:a1:b2:c3:00:50:56:80:12:34:08:00
SRC=192.168.1.100 DST=10.0.0.5 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=54321
PROTO=TCP SPT=54321 DPT=22 WINDOW=14600 RES=0x00 SYN URGP=0

字段说明对照表:

字段 含义 典型值
IN/OUT 入站/出站网卡 eth0, eth1, lo
SRC 源 IP 地址 192.168.1.100
DST 目标 IP 地址 10.0.0.5
SPT 源端口 54321
DPT 目标端口 22
PROTO 传输层协议 TCP, UDP, ICMP
SYN, ACK TCP 标志位 SYN, ACK, RST
⚠️ 曾经踩过的坑:iptables 默认的 LOG 输出不包含时间戳。你需要配合 rsyslog 在日志行前面补充时间,否则后续做时间线分析时会很痛苦。

采集方式:iptables 日志默认进入 /var/log/messages 或 /var/log/syslog。我个人习惯单独配置一个日志文件:

# /etc/rsyslog.d/iptables.conf
:msg, contains, "IN=" -/var/log/iptables.log
:msg, contains, "IN=" ~

2. Fortinet(FortiGate)日志格式

FortiGate 是商业防火墙的「老面孔」了。它的日志格式比 iptables 规整得多,但字段巨多,刚开始看容易晕。我记得第一次接管 FortiGate 时,光一个流量日志就上百个字段。

核心字段清单:

  • type: 日志类型,如 traffic、event、utm
  • subtype: 子类型,如 forward、sniffer
  • srcip/dstip: 源/目标 IP
  • srcport/dstport: 源/目标端口
  • action: 处理动作,如 accept、deny、drop
  • policyid: 命中哪条策略
  • appid: 应用识别结果
  • sentbyte/rcvdbyte: 发送/接收字节数

FortiGate 支持 Syslog、CEF 和 JSON 三种输出格式。我个人强烈推荐 JSON 格式,解析起来省心得多。

# FortiGate Syslog 典型示例
Jul 15 10:22:33 192.168.0.1 date=2024-07-15 time=10:22:33 devname="FGT-01"
devid="FG100C3K1234567" logid="0000000013" type="traffic" subtype="forward"
level="notice" vd="root" srcip=10.10.1.50 srcport=55555 srcintf="port1"
dstip=203.0.113.10 dstport=443 dstintf="port2" poluuid="abc-def-123"
policyid=12 action="deny" proto=6 app="SSL"
💡 一个小技巧:FortiGate 的 logid 字段很重要。比如 0000000013 是流量日志,0000000020 是事件日志。用这个字段做过滤,比写一串关键词正则要快得多。

交换机与路由器日志

交换机、路由器的日志,说白了就是「网络拓扑的体检报告」。链路状态变化、端口 UP/DOWN、STP 拓扑变更……这些信息对于故障排查和入侵溯源来说,价值一点不比防火墙日志低。

常见日志类型:

日志类型 含义 举例
Link Status 端口物理状态变化 GigabitEthernet0/1, changed state to down
STP 生成树拓扑变更 topology change detected
OSPF/BGP 路由协议邻居变化 Neighbor Down: Dead timer expired
ACL 访问控制列表命中 list 101 denied tcp 10.0.0.1 -> 10.0.0.2 eq 80

采集方式上,我建议使用 Syslog 将所有网络设备的日志集中发送到一个日志服务器。配置模板如下:

# Cisco IOS 配置示例
logging 192.168.10.100
logging trap informational
logging source-interface Loopback0

# 华为 VRP 配置
info-center loghost 192.168.10.100
info-center source default channel 2 log level informational
🌟 个人经验:采集网络设备日志时,一定要开启时间戳同步。NTP 没配好的交换机,日志时间能差好几个小时,溯源的时候直接抓瞎。我在项目初期吃过这个亏,后来就把 NTP 检查写进了设备上线的 SOP 里。
网络设备日志采集与归纳流程图 — 网络设备层 — 防火墙 (iptables/Fortinet) 交换机 (Cisco/Huawei) 路由器 (OSPF/BGP) — 日志采集层 — Syslog 服务 / rsyslog / syslog-ng 统一接收格式迥异的设备日志 — 日志汇聚解析层 — 日志解析引擎:字段提取 → 标准化 → 关联化 iptables 原始格式 / Fortinet JSON / Cisco Syslog → 统一字段模型 — 输出与应用层 — SIEM 告警分析 异常检测 + 事件关联 合规存储审计 日志留存 + 查询回溯 关键原则:所有设备必须开启 NTP 时间同步;日志格式差异由解析引擎统一处理,不强制源头修改。

日志采集归纳的实战方案

设备多了,日志格式五花八门。怎么才能把它们收拢到一起、形成统一的审计数据?我给大家一个经过验证的思路:先分再合。

第一步:确定采集通道

能走 Syslog 的都走 Syslog。FortiGate 和交换机路由器都是原生支持 Syslog 的。iptables 稍微特殊一点,需要通过 rsyslog 转发。

第二步:定义标准化字段模型

不管你日志长什么样,进入汇聚层之后统统映射成一套字段:

  • timestamp:统一为 ISO 8601 格式
  • device_ip:设备 IP
  • device_type:防火墙 / 交换机 / 路由器
  • src_ip / src_port
  • dst_ip / dst_port
  • protocol:TCP / UDP / ICMP
  • action:block / allow / drop
  • raw_message:保留原始日志
💡 我建议这样做:在日志解析引擎里写一个「格式映射表」——比如 iptables 的 IN=eth0 对应到 inbound_iface,FortiGate 的 srcintf="port1" 也对应到同一字段。这样上层分析时只需查一张表。

第三步:过滤掉「噪音」日志

我见过最夸张的环境,每天日志量 10TB,其中 80% 是交换机端口的 UP/DOWN。这些日志不是没用,但全部入库会撑爆存储。我的做法是:

  • 常规状态变化(如端口 UP)降低日志级别,只保留摘要
  • 异常事件(如端口 flapping、ACL deny 数量激增)必须全量保留
  • 在汇聚层做流量整形,限制单台设备的最大日志速率
⚠️ 避坑指南:我曾经接手过一个 FortiGate 日志爆炸的案例——某台设备每秒打出 5000+ 条 deny 日志,直接把 Syslog 服务器打挂了。后来排查发现是内网一台扫描器在跑漏洞。如果你用 Syslog 接收日志,一定要在设备端配置日志限速:FortiGate: set log-rate-limit 2000。

第四步:建立日志关联索引

单台设备的日志只能告诉你「发生了什么」。但把防火墙、交换机、路由器的日志串起来,你就能还原出「事件的全貌」。举个例子:

  1. 防火墙日志显示:10.0.0.1:54321 → 203.0.113.10:443 action=deny
  2. 交换机日志显示:10.0.0.1 连接的端口在 10:22:33 突然从 UP 变 DOWN
  3. 路由器日志显示:203.0.113.10 在 10:22:35 的路由撤回

你看,这三个日志一关联,就能推断出「有人在针对目标发起攻击,但触发了防火墙规则被阻断。攻击源不仅扫了 443,还尝试过搞垮交换机端口,最后目标路由撤了」。这种跨设备的关联分析能力,才是多源日志汇聚的真正价值。