2. 攻击溯源数据源采集:NetFlow/sFlow流量采集原理与部署,BGP-LS/TE数据采集,Syslog与SNMP Trap日志收集,PCAP全包捕获策略

做溯源分析,最怕什么?最怕数据不够。你想想看,攻击者都跑路了,你手里只有半截日志,那真是欲哭无泪。所以这一章,我重点聊聊数据源采集这件事。说白了,就是我们要在攻击发生之前,先把“摄像头”和“录音笔”都架好。

我个人习惯把数据源分成四类:流量元数据、路由状态数据、设备日志数据、全包证据数据。下面一个一个说。

2.1 NetFlow/sFlow:流量元数据采集

先讲NetFlow。这东西是思科搞出来的,后来成了事实标准。它的核心思想很简单:不抓包内容,只记录“谁在什么时候和谁通信,用了什么端口,发了多少字节”。

我遇到过一起DDoS溯源,攻击流量高达40Gbps,全包抓取根本不现实。但NetFlow帮了大忙——通过分析流记录,我很快锁定了源IP的分布规律,发现80%的流量来自三个C段。这就是元数据的价值。

NetFlow v5 vs v9 vs IPFIX:
  • v5:固定格式,字段少,不支持IPv6。老设备还在用,但我不建议新部署选它。
  • v9:模板化设计,灵活多了。支持IPv6、MPLS、BGP下一跳等。我现在大部分项目都用v9。
  • IPFIX:NetFlow v10,标准化版本。如果你要跨厂商互通,选它准没错。

sFlow呢?它是采样技术。NetFlow是“记录每一条流”,sFlow是“随机抓几个包看看”。采样率我一般设1:1024,流量大时甚至1:4096。精度会下降,但CPU开销小很多。

部署时有个坑:NetFlow的缓存超时时间。默认15分钟?太长了。攻击流可能几秒就结束了。我建议把active timeout设为60秒,inactive timeout设为15秒。这样能捕捉到短连接攻击。

# 思科设备NetFlow配置示例(v9版本)
ip flow-export version 9
ip flow-export destination 192.168.1.100 2055
ip flow-export source Loopback0
ip flow-cache timeout active 1
ip flow-cache timeout inactive 15
!
interface GigabitEthernet0/1
 ip flow ingress
 ip flow egress
我的经验:采集器建议用nfdump + nfsen组合。nfdump处理速度极快,100万条流查询只需几秒。nfsen的Web界面虽然老,但够用。

2.2 BGP-LS/TE:路由拓扑数据采集

溯源时,光知道流量从哪来还不够。你还得知道它经过了哪些路径。这就是BGP-LS(链路状态)和BGP-TE(流量工程)的用武之地。

BGP-LS说白了,就是把IGP(OSPF/IS-IS)的拓扑信息通过BGP广播出来。这样你可以在一个中心点看到整个网络的拓扑结构。我曾在一次跨国攻击溯源中,通过BGP-LS发现攻击流量绕过了三个AS,最终在第四个AS被清洗——这个路径信息,没有BGP-LS根本拿不到。

采集BGP-LS数据,我推荐用GoBGP或ExaBGP。GoBGP性能好,ExaBGP灵活。下面是我常用的ExaBGP配置:

# ExaBGP配置示例(采集BGP-LS)
process bgp-ls-collector {
    run /usr/bin/python3 /opt/exabgp/collector.py;
    encoder json;
}

neighbor 10.0.0.1 {
    router-id 10.0.0.2;
    local-address 10.0.0.2;
    local-as 65001;
    peer-as 65000;
    family {
        l3vpn ipv4 unicast;
        l3vpn ipv6 unicast;
        ls;
        flowspec ipv4;
    }
    capability {
        dynamic;
    }
}
注意:BGP-LS数据量可能很大。一个中型网络,拓扑变化频繁时,每秒可能有上千条更新。采集器要做好限速和过滤,否则数据库会炸。

BGP-TE呢?它关注的是流量工程路径。比如RSVP-TE隧道、SR-TE策略。这些信息能告诉你:为什么流量走了这条路径而不是那条。溯源时,这能帮你判断是不是有人恶意篡改了路径策略。

2.3 Syslog与SNMP Trap:设备日志收集

日志这东西,平时没人看,出事时恨不得把每一行都翻出来。Syslog和SNMP Trap就是两个最基础的日志通道。

