阻止 docker 访问特定 IP
Block docker access to specific IP
我希望我的 EC2 实例具有基于 IAM 的权限,但不希望该实例上的 docker 容器具有相同的权限。我相信应该足以阻止对神奇 IP 169.254.169.254
的访问。 运行 是否足够:
iptables -I DOCKER -s 169.254.169.254 -j DROP
我是否还需要使用 --icc=false
或 --iptables=false
配置我的 docker 守护进程?
终于成功了,您需要在主机上添加这条规则:
1) 当出站到 169.254.169.254
端口 80 或 443 时丢弃 docker 网桥数据包。
sudo iptables -I FORWARD -i docker0 -d 169.254.169.254 \
-p tcp -m multiport --dports 80,443 -j DROP
现在,如果我尝试在容器内部进行连接:
$ sudo docker run -it ubuntu bash
root@8dc525dc5a04:/# curl -I https://www.google.com
HTTP/1.1 200 OK
root@8dc525dc5a04:/# curl -I http://169.254.169.254/
# <-- hangs indefinitely, which is what we want
与特殊 IP 的连接仍然可以从主机运行,但不能从容器内部运行。
注意:我的用例是针对 Google Compute Engine 并阻止 Docker 容器访问 169.254.169.254
上的元数据服务器,同时仍然允许针对同一 IP 的 DNS 和其他查询.您在 AWS 上的表现可能会有所不同。
我建议对已接受的答案进行以下修改:
sudo iptables \
--insert DOCKER-USER \
--destination 169.254.169.254 \
--jump REJECT
原因是上述命令将规则添加到 DOCKER-USER
链中,Docker 保证不会修改。
来源:
我希望我的 EC2 实例具有基于 IAM 的权限,但不希望该实例上的 docker 容器具有相同的权限。我相信应该足以阻止对神奇 IP 169.254.169.254
的访问。 运行 是否足够:
iptables -I DOCKER -s 169.254.169.254 -j DROP
我是否还需要使用 --icc=false
或 --iptables=false
配置我的 docker 守护进程?
终于成功了,您需要在主机上添加这条规则:
1) 当出站到 169.254.169.254
端口 80 或 443 时丢弃 docker 网桥数据包。
sudo iptables -I FORWARD -i docker0 -d 169.254.169.254 \
-p tcp -m multiport --dports 80,443 -j DROP
现在,如果我尝试在容器内部进行连接:
$ sudo docker run -it ubuntu bash
root@8dc525dc5a04:/# curl -I https://www.google.com
HTTP/1.1 200 OK
root@8dc525dc5a04:/# curl -I http://169.254.169.254/
# <-- hangs indefinitely, which is what we want
与特殊 IP 的连接仍然可以从主机运行,但不能从容器内部运行。
注意:我的用例是针对 Google Compute Engine 并阻止 Docker 容器访问 169.254.169.254
上的元数据服务器,同时仍然允许针对同一 IP 的 DNS 和其他查询.您在 AWS 上的表现可能会有所不同。
我建议对已接受的答案进行以下修改:
sudo iptables \
--insert DOCKER-USER \
--destination 169.254.169.254 \
--jump REJECT
原因是上述命令将规则添加到 DOCKER-USER
链中,Docker 保证不会修改。
来源: