使用 iptables 对特定主机之间的流量进行速率限制(基于其 MAC)

使用 iptables 对特定主机之间的流量进行速率限制(基于其 MAC)

我设置了一个由以下基于 Linux 的机器组成的简单隔离网络(简化示例):Node1<---->Router<---->Node2 路由器的 eth0 与 Node1 的 eth0 相连。路由器的 eth1 与 Node2 的 eth0 相连。

我想根据节点 1 和节点 2 的 MAC 地址限制它们之间的流量速率,例如,限制为 150 KBps。我阅读了 iptables 的手册页,确实看到了“--limit”选项,但找不到结合流量限制规则指定源和目标 MAC 地址的方法。

用简单的英语来说,该规则就是“将 MAC_Address_1(对于 Node1)和 MAC_Address_2(对于 Node2)之间的所有流量限制为最大速率 150 KBps”。

可以使用 iptables 来完成吗?

答案1

不,不能使用 iptables 来完成。答案在于命令的名称以及您要执行的操作。

OSI 模型,MAC 地址属于数据链路层。这意味着诸如 IEEE 802.3(以太网)之类的协议具有 MAC 地址的概念,但诸如 IPv4 之类的协议则没有。数据链路层协议可以被认为是传输“帧”。

注意,其中iptables包含“IP”,即 Internet 协议。这是网络层的协议,比数据链路层高一层。网络层协议可以被认为是传输“数据包”。

由于协议像堆栈一样相互叠加,因此只有较低级别的协议才能直接影响较高级别的协议的行为,而反过来则不行。因此,在 IP 层上运行的工具不可能直接影响在以太网 (802.3) 层上运行的硬件设备的行为。

如果您了解 HTTP,则可以这样想。如果有人问您“我如何仅使用 HTTP 通过 TCP 端口 6790 发送任意数据?”,您会如何回答?答案是不能——首先,在 HTTP 协议运行时,TCP 端口已经确定。其次,HTTP 协议具有强制性标头和结构元素,如果不违反标准,则无法删除这些标头和结构元素。因此,只要您说“HTTP”,您就是指在预定端口上的现有 TCP 套接字内进行操作,并且您必须遵守 HTTP 的协议规则。

IP 也是如此。一旦您处理 IP 堆栈中的逻辑地址,您就无法“深入”物理层并执行低级操作。简单解释一下,设备可能具有有效的 IPv4 地址,但使用根本不使用 MAC 地址的数据链路层进行操作。例如,USB 协议可以设计为传输 IP 数据包,但它没有“以太网”或“帧”的概念,因此它没有 MAC 地址或实现 IEEE 802.3 标准。

你需要的是ebtables ebtables将允许您在以太网帧层。您需要确保所有要防火墙的设备都与执行防火墙的计算机有直接以太网连接,否则这将不起作用。如果您的任何设备根本不使用以太网,那么您就倒霉了。

答案2

可以使用 iptables 来实现:

iptables 可以根据源 mac 地址进行匹配,这样--mac-source就解决了一半的问题。另一半问题比较棘手,因为 iptables 无法获取目标 mac 地址。不过,我们可以通过连接跟踪来解决这个问题。

我建议从简单的事情开始这个问题如果只有一个 mac 地址,那么我们可以处理两个。

首先,创建用于速率限制的 tc 类:

rate=$[150*8]
for if in eth0 eth1 ; do
  tc qdisc add dev $if root handle 1: htb
  tc class add dev $if parent 1: classid 1:1 htb rate ${rate}kbit ceil ${rate}kbit prio 2
  tc qdisc add dev $if parent 1:1 handle 1: sfq perturb 10
done


用特定的位标记来自每个 mac 地址的连接:

mac1=11:22:33:44:55:66
mac2=12:34:56:78:9a:bc
iptables -t mangle -A PREROUTING -m state --state NEW -m mac --mac-source $mac1 -j CONNMARK --or-mark 0x1
iptables -t mangle -A PREROUTING -m state --state NEW -m mac --mac-source $mac2 -j CONNMARK --or-mark 0x2


如果两个位都设置了,我们就知道这是 mac1 <-> mac2,对数据包进行分类以进行速率限制:

iptables -t mangle -A POSTROUTING -m state --state ESTABLISHED,RELATED -m connmark --mark 0x3 -j CLASSIFY 1:1

相关内容