用 iptables/firewalld 阻止 Docker 容器的端口访问。

4

我有一个 Docker Compose 部署,其中包含一个容器,例如:

version: "3"
services:
  web:
    image: nginx
    ports:
     - "8080:80"

Docker 版本为 20.10.9,操作系统为 CentOS 7。

我需要阻止外部 IP 地址访问 8080 端口,除非有指定的例外。

但是 iptables -A INPUT -p tcp -m tcp --dport 8080 --src ! <IP 白名单> -j DROP 对于 Docker 容器无效。

在一个使用 firewalld 设置的系统中,public 区域的设置不适用于 Docker 容器。

DOCKER-USER 链没有按照需要的方式工作,因为我应该使用 --dport 80(docker 容器中的内部端口),而不是 dport 8080。但是我需要使用外部端口,因为可能会有许多内部端口为 80 的容器,但唯一的外部端口是唯一的。

我使用了:

1个回答

0

当我想要阻止容器端口时,我会更改DOCKER-USER链。

据我所知:到Docker的流量从不触及iptables中的INPUT链。

因此,我会尝试:

iptables -A DOCKER-USER -i <INCOMING-INTERFACE> -p tcp -m tcp --dport 8080 --src ! <IP whitelist>  -j DROP

更多信息:https://docs.docker.com/network/iptables/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接