使用 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>
我希望这里有人可以帮助我解决这个问题,因为这可能是一个非常简单的设置。
我在 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>