Networking

只允許 docker 容器連接到某些 IP 地址

  • May 8, 2021

目標是創建一個 docker 容器,它只能連接到某些 IP 地址(在主機所屬的本地網路和 Internet 上)。

容器本身不需要直接訪問或暴露任何埠。

例子:

  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 之外的其他 Internet 上)。

請注意,主機執行具有各種服務的其他容器,並且這些容器不能被干擾。

經過一番研究,我發現我可能應該像這樣創建一個自定義橋接網路:

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 規則。具體如何?

好的,經過半小時的 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 &lt;static_ip&gt; -j ACCEPT

引用自:https://unix.stackexchange.com/questions/647959