V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ysoserious
V2EX  ›  问与答

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

  •  
  •   ysoserious · 2019-08-08 16:20:01 +08:00 · 2289 次点击
    这是一个创建于 1925 天前的主题,其中的信息可能已经有所发展或是发生改变。

    默认情况下 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. 容器能识别并区分访问者
    2 条回复    2019-08-09 15:02:34 +08:00
    julyclyde
        1
    julyclyde  
       2019-08-09 12:31:01 +08:00
    加--iptables=false 是头痛医脚

    建议直接取消基础防火墙规则; docker 使用 host 网络模式
    ysoserious
        2
    ysoserious  
    OP
       2019-08-09 15:02:34 +08:00
    @julyclyde #1 我已经不用这个方法了,另外 host 模式会在容器内暴露所有主机的网络设备,不那么安全。我已经找到另外的方法解决这个问题了。感谢回复。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1048 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:22 · PVG 06:22 · LAX 14:22 · JFK 17:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.