使用 iptables 限制对 Docker 主机的访问?

使用 iptables 限制对 Docker 主机的访问?

我想限制对我的docker主机和容器的访问,只允许从一个源IP访问(实际上我想创建比这更复杂的规则,但我需要先弄清楚这个基本任务)...我该怎么做呢?

我尝试iptables -I DOCKER-USER -i ens33 ! -s 10.0.0.100 -j DROP使用我的 IP 地址 10.0.0.100,但我仍然可以从 LAN 上的其他 IP 地址 ping docker 主机。

docker 文档 (https://docs.docker.com/network/iptables/) 指出“Docker 安装了两个名为 DOCKER-USER 和 DOCKER 的自定义 iptables 链,并确保传入的数据包始终首先通过这两个链检查。”

文档中有一个名为“限制与 Docker 主机的连接”的部分,这正是我想要做的,但它似乎并没有真正描述如何做到这一点。本节是我从上面获得示例规则的地方,但尽管有章节标题,但该规则被描述为限制对 Docker 的访问容器并且不限制对docker的访问主持人.那么我实际上如何限制对 docker 主机的访问?

sudo iptables -I INPUT -i ens33 ! -s 10.0.0.100 -j DROP确实限制了从其他 IP 地址访问主机,但这似乎违背了文档,而且我不确定这是否会导致 docker 出现一些问题?

答案1

我认为文档只是有点令人困惑(至少对我来说),在评估 iptables 的表/链遍历时,发往主机的传入流量永远不会到达“DOCKER-USER”表,因此使用 INPUT/OUTPUT 链进行 docker 主机限制是正确的:

#Ensures only 10.0.0.100 can reach the containers
iptables -I DOCKER-USER -o docker0 ! -s 10.0.0.100 -j DROP

#Ensures the containers can only reach 10.0.0.100
iptables -I DOCKER-USER -i docker0 ! -d 10.0.0.100 -j DROP

#Ensures only 10.0.0.100 can reach this host.
iptables -A INPUT ! -s 10.0.0.100 -j DROP

#Ensures this host can only reach 10.0.0.100 (if desirable)
iptables -A OUTPUT ! -d 10.0.0.100 -j DROP

相关内容