我的 Linux 机器上有两个混杂嗅探接口:
eth0 连接到外部 vlan 网桥,
eth1 连接到内部 vlan 网桥
使用 eth0 我可以嗅探我的“外部网络”上的所有流量 使用 eth1 我可以嗅探我的“内部网络”上的所有流量
然后我用 brctl (br0) 创建了一个网桥,并将两个接口添加到这个网桥。
现在我可以直接从 br0 嗅探 eth1 和 eth2 上出现的所有数据包,这样我就不必启动两个 snort 实例了。
我的问题是,现在出现在 eth0 上的 arp 和多播数据包被复制到 br0 并转发到 eth1。
有什么方法可以让这两个接口将所有数据包复制到 br0,但永远不允许 br0 转发任何数据包,也不允许 eth0 或 eth1 对它们做出响应?
答案1
根据其设计,Linux 桥接器的作用与普通的 NWay 以太网交换机完全相同。它保留自己的 ARP/MAC 地址表,并根据此表转发数据包。因此,与普通网络交换机一样,多播和 ARP 会发送到每个端口,无论其来源是什么。
为了防止这种行为,您应该设置一个防火墙,不要使用iptables
,它负责 OSI 模型中的第 3 层以上,而是ebtables
负责第 2 层流量。
假设您使用的是基于 Debian/Debian 的发行版,您可以执行:
apt-get install ebtables
apt-get install arptables
如需附加文档,请执行:
man 8 ebtables
以下是使用多播的简短示例ebtables
:
ebtables -A FORWARD -o eth0 --pkttype-type multicast -j DROP
ebtables -A OUTPUT -o eth0 --pkttype-type multicast -j DROP
ebtables -A FORWARD -o eth1 --pkttype-type multicast -j DROP
ebtables -A OUTPUT -o eth1 --pkttype-type multicast -j DROP
ebtables
作为学习实际复制语法的一个很好的起点iptables
,这里是官方文档:http://ebtables.sourceforge.net/documentation/docs.html