当 eth 处于 Promisc 模式时,是否有适合 iptables 的链?

当 eth 处于 Promisc 模式时,是否有适合 iptables 的链?

我有一台前端机器。机器有 2 个以太网卡。我想使用 netfilter 队列对数据包进行一些检查。

我这样设置 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 上来绕过这个问题,但我不想创建桥接。

答案1

请记住,在与以太网交换机连接的网络上,即使网卡处于混杂模式,您也不会看到大部分数据,除非您拥有带端口镜像的托管交换机。

实现目标的一种方法是使用 arp 中毒工具,例如 Ettercap。然后您应该能够应用 netfilter 规则或 tcpdump 所需的信息。

编辑-根据 OP 的要求提供更多详细信息:

从你的问题来看,你似乎希望监视通过的网络流量并将其通过 iptables 传递。

通过使用网桥,您可以通过物理上位于相关机器和其网关之间来实现这一点,但听起来您希望以更被动的方式实现这一点,这就是为什么您要尝试在 NIC 上使用混杂模式。对吗?(如果您不知道,混杂模式允许您查看未发送到您的 NIC 的以太网帧)

您遇到的问题是,以太网交换机的设计使其能够学习每个端口上的 MAC 地址,并根据 MA​​C 地址使用这些信息将以太网帧“路由”到正确的端口。这是为了减少与以太网集线器相关的冲突(如今您很少看到这种情况)。因此,您只会看到发往或源自您的 NIC 的以太网帧,包括广播以太网帧(例如 ARP),而不会看到外部流量。这是一件好事 :)

大多数托管交换机(不是哑桌面交换机)允许您指定端口镜像,以便所有以太网帧都复制到特定端口,您可以在该端口以混杂模式连接机器并使用 tcpdump/Wireshark 捕获“外部”以太网帧。

但是,这仍然不会让它们被 iptables 捕获。因此,您需要一种方法来再次充当感兴趣的主机和其网关之间的以太网桥,但又不实际处于路径中。输入 Ettercap,这是一个 arp 中毒工具。它通过发送“免费 arp”来欺骗您感兴趣的主机(和交换机),让您的机器 MAC 地址现在拥有旧 IP 网关的 IP。感兴趣的机器会在不知不觉中将所有网关/默认路由目的地流量发送到您的机器。您的机器现在将通过其 IP 堆栈转发数据包,就像它是网关一样。

如果交换机上启用了“端口安全”,这种方法就行不通了,这是一种常见的做法。这是通过阻止 IP 从一个以太网端口移动到另一个以太网端口的免费 arp 来阻止 arp 中毒。

答案2

在我看来,你似乎对自己的需求缺乏清晰的认识。这就是你在实施过程中遇到困难的原因。

主要问题不是 iptables 的“合适链”,而是如何让流量流入框然后如何使用操作系统内核或用户空间来处理它。

桥接是一种很自然的方式,但实际上我不知道如何将FORWARD-chain,其定义是转发,帮助处理交换流量。

你当然必须转发这些流量,这意味着你的计算机应该是这些流量的路由器。如果你能以自然的方式管理它——那就去做吧。如果你没有这样的可能性,我会说代理地址解析协议机制可能会有帮助。

更新。:我最近在重读 LARTC,遇到了“带有代理 ARP 的伪桥”这让我意识到我的建议确实合适。

相关内容