知识准备
- 主要演示的是 centos7 的 firewall,firewall 是 centos7 的默认自带防火墙。
- firewall 的底层是 iptables
- firewall 中的 chain 可以理解为是防火墙的策略组
docker 在和宿主机进行端口映射时,会自动绕开 firewall 的 zone 组,直接向 iptables 写入策略,
这也是为什么明明开启了firewall,而且没有打开 docker 映射的端口,但外界依然能够通过这个映射端口连接上 docker
例如,启动 mysql 容器,容器和宿主机映射 3306 这个端口,
然后查看 firewall 的 chain,输入命令
iptables -nvL

可以看到在 DOCKER 这个 chain,自动写入了一条策略,destination 是容器的 ip , tcp:dpt:mysql 是 mysql 端口,target 是 ACCEPT,表示接受流量,特别留意 source,这个是流量来源,可以看到 docker 自动写入这个策略是对 mysql 端口任意的请求,都放行。
这样子就使得 firewall 形同虚设,引出了下面的需求
需求
firewall 要对 docker 的端口请求有黑白名单,也就是要指定的 ip 才能请求 docker 映射的端口。
解决方案
- 修改 /etc/docker/daemon.json,
将 iptables 设为 false·

这样子 docker 就不会向 iptables 写入策略,也就是不会自动打开宿主机的端口,任何请求都不会连接上 docker 。这个方法并不推荐,这样子 docker 无法解析 dns,也就是无法请求外界,而且容器之间也无法请求对方的端口。
- 覆盖 DOCKER-USER
(推荐)

通过命令 iptables -L 可以看到 docker 自动写入

本文介绍了如何在CentOS7中使用firewall实现对Docker容器的端口访问控制,通过修改默认策略提升安全性。当Docker自动在iptables中添加策略时,firewall的防护作用减弱。为了实现白名单机制,可以不启用iptables,但会导致Docker失去某些功能。另一种方法是覆盖DOCKER-USER链,设置自定义规则,包括拒绝所有请求、允许内部通信、允许已建立连接和特定IP访问,从而增强Docker的安全性。

2662

被折叠的 条评论
为什么被折叠?



