阻止docker访问特定IP

时间:2015-09-10 22:26:05

标签: amazon-web-services docker google-compute-engine

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

我是否还需要使用--icc=false--iptables=false配置我的docker守护程序?

2 个答案:

答案 0 :(得分:4)

最后这个工作,您需要在主机上添加此规则:

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

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

$ 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而异。

答案 1 :(得分:1)

我建议对接受的答案进行以下修改:

sudo iptables \
        --insert DOCKER-USER \
        --destination 169.254.169.254 \
        --jump REJECT

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

来源: