我目前有以下(大概是标准)设置:我有一台运行 Snort 的物理服务器。Snort 会按应有的方式记录到其日志文件中。这些文件由 barnyard2 跟踪,它会将流量写入 Snorby 的数据库。
Snort 和 barnyard2 作为 systemd 服务启动。现在,除了 Snort 持续分析网络流量之外,我还想每小时从不同的来源读取 pcap 文件,并将我的 Snort 规则应用于这些文件。
幸运的是,snort 直接提供了此功能。但是,使用snort -r foo.pcap
会启动一个新的 Snort 实例,这当然会导致一个新的日志文件。Barnyard2 识别这个新的日志文件并按预期处理来自 pcap 的数据=> 规则很好,适用于 pcap 流量。但是,作为服务运行的 Snort 实例的流量仍然写入旧文件中,并且由于存在较新的日志文件,barnyard2 不会处理这些数据包。
为了避免这种情况,我现在尝试使用tcpreplay
将 pcap 重播到我的外部接口,以便 Snort 服务可以像处理任何其他流量一样处理数据包。不幸的是,如果以这种方式重播数据包,Snort 不会匹配任何数据包。通过规则工作snort -r
应该证明它们是正确的。
使用时我是否必须重写任何内容,例如 MAC 地址tcpreplay
?可能值得一提的是,我必须使用参数重新编译 Snort,--enable-non-ether-decoders
以便它能够读取 pcap 流量。
答案1
解决方案是使用tcprewrite
通过 重写数据链路帧tcprewrite --dlt=enet
。问题似乎与需要使用 编译 Snort 的问题相同--enable-non-ether-decoders
。我认为它源于在观察到的环境中某处涉及虚拟化。