禁止从docker集装箱访问局域网

我在Docker中使用Ubuntu容器运行Gentoo主机。 他们通过由Docker自动创build的桥进行通信。 我想丢弃所有可能来自容器的192.168.0.0/16stream量。

$sudo iptables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A FORWARD -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 443 -j ACCEPT -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i docker0 ! -o docker0 -j ACCEPT -A FORWARD -i docker0 -o docker0 -j ACCEPT $sudo iptables -t nat -S -P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -N DOCKER -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE -A DOCKER ! -i docker0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 172.17.0.2:443 

请让我知道如果我需要提供额外的信息

一种select是运行--icc=false ,防止任何容器与主机或其他容器通信,然后让容器通过链接到--link=container_name:alias相互通信。

你也可以用一个规则来操作iptables:

 iptables -A INPUT -i docker0 -d 192.168.0.0/16 -j DROP 

请记住,主机不会看到由icmp错误返回的丢包,所以在大多数情况下,REJECT可能更合适。

编辑:纠正规则阻止转发到其他主机:

 iptables -I FORWARD -i docker0 -d 192.168.0.0/16 -j DROP 

正如@DRC所说,使用

 iptables -I FORWARD -i docker0 -d 192.168.0.0/16 -j DROP 

尽pipe如此,这个规则将阻止你的本地networkingstream量到你的容器(连接将build立,但你的容器将无法响应)

要允许从本地networking连接到您的容器,您还必须添加

 iptables -I FORWARD -i docker0 -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -j ACCEPT