两套日志描述同一条连接
代理日志记录的是应用层请求:谁访问了哪个域名或地址、请求了什么内容、返回了多大响应;防火墙日志记录的是网络层五元组:源地址、目的地址、端口与连接时长。同一条外联流量通常在两处都有痕迹,对账(把两边对齐)既能补全应用层信息,也能验证双方日志的完整性。
对不上先查三个原因
对不上是常态,常见原因有三个:一是时区差异,一侧本地时间一侧 UTC;二是 NAT 转换,防火墙记录的源地址是网关地址而不是内网主机地址;三是采样或聚合,部分设备在高负载时只记录部分会话。逐项排除之后再判断是否真的存在缺失。
基本信息
| 适用平台 | Linux/各类安全设备(代理服务、防火墙、边界设备) |
|---|---|
| 对账键 | 时间加源地址加目的地址或域名 |
| 校验字段 | 字节数、连接时长、状态码 |
| 常见代理日志 | 访问日志中的时间、客户端地址、目标域名、字节数、状态码 |
| 前提材料 | NAT 映射表、各设备的时区配置 |
典型使用场景
- 补全外联对象:代理日志给出域名,防火墙日志给出实际地址
- 验证日志完整性:某条连接在一侧缺失,说明存在日志丢包或过滤
- 核对数据量级:两边的字节数应当在同一数量级
- 定位异常外发:结合响应大小判断是否发生了大文件上传
- 为报告取证:说明结论同时被两类日志支撑
抽样对账
抽样对账
# 同一客户端地址在两套日志中的记录
grep '203.0.113.10' /var/log/squid/access.log 2>/dev/null | tail -5
grep '203.0.113.10' /var/log/firewall.log 2>/dev/null | tail -5
# 以时间加目的地址为键做并排比对(导出成两列后 diff 或表格比对)
awk '{print $1, $NF}' /var/log/firewall.log | tail -50 > /tmp/fw-tail.txt
awk '{print $1, $4}' /var/log/squid/access.log | tail -50 > /tmp/proxy-tail.txt
wc -l /tmp/fw-tail.txt /tmp/proxy-tail.txt
# NAT 环境下要用转换后的地址对账,先拿到映射表
# grep -i 'nat' /var/log/firewall.log | tail -5对不上的常见原因
| 原因 | 表现 | 处理方法 |
|---|---|---|
| 时区差异 | 整体偏移固定小时数 | 统一转 UTC 后重新比对 |
| NAT 转换 | 源地址显示为网关地址 | 索取映射表,用转换后地址对账 |
| 采样模式 | 条数明显少于另一侧 | 确认设备是否开启采样 |
| 日志落盘延迟 | 尾部记录缺失 | 等待落盘后重取或延长比对窗口 |
| 链路不在同一节点 | 部分流量绕过代理 | 补采对应节点日志 |
对账前先确认两套日志的字节数是否都包含或不包含协议头:一侧统计应用层负载,另一侧统计整包大小,两者天然不同,这不是日志错误。
一次对账只解决一个时间窗口:跨天或跨周的对账要按窗口分别进行,否则时区或配置变更会把结论带偏。