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
命令找回。
我是 运行 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
命令找回。