我的目标是将访问docker容器的权限限制在几个公共IP地址上。 有一个简单的,可重复的过程来完成我的目标? 在使用Docker的默认选项时只理解iptables的基础知识,我发现它非常困难。
我想运行一个容器,使其对公众互联网可见,但只允许select主机的连接。 我期望设置REJECT默认的INPUT策略,然后只允许来自我的主机的连接。 但是Docker的NAT规则和链路阻碍了我的INPUT规则。
鉴于以下假设,有人可以提供一个如何实现我的目标的例子吗?
docker run -d -p 3306:3306 mysql 我很高兴将容器绑定到本地ip地址,但需要指导如何正确设置iptables转发规则,从而避免docker进程和主机重新启动。
谢谢!
答案似乎在Docker的文档在https://docs.docker.com/articles/networking/#the-world
Docker的转发规则默认允许所有外部源IP。 要仅允许特定的IP或networking访问容器,请在DOCKERfilter链的顶部插入否定规则。 例如,要限制外部访问,只有源IP地址8.8.8.8才能访问容器,可以添加以下规则:
iptables -I DOCKER -i ext_if ! -s 8.8.8.8 -j DROPiptables -I DOCKER -i ext_if ! -s 8.8.8.8 -j DROP
我最终做的是:
iptables -I DOCKER -i eth0 -s 8.8.8.8 -p tcp --dport 3306 -j ACCEPT iptables -I DOCKER -i eth0 -s 4.4.4.4 -p tcp --dport 3306 -j ACCEPT iptables -I DOCKER 3 -i eth0 -p tcp --dport 3306 -j DROP
我没有触及--iptables或--icc选项。