admin管理员组文章数量:1642331
知识准备
- 主要演示的是 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 自动写入的 chain ,其中有一个是 DOCKER-USER
,通过 docker 的文档可以知道,可以在 DOCKER-USER
这个 chain 里添加自定义的策略
那么下面就演示 覆盖 DOCKER-USER 自定义策略
步骤
- 停止 docker :
systemctl stop docker
- 删除
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 提示,可以不用管
- 建拒绝所有请求的策略,级别是最低,也就是放在策略组的最后一行
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 10 -j REJECT
- 建允许来自 docker0 网卡的请求流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -i docker0 -j ACCEPT
- 建允许 docker0 网卡 到宿主机网卡的请求流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -i docker0 -o ens33 -j ACCEPT
这里我宿主机网卡名称是 ens33
- 建允许 docker 请求外界
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- 建允许来自 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 网段
- 建允许来自指定 ip 的请求流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -s 192.168.26.5/32 -j ACCEPT
- 重载 firewall
firewall-cmd --reload
- 启动 docker
这样子就实现了 firewall 的白名单功能,提高了 docker 的安全性。
版权声明:本文标题:firewall 整合 docker:指定 ip 请求 docker 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729335699a1196952.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论