如何通过 nft 或 nftables 避免 IP 和 MAC 欺骗并阻止 Qemu/KVM 虚拟机所需的端口?

如何通过 nft 或 nftables 避免 IP 和 MAC 欺骗并阻止 Qemu/KVM 虚拟机所需的端口?

我有一台 Debian 11 服务器,它运行着多个 Qemu/KVM 虚拟机(不是使用libvirtd纯粹用 Qemu 命令创建的),我创建了一个网桥,每个 VM 都有自己的 TAP 设备连接到网桥。请注意,我知道libvirtd通过其网络过滤器可以轻松避免 MAC 欺骗,但我打算自己为 Qemu 创建的 VM 配置它。我的真实接口称为eth0,我的网桥称为br0,连接到此网桥的 VM TAP 设备之一称为vm0

我想要做的是首先使用 nftables 丢弃OUTPUT除 和 之外的eth0所有数据包,然后仅当源 MAC 地址与我在创建 VM 时自己分配的输出中看到的实际 MAC 地址相同时才允许我的 TAP 设备的数据包,换句话说,我想避免通过 进行 VM 上的 MAC 欺骗。此外,我想阻止 SMTP 端口。br0OUTPUTip -c anftables

我已经创建了一些iptablesebtables规则来实现我想要的结果,但是在了解到这nftables是一个可以替代它们两者的框架并且使用它来实现这样的结果更有效率之后,我想将这些规则迁移到nftables,但是,我无法理解如何编写这些规则。

我的规则如下:

iptables 规则,最初从这个帖子

iptables -t filter -A FORWARD -m physdev --physdev-in vm1 --physdev-is-bridged -j 0-out
iptables -t filter -A 0-out -m mac ! --mac-source <SOME_MAC_ADDRESS> -j DROP
iptables -t filter -A 0-out -s 0.0.0.0/32 -d 255.255.255.255/32 -p udp -m udp --sport 68 --dport 67 -j ACCEPT
iptables -t filter -A 0-out ! -s <SOME_IP_ADDRESS> -j DROP
iptables -t filter -A 0-out -j RETURN

ebtables 规则:

# OUTPUT rules

ebtables -A OUTPUT -p IPv4 -o vm0 --ip-protocol tcp --ip-sport 25 -j DROP
ebtables -A OUTPUT -p IPv4 -o vm0 --ip-protocol tcp --ip-sport 587 -j DROP
ebtables -A OUTPUT -p IPv4 -o vm0 --ip-protocol tcp --ip-sport 465 -j DROP
ebtables -A OUTPUT -p IPv4 -o vm0 --ip-protocol udp --ip-sport 25 -j DROP
ebtables -A OUTPUT -p IPv4 -o vm0 --ip-protocol udp --ip-sport 587 -j DROP
ebtables -A OUTPUT -p IPv4 -o vm0 --ip-protocol udp --ip-sport 465 -j DROP

# INPUT rules

ebtables -A INPUT -p IPv4 -i vm0 --ip-protocol tcp --ip-dport 25 -j DROP
ebtables -A INPUT -p IPv4 -i vm0 --ip-protocol tcp --ip-dport 587 -j DROP
ebtables -A INPUT -p IPv4 -i vm0 --ip-protocol tcp --ip-dport 465 -j DROP
ebtables -A INPUT -p IPv4 -i vm0 --ip-protocol udp --ip-dport 25 -j DROP
ebtables -A INPUT -p IPv4 -i vm0 --ip-protocol udp --ip-dport 587 -j DROP
ebtables -A INPUT -p IPv4 -i vm0 --ip-protocol udp --ip-dport 465 -j DROP

ebtables我知道出于基本相同的原因将两者结合使用iptables有点非正统,这是因为我对整个事情还不熟悉,而且我从多个来源学习编写了这些规则,然而,这是用来nftables统一它们的另一个原因。

任何帮助都值得感激,无论是规则集语法本身还是提示和指南。

提前谢谢了。

相关内容