阻止 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 保证不会修改。

来源: