firewall管理下的docker的防火墙规则理解

背景

在使用iptables管理的防火墙启用docker服务,docker会借助防护墙的规则实现端口映射和NAT转换。使用iptables查看规则,还算比较清爽。

docker服务启动后,多了:

DOCKER

DOCKER-ISOLATION-STAGE-1 -> DOCKER-ISOLATION-STAGE-2

DOCKER-USER

这些链。其中STAGE-1嵌套了STAGE-2,一共就4个,看起来并不复杂。

然而firewall管理的防火墙下部署的docker的规则看上去"杂乱无章",一时不知道从哪看起。

经过我的整理,我绘制成了思维导图,分享出来。

分析

firewall下的docker创建的防护墙规则,因为firewall使用了区域的概念,从而让规则也适应了区域,规则也就变得复杂。经过细心的梳理,复杂度瞬间暴降。

防火墙规则主要看两张表:filter表和nat表。

1.filter表

此表记录了INPUT、FORWARD和OUTPUT链,这个和iptables是一样的,毕竟firewall只是封装了iptables,内部还是用的iptables。除了OUTPUT链外,都有ZONES的子链。在对应的ZONES的子链里,又建立了各个区域的子链。区域的子链下又分为log、deny和allow三类。

为了兼容iptables原本的规则位置,还有direct链。这个链相当于iptables里的子链,和iptables直接创建的一样,因为direct链不受区域的影响。所有的链都包含了direct子链以兼容iptables。

ZONES_SOURCE是对区域的流量的源进行限制,可以体现firewall的控制更加精细。iptables一般都是对目的IP进行限制的。

而iptables管理的docker创建的几个链,在firewall也是有的。在INPUT和FORWARD链的子链都加入了区域的子链,一看就懂。

如果要对宿主机继续控制,需要在INPUT的IN_public下的子链进行操作,这个只影响宿主机本身的访问。如果对容器的控制,则需要在IN_docker下的子链进行操作,这个只影响容器的访问。

要实现外部访问容器的服务,依靠的是FORWARD下的DOCKER的规则进行的请求转发和NAT地址转换。

2.nat表

此表记录了INPUT、OUTPUT、PREROUTING、POSTROUTING链,主要用于NAT地址端口转换。DOCKER链实现了外部与容器之间、容器与容器之间的端口的映射,是容器与外部可以正常的通信。

MASQUERADE的作用则是进行SNAT的转换,将容器的内外IP转为宿主机的出口IP,以实现容器对外部网络以及容器对其他容器的访问。

思维导图中的链从上到下也是有顺序的。

至于每一个链的作用,在思维导图中标注了关键的作用。更详细说明就不再这里展开了。我相信通过思维导图的梳理,比大把的文字清晰的多,一看就明白了。

总结

本文主要是将docker 在 firewall管理的防护墙上创建的规则,通过思维导图梳理出来,让复杂的规则链一下子就清晰明了,不用太多的文字就可以说明整体的规则的脉络,并对关键的链进行了简明的标注。

来源: http://www.yu7s.com/article/20240327152051847.html

相关推荐
qq_316837751 小时前
使用 certbot docker镜像生成阿里云域名ssl证书
阿里云·docker·ssl
木雷坞1 小时前
使用Docker Compose部署PostgreSQL:从入门到实践
docker·postgresql·容器
Tummer83632 小时前
从 Docker 到 Kubernetes:容器编排的工程化实践指南
docker·容器·kubernetes
曹天骄3 小时前
在 Docker 容器中控制宿主机 Docker:DoD 与 DinD 的技术原理解析
docker·容器·eureka
萝卜特福3 小时前
Spring Boot 项目 Docker 部署全流程实操笔记
docker
国思RDIF框架3 小时前
Docker Compose多后端+多前端部署:日志集中管理实操指南(基础版+进阶版,亲测可用)
docker·容器·自动化运维
what丶k3 小时前
Docker 进阶指南:从入门能用,到生产环境稳、快、安全的核心实践与底层原理
后端·docker·容器
Bruce_Liuxiaowei3 小时前
在 macOS 上通过 Docker 本地安装 OpenClaw 完整教程
macos·docker·容器·openclaw
果壳~4 小时前
Docker镜像离线迁移:从下载到本地部署完整实战指南
运维·docker·容器
sunshinebo4 小时前
一次 GitLab 无法启动的排查:Docker 日志把 500G 磁盘打满
docker·eureka·gitlab