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吗?
我建议对已接受的答案进行以下变体:
sudo iptables \
--insert DOCKER-USER \
--destination 169.254.169.254 \
--jump REJECT
Run Code Online (Sandbox Code Playgroud)
原因是上面的命令将规则添加到了链中,并且DOCKER-USER保证 Docker 不会修改该规则。
资料来源:
终于成功了,您需要在主机上添加以下规则:
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上有所不同。
| 归档时间: |
|
| 查看次数: |
1699 次 |
| 最近记录: |