我有几个不同容器的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
但它不起作用。仍然可以从外部访问路由端口。我不知道我做错了什么。如何阻止对路由端口的访问?
好像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"