我在Docker中运行带有Ubuntu容器的Gentoo主机.它们通过Docker自动创建的桥进行通信.我想放弃可能来自容器的192.168.0.0/16的所有流量.
$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
如果我需要提供额外信息,请告诉我
最佳答案
一种选择是使用–icc = false运行docker,防止任何容器与其他容器通信,然后您可以通过将它们与–link = container_name:alias链接来让容器相互通信. This will not block the container from communicating with the host at this time though.
您还可以使用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