firewall 整合 docker:指定 ip 请求 docker

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

知识准备

  1. 主要演示的是 centos7 的 firewall,firewall 是 centos7 的默认自带防火墙。
  2. firewall 的底层是 iptables
  3. firewall 中的 chain 可以理解为是防火墙的策略组
  4. 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 映射的端口。

解决方案

  1. 修改 /etc/docker/daemon.json,将 iptables 设为 false·

在这里插入图片描述
这样子 docker 就不会向 iptables 写入策略,也就是不会自动打开宿主机的端口,任何请求都不会连接上 docker 。这个方法并不推荐,这样子 docker 无法解析 dns,也就是无法请求外界,而且容器之间也无法请求对方的端口。

  1. 覆盖 DOCKER-USER (推荐)

在这里插入图片描述
通过命令 iptables -L 可以看到 docker 自动写入

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值