如何在两个网络命名空间之间设置防火墙?

如何在两个网络命名空间之间设置防火墙?

因此,我创建了一个名为客户端的网络命名空间和另一个名为服务器的命名空间。我还创建了虚拟以太网来连接它们。

ip netns add client
ip netns add server

ip link add v-client type veth peer name v-server

然后我把它们连接起来

ip link set v-client netns client
ip link set v-server netns server

我为它们分配了 IP 并进行设置:

ip netns exec client ip addr add 192.0.2.0/24 dev v-client
ip netns exec server ip addr add 192.0.2.128/24 dev v-server
ip netns exec client ip link set v-client up
ip netns exec server ip link set v-server up

到目前为止一切顺利。我想要做的是在两者之间放置一个防火墙。例如,如果客户端尝试 ping 服务器,防火墙将不允许它。我希望防火墙作为一个单独的命名空间。我想要一个名为防火墙的第三个网络命名空间,它控制服务器和客户端之间的流量。我该如何实现这一点?

答案1

您需要为每个命名空间单独创建防火墙规则,就像为它们创建网络接口一样。每个命名空间都有自己的防火墙规则,例如:

ip netns exec server iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip netns exec server iptables -P INPUT DROP
ip netns exec server iptables -A INPUT -p icmp -j DROP

为了使此更改永久生效,您可以使用 systemd 服务或其他启动脚本:

/sbin/ip netns exec server iptables-restore /etc/iptables.server.rules

但在此之前您需要保存防火墙规则:

ip netns exec server iptables-save /etc/iptables.server.rules

相关内容