如果数据包与 Shorewall 策略匹配,我可以记录该数据包吗(例如使用 tcpdump)?

如果数据包与 Shorewall 策略匹配,我可以记录该数据包吗(例如使用 tcpdump)?

假设我有一个策略文件,例如

fw         net    ACCEPT
net        fw     DROP

trusted    fw     ACCEPT
trusted    net    ACCEPT

untrusted  fw     DROP*
untrusted  net    ACCEPT

all        all    REJECT

我想要做的是将来自不受信任网络的所有发往防火墙的流量(标有 *)发送到数据包捕获实用程序(如 tcpdump 或 tshark)进行分析。

似乎QUEUE 或 NFQUEUE 操作可能会奏效,或者我可以使用行动... 但是我还没有玩过 Shorewall 的任何一个组件,所以我不确定如何使用它们。

答案1

我不知道如何使用 shorewall,但您可以手动添加规则来通过 NFLOG 和 wireshark 捕获来自“不受信任”的流量。这里是如何操作的链接。

http://wiki.wireshark.org/CaptureSetup/NFLOG

你需要改变“-m 所有者 --uid-所有者 1000“用你的规则部分来指出“不受信任”的来源。

答案2

从 risyasin 的回答中我能够弄清楚这一点。

首先,将日志目标作为 NFLOG(x)(而不是 info 或 warn)放在 shorewall 中。对于 netlink 组,x 是一个介于 1 和 32 之间的整数。

现在,使用 tcpdump 或 dumpcap 捕获数据包,并在 nflog:x 接口上捕获。将数据包写入 pcap。

pcap 格式不正确 - 我不确定为什么,但数据包会带有一些 ASCII 日志信息,以及我尚未解码的其他字段。但解析和过滤 pcap 并纠正它相对容易。

import dpkt
r = dpkt.pcap.Reader(open(infile,'r'))
w = dpkt.pcap.Writer(open(outfile,'wb'))
for ts, pkt in r:
    e = dpkt.ethernet.Ethernet()
    e.data = dpkt.ip.IP(pkt[124:])
    w.writepkt(e, ts)
r.close()
w.close()

相关内容