阻止Docker访问特定IP

Mat*_*tyB 4 amazon-web-services google-compute-engine docker

我希望我的EC2实例具有基于IAM的权限,但不希望该实例上的Docker容器具有相同的权限。我认为阻止访问魔术IP应该足够了169.254.169.254。运行是否足够: iptables -I DOCKER -s 169.254.169.254 -j DROP

我还需要使用--icc=false或配置我的docker守护进程--iptables=false吗?

Ben*_*gar 9

我建议对已接受的答案进行以下变体:

sudo iptables \
        --insert DOCKER-USER \
        --destination 169.254.169.254 \
        --jump REJECT
Run Code Online (Sandbox Code Playgroud)

原因是上面的命令将规则添加到了链中,并且DOCKER-USER保证 Docker 不会修改该规则。

资料来源:


fot*_*kis 7

终于成功了,您需要在主机上添加以下规则:

1)当出站169.254.169.254端口80或443 出站时丢弃docker bridge数据包。

sudo iptables -I FORWARD -i docker0 -d 169.254.169.254 \
  -p tcp -m multiport --dports 80,443 -j DROP
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试在容器内部进行连接:

$ 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
Run Code Online (Sandbox Code Playgroud)

到特殊IP的连接仍然可以在主机上进行,但不能在容器内部进行。

注意:我的用例适用于Google Compute Engine,可防止Docker容器访问上的元数据服务器169.254.169.254,同时仍然允许针对同一IP的DNS和其他查询。您的里程可能在AWS上有所不同。