我有一台前端机器。机器有 2 个 eth 卡。我想使用 netfilter queue 对数据包进行一些检查。
我这样设置 eth: ifconfig eth0 0.0.0.0 promisc up ifconfig eth1 0.0.0.0 promisc up
我想要一个像这样的 iptable 规则(仅示例): iptables -A INPUT -i eth0 -j LOG --log-prefix " eth0 packet "
但是数据包没有通过 iptables,因为它没有指向这个 MAC。Promisc 模式没有帮助。
我看到有一种方法可以为 PROMISC 添加 iptables 链,但需要编译...当数据包不是针对此 eth 时,有没有更简单的方法来使用 iptables 规则。
目前我通过在 2 eth 之间创建一个桥梁并将规则放在 FORWARD 上来绕过这个,但我确实想创建桥梁。
请记住,在与以太网交换机连接的网络上,即使网卡处于混杂模式,您也看不到大部分数据,除非您有带端口镜像的托管交换机。
实现您想要的一种方法是使用 arp 中毒工具,例如 Ettercap。然后您应该能够应用 netfilter 规则或 tcpdump 您需要的信息。
编辑 - 根据 OP 的要求提供更多详细信息:
从您的问题来看,您似乎希望窥探传递的网络流量并通过 iptables 传递它。
通过使用网桥,您可以通过坐在有趣的机器和它们的网关之间来实现这一点,物理上,但听起来您想以更被动的方式来做,因此您为什么要尝试在服务器上使用混杂模式NIC。正确的?(如果您不知道,混杂模式也允许您看到未寻址到您的 NIC 的以太网帧)
您遇到的问题是,以太网交换机的设计使其能够了解每个端口上的 MAC 地址,并使用它根据 MAC 地址将以太网帧“路由”到正确的端口。这是为了减少与以太网集线器相关的冲突(现在很少见)。因此,您只会看到发往或源自您的 NIC 的以太网帧,包括广播以太网帧,例如 ARP,但看不到外部流量。这是一件好事:)
大多数托管交换机(不是哑桌面交换机)允许您指定端口镜像,以便所有以太网帧都复制到特定端口,您可以在其中以混杂模式连接机器并使用 tcpdump/Wireshark 捕获“外部”以太网帧。
但是,这仍然不会让它们被 iptables 捕获。因此,您需要一种方法再次充当感兴趣的主机和它们的网关之间的以太网桥,但又不在物理路径中。输入 Ettercap,这是一个 arp 中毒工具。它通过发送“免费 arp”来欺骗您感兴趣的主机(和交换机)您的机器 MAC 地址现在拥有旧 IP 网关的 IP。有趣的机器会无意中将所有网关/默认路由的目标流量发送到您的机器。您的机器现在将通过其 IP 堆栈转发数据包,就好像它是网关一样。
这不起作用的地方是在交换机上启用了“端口安全”,这是一种常见的做法。这是通过阻止 IP 从一个以太网端口移动到另一个端口的无故 arps 来阻止 arp 中毒。
至于我,您似乎对自己的需求缺乏清晰的了解。这就是为什么您难以实施的原因。
主要问题不是 iptables 的“合适的链”,而是如何让流量流入盒子,然后如何用操作系统内核或用户空间处理它。
Bridge 是一种很自然的方式,但实际上我看不出
FORWARD
-chain(根据定义用于转发)如何帮助处理交换的流量。您当然必须转发此流量,这意味着您的 comp. 应该是该流量的路由器。如果你能以自然的方式管理它——那就去做吧。如果您没有这种可能性,我会说像proxy_arp机制这样的东西可能会有所帮助。
更新。: 我最近在重读LARTC,遇到了“ Pseudo-bridges with Proxy-ARP ”这让我意识到我的建议真的很合适。