docker网络(二)-----------iptables

Docker和iptables

在linux上,docker通过设置iptables规则来实现网络隔离.这属于内部实现,你也不应该插入iptables
规则来修改docker规则.但是,如果你想在docker管理之外添加自己的规则,你可能就需要了解这些细节了.

如果你的docker运行在连网的主机上,你可能想通过iptables限制对容器或者其他服务的未受权的访问.本
篇文章会介绍如何实现这些功能及需要注意的细节.

在Docker规则之前添加iptables策略

docker会添加"DOCKER-USER"和"DOCKER"两条iptables chain,这2条链会对所有入流量进行检查

所有docker的iptables规则都会加到DOCKER链中,不要手工操作这条.如果你需要在DOCKER链之前添加规则,添加到DOCKER-USER链
中.这些规则会自动应用在DOCKER链之前.

手工或通过工具添加到FORWARD链中的规则将会在Docker添加的规则之后.这意味着如果你通过docker导出了一个端口,这个端口将
会被docker导出而不管之前的防火墙配置如何.如果你想让之前添加的配置对导出的端口也生效,则需要像前面说的把它们加到DOCKER-USER
链中.

限制对Docker主机的连接

默认情况下,允许所有外部IP对Docker主机的连接.如是仅想特定的IP地址访问容器则在DOCKER-USER链中添加以下规则.比如,只允许
"192.168.1.1"访问.

$ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1 -j DROP

你需要把ext_if替换成你的外部网卡名称,也可以允许一个网段访问.

$ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.0/24 -j DROP

你还可以通过"–src-range"选项来指定一段IP地址范围(记住需要同时指定-m iprange选项当使用–src-range或者–dst-range时):

$ iptables -I DOCKER-USER -m iprange -i ext_if ! --src-range 192.168.1.1-192.168.1.3 -j DROP

在路由器上运行Docker

Docker会在FORWARD链中设置DROP策略.如果你想让Docker主机运行路由功能,Docker添加的DROP规则会导致不转发任何流量.所以
你需要在DOCKER-USER链中添加ACCEPT规则

$ iptables -I DOCKER-USER -i src_if -o dst_if -j ACCEPT

阻止Docker操作iptables

通过在/etc/docker/daemon.json配置文件中设置iptables选项为false可以阻止docker操作iptables.但是这个选项对大多数用户
都不合适使用,不可能完全阻止Docker创建iptables规则,在Docker启动后操作这些会很复杂,而且很有可能会影响Docker的网络.

设置容器默认的bind地址

默认情况下,Docker daemon会在0.0.0.0地址提供服务.你可以通过"–ip"选项来指定具体的IP地址,比如你只想在内网提供服务.

你可能感兴趣的:(Docker,docker,网络,iptables,FORWARD,CHAIN)