网络设备日志:防火墙、交换机、路由器的格式与采集归纳
大家好,我是老宿。
干安全运维这几年,我有个特别深的感触:网络设备的日志,是整个审计体系里最容易「灯下黑」的一块。你想想看,服务器日志大家盯得紧,可防火墙、交换机、路由器这些默默转发流量的设备,往往被忽略了。
但恰恰是这些设备的日志,藏着网络攻击的第一手证据。今天我们就来聊聊,怎么把这几种主流网络设备的日志看懂、收好、用起来。
防火墙日志: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 日志默认进入 /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、utmsubtype: 子类型,如 forward、sniffersrcip/dstip: 源/目标 IPsrcport/dstport: 源/目标端口action: 处理动作,如 accept、deny、droppolicyid: 命中哪条策略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"
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
日志采集归纳的实战方案
设备多了,日志格式五花八门。怎么才能把它们收拢到一起、形成统一的审计数据?我给大家一个经过验证的思路:先分再合。
第一步:确定采集通道
能走 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:保留原始日志
IN=eth0 对应到 inbound_iface,FortiGate 的 srcintf="port1" 也对应到同一字段。这样上层分析时只需查一张表。
第三步:过滤掉「噪音」日志
我见过最夸张的环境,每天日志量 10TB,其中 80% 是交换机端口的 UP/DOWN。这些日志不是没用,但全部入库会撑爆存储。我的做法是:
- 常规状态变化(如端口 UP)降低日志级别,只保留摘要
- 异常事件(如端口 flapping、ACL deny 数量激增)必须全量保留
- 在汇聚层做流量整形,限制单台设备的最大日志速率
FortiGate: set log-rate-limit 2000。
第四步:建立日志关联索引
单台设备的日志只能告诉你「发生了什么」。但把防火墙、交换机、路由器的日志串起来,你就能还原出「事件的全貌」。举个例子:
- 防火墙日志显示:
10.0.0.1:54321 → 203.0.113.10:443 action=deny - 交换机日志显示:
10.0.0.1 连接的端口在 10:22:33 突然从 UP 变 DOWN - 路由器日志显示:
203.0.113.10 在 10:22:35 的路由撤回
你看,这三个日志一关联,就能推断出「有人在针对目标发起攻击,但触发了防火墙规则被阻断。攻击源不仅扫了 443,还尝试过搞垮交换机端口,最后目标路由撤了」。这种跨设备的关联分析能力,才是多源日志汇聚的真正价值。