我们假设以下配置:一个宣布 IP 子网的路由器和一些基于 Proxmox 的 KVM 主机。每个基于 Proxmox 的虚拟化主机运行由客户管理的多个虚拟服务器,每个虚拟服务器分配一个或多个 IP。
我怎样才能防止(配置错误或恶意的)虚拟服务器宣布不属于其服务器的 IP?
我能想到的最好办法是使用iptables
防火墙规则来阻止除具有正确目标地址的传入流量和具有正确源地址的传出流量之外的任何流量。这应该可行(但我猜也会阻止任何广播流量,我认为这在该场景下是可以接受的)。但是,有没有更好的方法可以做到这一点(无需对路由器进行更改)?解决这个问题的常见做法是什么?
答案1
IPTables 无法阻止 DHCP 流量,因为它使用在防火墙之前与 IP 堆栈绑定的数据包过滤器。此链接虽然讲的是CentOS,但是原理是一样的。
如果您是这些主机上的另一个客户,请向您的提供商的 NOC 提交紧急支持单,指出网络上存在恶意 DHCP 服务器,他们应该(如果他们的工作做得正确)会很快处理。如果这些虚拟机正在运行在您的硬件上,而您无权访问虚拟机广播,我会禁用网络,并让客户通过控制台连接以解决问题。
答案2
在弄清楚这些iptables
并不合适之后,部分感谢上述 Christophers 提供的该信息,我阅读了一些资料ebtables
,只是为了弄清楚 Proxmox 已经内置了对防止 IP 欺骗的支持。
只需在 Proxmox 中将以下规则添加到每个虚拟机的防火墙设置中(参见/etc/pve/firewall/<VMID>.fw
文件),并与 IPv4 和 IPv6 配合使用:
[IPSET ipfilter-net0]
1.2.3.4
2f1:2:3:4::1
无论如何,这已经隐藏在官方文档中了:请参阅章节IP 集>标准 IP 设置 ipfilter-net*