![使用 iptables 限制对 Docker 主机的访问?](https://linux22.com/image/757928/%E4%BD%BF%E7%94%A8%20iptables%20%E9%99%90%E5%88%B6%E5%AF%B9%20Docker%20%E4%B8%BB%E6%9C%BA%E7%9A%84%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
我想限制对我的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