iptables DROP仅在端口上用于远程连接

时间:2019-06-10 20:39:56

标签: linux docker nginx iptables

我的虚拟机上运行着多个Docker容器。

其中一个使用HTTP服务器(django / python)公开了8000端口。另一方面,已安装nginx,它监听80端口并将代理传递给8000:

proxy_pass http://127.0.0.1:8000

它完美地工作。但是,如果我直接从浏览器连接到8000端口,例如:

http://example.com:8000/

它返回我来自内部docker处理程序的响应。

如何关闭8000端口而不损坏所有内容?

我尝试使用iptables实用程序执行此操作,但似乎docker创建了很多自己的规则,并且我不是否要创建一个普通规则而不损害这些docker规则:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (2 references)
target     prot opt source               destination         

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            

计划这样做:

iptables -A INPUT -p tcp --dport 8000 -j REJECT

可以吗?

1 个答案:

答案 0 :(得分:0)

只有通过docker run -p选项(或Docker Compose ports:选项)明确发布的端口才能从其他主机访问。您无需仅在容器之间进行通信就可以使用此选项。同一Docker内部网络上的两个容器可以使用彼此的容器名称作为主机名以及容器内部端口进行通信,而无需任何“发布”或“公开”选项。

简而言之,从您的后端容器中删除-p选项,它将无法从脱离主机直接访问。您无需手动更改iptables规则。