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

iptables with docker blocking incoming traffic, allowing outgoing traffic

我是 运行 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 上的传出流量?

您可以为 DOCKER-USER 链指定规则,以 docker 接口为目标,-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命令找回。