在 Docker 环境中,容器的端口映射可能会暴露在宿主机的网络接口上,导致安全隐患。为了加强安全性,我们可以通过配置 iptables 来限制对 Docker 容器端口的访问。本文将深入探讨如何使用 iptablesDOCKER-USER 链来实现这一目标,并解析其默认规则的含义。


🧱 Docker 与 iptables 的关系

Docker 在宿主机上自动配置了多个 iptables 链,以管理容器的网络流量:

  • DOCKER-USER:用户自定义规则链,位于 DOCKER 链之前,用于在 Docker 的规则之前添加自定义过滤规则。
  • DOCKER:用于处理容器端口映射的规则链。
  • DOCKER-ISOLATION-STAGE-1DOCKER-ISOLATION-STAGE-2:用于隔离 Docker 网络的规则链。
  • DOCKER-INGRESS:与 Docker Swarm 网络相关的规则链。

要限制对容器端口的访问,应在 DOCKER-USER 链中添加规则,因为该链在 Docker 的规则之前处理流量。


🔍 DOCKER-USER 链默认规则解析

在执行 iptables -L DOCKER-USER 命令时,您可能会看到类似以下的输出:

Chain DOCKER-USER (1 references)
 pkts bytes target     prot opt in     out     source               destination         
 303K   20M RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

这条规则的含义如下:

  • Chain DOCKER-USER:表示这是 DOCKER-USER 链。
  • pkts bytes:分别表示匹配该规则的数据包数量和字节数。
  • target:表示匹配该规则时的目标动作,此处为 RETURN
  • prot:表示协议类型,此处为 all,即匹配所有协议。
  • opt:表示是否有特定的选项,此处为空。
  • inout:分别表示入站和出站网络接口,此处为 *,表示匹配所有接口。
  • sourcedestination:分别表示源地址和目标地址,此处为 0.0.0.0/0,表示匹配所有地址。

RETURN 的作用

RETURN 目标表示停止当前链的规则匹配,返回到调用该链的上一层链继续匹配。对于 DOCKER-USER 链而言,这意味着:

  • 如果数据包没有被之前的规则匹配,它将返回到 FORWARD 链继续处理。
  • 如果数据包在 DOCKER-USER 链中被匹配并处理(例如,使用 DROPACCEPT),则不会继续向下传递。

为什么会有这条规则?

Docker 在初始化时,会在 DOCKER-USER 链中添加一条 RETURN 规则。这是为了确保:

  • 用户可以在 DOCKER-USER 链中添加自定义规则,以控制容器的网络访问。
  • Docker 的默认规则不会干扰用户自定义的规则。

🛡️ 示例:限制端口访问

假设我们希望:

  • 允许 IP 地址 10.86.86.17 访问容器的 HTTP (80) 和 MySQL (3306) 服务。
  • 阻止其他所有外部访问。

1. 清空现有的 DOCKER-USER 链规则

sudo iptables -F DOCKER-USER

2. 允许特定 IP 的访问

sudo iptables -I DOCKER-USER -i eth0 -p tcp -s 192.1.1.17 --dport 80 -j ACCEPT
sudo iptables -I DOCKER-USER -i eth0 -p tcp -s 192.1.1.17 --dport 3306 -j ACCEPT

3. 阻止其他所有外部访问

sudo iptables -A DOCKER-USER -i eth0 -p tcp --dport 80 -j DROP
sudo iptables -A DOCKER-USER -i eth0 -p tcp --dport 3306 -j DROP

5. 保存规则(以确保重启后规则仍然有效)

在 CentOS 7 上:

sudo yum install -y iptables-services
sudo service iptables save
sudo systemctl enable iptables
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