firewall 整合 docker:指定 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 自动写入的 chain ,其中有一个是 DOCKER-USER,通过 docker 的文档可以知道,可以在 DOCKER-USER 这个 chain 里添加自定义的策略

那么下面就演示 覆盖 DOCKER-USER 自定义策略

步骤

  1. 停止 docker : systemctl stop docker
  2. 删除 DOCKER-USER 这个 chain,并重建
firewall-cmd --permanent --direct --remove-chain ipv4 filter DOCKER-USER
firewall-cmd --permanent --direct --remove-rules ipv4 filter DOCKER-USER
firewall-cmd --permanent --direct --add-chain ipv4 filter DOCKER-USER

过程中会有一些 warn 提示,可以不用管

  1. 建拒绝所有请求的策略,级别是最低,也就是放在策略组的最后一行
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 10 -j REJECT 
  1. 建允许来自 docker0 网卡的请求流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -i docker0 -j ACCEPT
  1. 建允许 docker0 网卡 到宿主机网卡的请求流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -i docker0 -o ens33 -j ACCEPT

这里我宿主机网卡名称是 ens33

  1. 建允许 docker 请求外界
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  1. 建允许来自 docker 自定义网段的请求流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -j RETURN -s 172.23.0.0/24

172.23.0.0 是我自定义的 docker 网段

  1. 建允许来自指定 ip 的请求流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -s 192.168.26.5/32 -j ACCEPT
  1. 重载 firewall
firewall-cmd --reload
  1. 启动 docker

这样子就实现了 firewall 的白名单功能,提高了 docker 的安全性。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值