我正在 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 上的传出流量?
答案 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
命令检索它。