限制与iptables的docker集装箱外部连接的步骤?

我的目标是将访问docker容器的权限限制在几个公共IP地址上。 有一个简单的,可重复的过程来完成我的目标? 在使用Docker的默认选项时只理解iptables的基础知识,我发现它非常困难。

我想运行一个容器,使其对公众互联网可见,但只允许select主机的连接。 我期望设置REJECT默认的INPUT策略,然后只允许来自我的主机的连接。 但是Docker的NAT规则和链路阻碍了我的INPUT规则。

鉴于以下假设,有人可以提供一个如何实现我的目标的例子吗?

  • 在eth0上主机公共IP为80.80.80.80
  • 在eth1上主机私有IP 192.168.1.10
  • docker run -d -p 3306:3306 mysql
  • 阻止除主机4.4.4.4和8.8.8.8之外的与主机/容器3306的所有连接

我很高兴将容器绑定到本地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 DROP iptables -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选项。