如何隔离连接到同一座网桥的两个容器?

如何隔离连接到同一座网桥的两个容器?

我有一些LXD 容器这些接口绑定到一个桥接器(默认桥接器lxdbr0或其他桥接器,无所谓)。主机本身还有另外两个接口,一个接口最终将其连接到 Internet,另一个接口连接到 WiFi AP。

数据流由以下人员协调:岸墙(建立适当的iptable规则)。

我设置的限制对于容器与 Internet 或 AP 网络(以及 AP 网络与 Internet 之间的)之间的流量非常有效。我遇到的问题是集装箱间运输似乎不受规则的影响iptable即使REJECT对容器 IP 有一个简单的策略,我仍然能够 ping 另一个容器的 IP(而不是其他任何东西,包括它自己的网关 - 这是预期的)。

我的理解是桥接器本身在 ISO/OSI 第 2 层上工作。在这种情况下,防火墙不会影响流量。

同时,它有一个 IP,这是容器的网关(容器都有一个来自同一10.20.30.0/24网络的地址,10.20.30.254即网桥的 IP)。由于这是第 3 层通信,流量不应该通过吗iptables

答案1

不要使用桥接器,而是使用路由器lxc 网络中的模式。桥接器将所有连接到它的 veth NIC 连接在一起,就像物理网络集线器一样。

如果您像这样在容器中创建 NIC。

lxc.net.0.veth.pair = vethXX
lxc.net.0.veth.mode = router

每个 NIC 都是独立的。

每个容器都需要自己的子网,通常 lxc 容器共享 10.0.3.X,但在这种模式下,每个容器都需要一个子网。

现在,如果您确实想允许容器之间的特定流量,您可以像 veth 接口是物理 NIC 一样路由流量,并且 nftables 防火墙将会起作用。

像这样的 lxc 之间的流量可以使用向前

table ip filter {
    chain forward {
        type filter hook forward priority filter; policy drop; # defailt to block everything
                    
        # allow only what you want, e.g. ping
        icmp type echo-request accept
        icmp type echo-reply accept
    }
}

lxcbr0如果您使用路由器模式,则可以关闭桥接。

答案2

如果你有很多容器,这不是一个理想的答案,但你可以使用岸墙主机文件中每个主机都有一个条目,例如 /32 网络,如下所示:

在/etc/shorewall/接口:

#ZONE  INTERFACE   OPTIONS
...
lxc    lxc-br0     ...,routeback,bridge

在 /etc/shorewall/区域:

#ZONE       TYPE       OPTIONS         IN          OUT
fw          firewall
lxc         ipv4
lxc12:lxc   ipv4

在/etc/shorewall/主机:

#ZONE     HOSTS                              OPTIONS
lxc12     lxc-br0:192.168.0.12/32

在/etc/shorewall/规则中:

######################################################################################################################################################################################################
#ACTION         SOURCE          DEST            PROTO   DEST    SOURCE          ORIGINAL        RATE            USER/   MARK    CONNLIMIT       TIME            HEADERS         SWITCH          HELPER
#                                                       PORT    PORT(S)         DEST            LIMIT           GROUP
#Allow host web server to proxy requests to the container
Web(ACCEPT)     $FW     lxc12

相关内容