为什么我的 iptables 规则不起作用?

为什么我的 iptables 规则不起作用?

我的 VPS 上有两个接口:eth0eth0:0。我想eth0:0使用 iptables 阻止端口 80 上的传入数据包。我尝试了这个,但它不起作用:

iptables -A INPUT -i "eth0:0" -p tcp --destination-port 80 -j DROP

如果我更改eth0:0eth0它可以正常工作。问题是什么?

答案1

短篇故事:您的做法是正确的(根据您对问题的评论)。

长话短说:在 Linux 上,foo:bar当我们需要将多个网络设置分配给“foo”接口时,例如让它在同一线路上的多个子网上做出响应,则称为“foo”的网络“设备”是一个别名。

这是一种笨拙的方法,并且与启动不一致。对于 IPv6,分配给接口 eth0 的所有地址都一起列在 eth0 条目下。有一种更现代的方法可以做到这一点(通过命令ip addr)。

您可以发现别名接口,因为它们的名称中有一个冒号:,冒号左侧的部分是现有的接口名称,并且当您发现别名接口时,接口节ifconfig非常短。它还HWaddr应该与“父”接口相同。它们也不会被列在/proc/net/dev.如果你要说ip addreth0:0将显示为接口的第二个地址eth0。 (查找以 开头的缩进线inet

别名及其父级共享许多设置和字段,因为它们共享物理层。内核并不将它们视为完全独立的接口。其一,流量出现在家长接口,而不是别名。您可能已经注意到别名甚至没有数据包/字节计数器!

如果您需要在别名接口上嗅探流量、防火墙等,则必须使用其父接口。由于别名与其父别名的唯一区别在于其 IPv4 设置,因此匹配别名上的流量的唯一方法是使用这些 IP 设置。使用iptables,您可以匹配别名的 IPv4 地址,就像您在答案的注释中所做的那样。

相关内容