仅允许 docker 容器连接到某些 IP 地址

仅允许 docker 容器连接到某些 IP 地址

目标是创建一个只能连接到某些 IP 地址(主机所属的本地网络和 Internet 上)的 docker 容器。

容器本身不需要可直接访问或暴露任何端口。

例子:

  1. Docker主机192.168.1.100
  2. 192.168.1.150 上的某些设备,例如 IP 摄像机
  3. <static_ip> 上的一些云 VPS

— 需要创建一个可以 ssh 到 <static_ip> 并连接到设备 192.168.1.150 但无法连接到其他任何设备的容器(特别是主机上没有其他容器,192.168.1.0 网络上没有其他容器,甚至可能什么也没有)除 VPS 之外的其他互联网上)。

请注意,主机上运行其他带有各种服务的容器,并且这些容器不得受到干扰。

经过一番研究,我发现我可能应该创建一个如下所示的自定义桥接网络:

docker network create --driver bridge \
-o "com.docker.network.bridge.enable_icc"="false" \
my-restricted-network

然后在该网络上运行容器:

docker run --name my-restricted-container \
--network my-restricted-network \
-d image_name /entrypoint.sh

那我需要做什么?我想在主机上添加一些my-restricted-network仅进行控制的 iptables 规则。具体如何?

答案1

好吧,经过半个小时的 RTFM 我找到了解决方案。

全部在docker主机上:

  1. 查找 my-restricted-network 的接口 ID:
docker network ls | grep my-restricted-network
38d3c24a48ad   my-restricted-network   bridge    local
  1. 插入以下规则:
iptables -I DOCKER-USER -i br-38d3c24a48ad -j DROP
iptables -I DOCKER-USER -i br-38d3c24a48ad -d 192.168.1.150 -j ACCEPT
iptables -I DOCKER-USER -i br-38d3c24a48ad -d <static_ip> -j ACCEPT

相关内容