首页 > 解决方案 > 如何防止重定向的 docker 端口向外界开放?

问题描述

我在不同的容器中有几个 Web 服务,我将每台服务器的 80 个端口重定向到主机服务器上的另一个端口。(容器 1 80 -> 8003,容器 2 80 -> 8004,容器 3 80 -> 8005)我想阻止对这些端口的访问,除了预配置的 ip 列表

我已将 iptables 规则添加到“docker-user”链中,如下所示;

-A INPUT -s 212.154.74.194/32 -p tcp -j ACCEPT //accept all from this ip
-A INPUT -s 185.22.208.0/25 -p tcp -j ACCEPT //accept all from this ip
-A INPUT -p tcp -m tcp --dport 8003 -j DROP //block anyone except allowed ips 
-A INPUT -p tcp -m tcp --dport 8004 -j DROP //block anyone except allowed ips
-A INPUT -p tcp -m tcp --dport 8005 -j DROP //block anyone except allowed ips

但它不起作用。路由端口仍然可以从外部访问。我不知道我做错了什么。如何阻止对路由端口的访问?

标签: dockeriptablesportforwarding

解决方案


似乎From docker docs非常详尽地回答了您的问题:

默认情况下,允许所有外部源 IP 连接到 Docker 守护程序。要仅允许特定 IP 或网络访问容器,请在 DOCKER 过滤器链的顶部插入否定规则。例如,以下规则限制对除 192.168.1.1 之外的所有 IP 地址的外部访问:

$ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1 -j DROP

允许特定子网:

iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.0/24 -j DROP

奖励:您还可以将连接完全限制到 localhost:docker run -p 127.0.0.1:80:8003应该自动限制对 localhost 的访问。

或者使用 docker compose:

webapp:
    image: image_name
    ports:
    - "127.0.0.1:80:8003"

推荐阅读