Syslog:我建议用rsyslog或syslog-ng。别再用老旧的syslogd了,它不支持TCP、不支持TLS、不支持结构化日志。rsyslog可以做到:

  • 每秒处理百万级日志
  • 支持模板化输出(JSON格式最好)
  • 支持TLS加密传输
  • 支持过滤和路由(比如把BGP日志单独存一个文件)
# rsyslog配置示例(接收并分类存储)
module(load="imudp")
module(load="imtcp")

# 接收UDP和TCP日志
input(type="imudp" port="514")
input(type="imtcp" port="514")

# 按设备类型分类
if $fromhost-ip startswith "192.168.1." then {
    action(type="omfile" file="/var/log/network/core.log")
    stop
}

# BGP日志单独存放
if $msg contains "BGP" then {
    action(type="omfile" file="/var/log/network/bgp.log")
    stop
}

# 默认存储
*.* /var/log/network/all.log

SNMP Trap:它和Syslog不同。Syslog是设备主动“说”,SNMP Trap是设备主动“喊”。比如接口Down、CPU过载、BGP邻居断开,这些事件会通过Trap立刻通知你。

我曾经遇到一个案例:攻击者通过SNMP暴力破解,试图获取设备配置。幸好我部署了SNMP Trap监控,第一时间收到了认证失败的告警,及时封堵了源IP。嗯,这里要注意:SNMP v2c的社区字符串是明文传输的,一定要用v3。

避坑指南:我曾经把Syslog和Trap都发到同一个服务器,结果日志量太大,Trap被淹没了。后来我分开部署:Syslog用一台高吞吐服务器,Trap用一台低延迟服务器。效果很好。

2.4 PCAP全包捕获策略

最后说全包捕获。这是最“笨”的方法,也是最可靠的方法。全包意味着你保留了攻击的完整证据——从SYN包到RST包,一个不落。

但全包捕获有个大问题:存储。1Gbps的链路,一天下来就是10TB左右。所以必须要有策略:

策略 适用场景 存储需求 我的建议
全量捕获 合规要求、高安全等级 极高(10TB+/天) 仅保留7天,循环覆盖
采样捕获 日常监控、流量分析 中等(1TB/天) 采样率1:100,保留30天
触发式捕获 攻击响应、取证 低(按需) 配合IDS/IPS告警触发
元数据+全包混合 溯源分析最佳实践 可控 NetFlow记录元数据,全包只抓可疑流量

工具方面,我推荐tcpdump + Wireshark组合。tcpdump负责抓,Wireshark负责分析。但生产环境我更喜欢用Moloch(现在叫Arkime)。它支持分布式部署,能索引PCAP文件,支持全文搜索。你可以在几秒内找到某个IP在某个时间段的全部流量。

# tcpdump全包捕获示例(环形缓冲区)
# 每个文件1GB,保留10个文件,自动覆盖
tcpdump -i eth0 -s 0 -C 1000 -W 10 -w /data/pcap/traffic.pcap

# 配合BPF过滤,只抓特定流量
tcpdump -i eth0 -s 0 -C 1000 -W 10 \
  -w /data/pcap/suspicious.pcap \
  "host 10.0.0.1 or port 443 or port 22"
重要提醒:全包捕获涉及隐私和合规问题。你抓到的包里可能包含用户密码、信用卡号等敏感信息。一定要做好访问控制和脱敏处理。我一般会在采集层做匿名化,只保留IP和端口,不保留payload。

好了,数据源采集这部分就聊到这。四种方法各有优劣,实际项目中我通常是组合使用。NetFlow做宏观分析,BGP-LS看路径,Syslog/Trap盯事件,PCAP留证据。四者配合,溯源时才能游刃有余。

核心总结:
  • NetFlow/sFlow:轻量级,适合长期存储和趋势分析
  • BGP-LS/TE:路由级数据,适合路径溯源和拓扑分析
  • Syslog/SNMP Trap:事件驱动,适合实时告警和事后审计
  • PCAP全包:重量级,适合深度取证和攻击还原
攻击溯源数据源采集体系 数据源采集中心 NetFlow / sFlow 流量元数据采集 BGP-LS / BGP-TE 路由拓扑与流量工程数据采集 Syslog / SNMP Trap 设备日志与事件收集 PCAP 全包捕获 完整数据包证据留存 四种数据源协同工作:NetFlow做宏观分析,BGP-LS看路径 Syslog/Trap盯事件,PCAP留证据,四者缺一不可 数据源采集是攻击溯源的基础,没有数据,一切分析都是空谈
专注资料整理