CentOS 7 下 firewall 如何管理 docker 的网络?

2019-08-08 16:20:01 +08:00
 ysoserious

默认情况下 docker 会在 iptables 里创建优先级比 firewalld 高的规则。使用 firewalld 创建的规则对 docker 的容器就不会产生作用。

在 docker 的启动配置中加入参数 --iptables=false 来禁止 docker 启动的时候创建 iptables 规则,这个问题就解决了。这时候出现了另一个问题,docker 容器之间不能互相访问了。

在 firewalld 里添加 masquerade

firewall-cmd --permanent --zone=public --add-masquerade

docker 容器之间可以进行通行了。可是又出现了另外一个问题:

现在有两个容器

  1. 容器 A 10.0.1.2 mysql
  2. 容器 B 10.0.1.3 web

mysql 里创建了 用户 a 只允许 ip 为 10.0.1.3 的访问者使用。另一个 用户 b 只允许 192.168.xxx.yyy (我的机子)的访问者使用

容器 B 里配置的 mysql host 地址是 10.0.1.2,原来使用是正常的,经过上面的操作后容器 B 连接 mysql 的时候报错了。查看日志发现 access deined 用户 a@'10.0.1.1'

于是我用客户端连接 用户 b 返回相似的错误 access deined 用户 b@'10.0.1.1'

我的电脑和容器 B 都通过网关的地址来访问容器 A 了

虽然说可以把 mysql 账户的 host 改为 % 或者 10.0.1.1 解决,可是这样的话网内任何人都有可能进行连接,而日志里无法区分访问者。

请问应该如何做呢?

我的目的是

  1. docker 容器映射出来的端口,只允许让指定的几台机器访问(白名单)
  2. 容器之间可以正常访问(默认情况下)
  3. 容器能识别并区分访问者
2231 次点击
所在节点    问与答
2 条回复
julyclyde
2019-08-09 12:31:01 +08:00
加--iptables=false 是头痛医脚

建议直接取消基础防火墙规则; docker 使用 host 网络模式
ysoserious
2019-08-09 15:02:34 +08:00
@julyclyde #1 我已经不用这个方法了,另外 host 模式会在容器内暴露所有主机的网络设备,不那么安全。我已经找到另外的方法解决这个问题了。感谢回复。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/590206

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX