带有 docker 的 iptables 阻止传入流量,允许传出流量

时间:2021-03-23 15:15:39

标签: docker iptables

我正在 ubuntu 机器上运行一个 dockerized 应用程序。这是一个测试环境,所以我想限制对几个 IP 地址的访问。我使用以下 iptables 规则:

iptables -I DOCKER-USER -p tcp --dport 80 -j REJECT
iptables -I DOCKER-USER -p tcp --dport 443 -j REJECT
iptables -I DOCKER-USER -p tcp --dport 3306 -j REJECT
iptables -I DOCKER-USER -s <my ip> -p tcp --dport 443 -j RETURN
iptables -I DOCKER-USER -s 172.18.0.0/16 -p tcp --dport 3306 -j RETURN

可以阻止所有流量,除了它还会阻止所有传出流量,例如渲染对其他系统的 api 调用毫无用处。如何阻止 443 上的所有传入流量,并同时允许 443 上的传出流量?

1 个答案:

答案 0 :(得分:1)

您可以指定针对 docker 接口的 DOCKER-USER 链的规则,其中 -i 作为输入,-o 作为输出。

iptables -I DOCKER-USER -i ${docker_interface} -p tcp --dport 443 -j REJECT
iptables -I DOCKER-USER -o ${docker_interface} -p tcp --dport 443 -j ACCEPT

而不是:

iptables -I DOCKER-USER -p tcp --dport 443 -j REJECT

如果您使用默认桥接配置运行 docker 容器,则 ${docker_interface} 应设置为 bridge。如果不是这种情况,请使用 docker network ls 命令检索它。