我的 VPS 上有两个接口:eth0
和eth0:0
。我想eth0:0
使用 iptables 阻止端口 80 上的传入数据包。我尝试了这个,但它不起作用:
iptables -A INPUT -i "eth0:0" -p tcp --destination-port 80 -j DROP
如果我更改eth0:0
为eth0
它可以正常工作。问题是什么?
答案1
短篇故事:您的做法是正确的(根据您对问题的评论)。
长话短说:在 Linux 上,foo:bar
当我们需要将多个网络设置分配给“foo”接口时,例如让它在同一线路上的多个子网上做出响应,则称为“foo”的网络“设备”是一个别名。
这是一种笨拙的方法,并且与启动不一致。对于 IPv6,分配给接口 eth0 的所有地址都一起列在 eth0 条目下。有一种更现代的方法可以做到这一点(通过命令ip addr
)。
您可以发现别名接口,因为它们的名称中有一个冒号:
,冒号左侧的部分是现有的接口名称,并且当您发现别名接口时,接口节ifconfig
非常短。它还HWaddr
应该与“父”接口相同。它们也不会被列在/proc/net/dev
.如果你要说ip addr
,eth0:0
将显示为接口的第二个地址eth0
。 (查找以 开头的缩进线inet
)
别名及其父级共享许多设置和字段,因为它们共享物理层。内核并不将它们视为完全独立的接口。其一,流量出现在家长接口,而不是别名。您可能已经注意到别名甚至没有数据包/字节计数器!
如果您需要在别名接口上嗅探流量、防火墙等,则必须使用其父接口。由于别名与其父别名的唯一区别在于其 IPv4 设置,因此匹配别名上的流量的唯一方法是使用这些 IP 设置。使用iptables
,您可以匹配别名的 IPv4 地址,就像您在答案的注释中所做的那样。