限制网络访问但允许运行Docker容器的特定IP地址
我尝试使用泊坞窗容器,其中只有特定IP地址应该可以从正在运行的容器中访问。 iptables只能在priviliged docker容器中工作。但比用户可以自己更改iptables。 一个不错的想法是用dockerfile和iptables创建一个docker镜像。但是在创建图像时没有特权的选项。 任何人有一个想法如何解决这个问题?限制网络访问但允许运行Docker容器的特定IP地址
最佳
每个搬运工人容器都有一个唯一的IP地址,所以如果你想允许容器地址172.17.0.21,你希望它能够只访问地址8.8.8.8,你可以这样做:
iptables -A FORWARD -s 172.17.0.21 -d 8.8.8.8 -j ACCEPT
iptables -A FORWARD -s 172.17.0.21 -j REJECT --reject-with icmp-host-prohibited
也可以使用nsenter
命令来修改iptables规则内无特权的容器。例如,如果你开始一个码头工人的容器:
docker run --name example -d myimage
你可以这样获得PID是容器:
pid=$(docker inspect -f '{{.State.Pid}}' example)
然后用nsenter
到容器的网络命名空间中运行命令:
nsenter -t $pid -n iptables ...
这些命令将运行而不是在容器内运行的命令的功能限制。
使用nsenter添加iptables规则看起来不错。有关如何使这些规则在容器启动时持久化/恢复的任何提示? – 2018-02-13 22:20:28
我不认为有一个很好的方法来实现这一点。没有太多的努力,你可以做的最好的事情就是将所有必要的命令放在一个脚本中,这样你只需要运行一个命令就可以重新安装一些东西。 – larsks 2018-02-15 12:29:30
在主机上(在FORWARD链中)创建iptables,而不是在Docker容器中。 – larsks 2015-02-09 13:07:58
但是,我如何处理不同的码头实例不同的IP? – user1200794 2015-02-09 13:21:43