index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html
![]()
在使用Docker进行端口映射时,仅依赖iptables的白名单规则存在安全风险。Docker默认会自行管理iptables,插入名为DOCKER的Rule Chain,绕过INPUT Chain的直接管理,并采用黑名单机制,导致未在白名单的IP地址也能访问映射端口。为了加强安全性,建议在/etc/docker/daemon.json文件中添加"iptables": false来关闭Docker的自动防火墙管理功能,然后手动清理Docker添加的Rule Chain,并自行管理Docker的防火墙规则,以符合白名单安全理念。
💡 Docker的端口映射机制存在潜在安全漏洞:通过`-p`或`--publish`映射端口后,即使在iptables的INPUT Chain中设置了白名单规则,不在白名单内的IP地址也可能访问到该端口。这是因为Docker会自行管理iptables,插入名为DOCKER的Rule Chain,绕过了INPUT Chain的直接控制。
🚫 Docker防火墙机制与安全理念冲突:Docker默认采用的是黑名单制的防火墙策略,这与传统的软硬件防火墙(如iptables、Windows防火墙)普遍采用的白名单制安全理念相悖。白名单制只允许明确授权的IP访问,而黑名单制则允许所有未被禁止的IP访问,安全性较低。
🛠️ 建议关闭Docker的自动防火墙管理并手动配置:为提升安全性,用户应在`/etc/docker/daemon.json`配置文件中添加`"iptables": false`选项,以禁用Docker对iptables的自动管理。之后,需要手动清理Docker之前添加的所有Rule Chain,并自行配置iptables规则,采用白名单策略来管理Docker容器的网络访问。
🔍 验证Docker的iptables规则:可以通过`iptables --list --verbose --numeric`和`iptables --list --verbose --numeric --table nat`命令来查看iptables的详细规则,从而发现Docker插入的以DOCKER命名的Rule Chain,了解其防火墙的实际运作方式。
我们在使用 docker 时,一般会使用 -p / --publish 来映射端口到宿主机,然后在 iptables 的 INPUT Chain 里开一条白名单规则,允许指定的 IP 或 IP 范围来访问这个端口。
问题是,很多朋友测试能访问后,很容易偷懒,不再测试别的 IP 是否能访问了。docker 的重磅安全漏洞也就在这里出现。如果你继续测试,你会发现,不在白名单的 IP 地址,也能访问这个端口。
原因在于 docker 自行管理 iptables ,它给 iptables 里插入一大堆 Rule Chain ,绕开了 INPUT Chain 的管理。
通过以下两条命令:
iptables --list --verbose --numeric
iptables --list --verbose --numeric --table nat
可以发现 docker 插入了一堆以 DOCKER 命名的 Rule Chain 。
本来标准的软硬件防火墙,包括 iptables 、Windows 防火墙,为了安全,都是默认使用白名单制,而 docker 的防火墙却是黑名单制的,这与安全理念冲突。
建议关闭 docker 的自行管理防火墙的功能,向 /etc/docker/daemon.json 添加 "iptables": false
然后手动清理 docker 向 iptables 里添加的各种 Rule Chain
最后手动管理 docker 的防火墙,来加强安全。