使用 iptables 的传出 mac 地址过滤器

outgoing mac address filter with iptbales

我希望这里有人可以帮助我解决这个问题,因为这可能是一个非常简单的设置。

我在 centos 8 上——禁用了 firewalld 并安装了 iptables-services。

我有一个物理接口和一个桥接几个 qemu kvm 来宾。我想阻止所有传出(传入很好)mac 地址,但我指定的地址除外,这样 kvm 来宾只有在分配了 mac 地址时才能访问网络。这样来自另一个 mac 地址的数据包就不会超出该物理网络接口。

我该怎么做?

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp35s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master bridge0 state UP group default qlen 1000
    link/ether XX:XX:XX:XX:f9:9b brd ff:ff:ff:ff:ff:ff
3: bridge0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether XX:XX:XX:XX:f9:9b brd ff:ff:ff:ff:ff:ff
    inet xxx.xxx.xxx.xxx/32 scope global noprefixroute bridge0
       valid_lft forever preferred_lft forever
    inet6 X::2/64 scope global noprefixroute
       valid_lft forever preferred_lft forever
    inet6 X:8fa/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

编辑: 我已经尝试过: iptables -A OUTPUT -m mac --mac-source 00:50:56:00:A5:8A -j ACCEPT 但它抛出以下错误: iptables v1.8.4 (nf_tables): RULE_APPEND failed (Invalid argument): rule in chain OUTPUT

您可以对所有选定的 kvms 以及您的主机执行此操作

iptables -A OUTPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT

iptables -A OUTPUT -m mac --mac-source yy:yy:yy:yy:yy:yy -j ACCEPT

...

然后放弃其他东西

iptables -A OUTPUT -j DROP

所以我能够弄清楚 iptables 可能是可行的,但我发现的所有相关内容都不适用于 OUTPUT 链。 对于我的情况,有一种更简单的方法,就是在 KVM.xml.

中的网卡上使用 nwfilter

这是我添加的:

  <filterref filter='clean-traffic'>
    <parameter name='IP' value='XXX.XXX.XXX.XXX'/>
  </filterref>