如何防止重定向的docker端口向外界开放?

时间:2019-03-19 10:30:03

标签: docker iptables portforwarding

我在不同的容器中有几个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

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

1 个答案:

答案 0 :(得分:1)

好像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

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

或者使用docker compose:

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