我遇到了一些问题,试图限制我目前使用Centos8和Firewalld运行的两个码头容器的访问权限。首先,容器具有以下配置:
services:
service1:
ports:
- 1234:1234
service2:
ports:
- 6969:6969停靠区具有以下(默认)配置:
docker (active)
target: ACCEPT
icmp-block-inversion: no
interfaces: br-b2ef50b272a2 docker0
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:当我离开这样的东西时,如果我运行了docker-compose,应用程序就会运行,它们之间可以进行通信,但是它们的端口也可以通过公共互联网访问。我的最终目标是在应用程序之间进行内部通信,但是阻止公众访问它们的端口,并且只允许特定的IP。到目前为止,我所做的工作并没有奏效:
default,这只破坏了两个应用程序之间的通信,而没有其他任何东西。rule family="ipv4" source NOT address="X.X.X.X" port port="6969" protocol="tcp" reject规则被忽略。是否有一种方法可以使用FirewallD和docker区域阻止对这些端口的访问,同时两个服务可以相互通信?
发布于 2021-11-25 09:14:28
可以向设置中添加反向代理服务,然后停止公开service1 & service2端口,让反向代理过滤通信量。
如果不公开端口,容器仍然可以彼此对话(在同一个码头网络中),并通过内置的码头DNS通过服务名称解析in。(例如service1,service2)。
在这种情况下,撰写文件大致如下所示:
services:
service1:
service2:
proxy:
ports:
- 80:80
- 443:443
- <extra ports>:<extra ports>例如,您可以使用带有额外配置的nginx容器:(只需确保代理配置为侦听在它的服务下指定的外部端口):
location /service1 {
allow X.X.X.X;
deny all;
proxy_pass http://service1:1234;
}
location /service2 {
allow X.X.X.X;
deny all;
proxy_pass http://service2:6969;
}或者,您可以在nginx配置下创建两个"server“指令,每个指令侦听一个服务端口,然后通过根位置("/")传递通信量,如果您不想向URL添加路径的话。
这还将允许您运行多个服务副本,所有这些副本都侦听相同的端口,同时仍然能够通过反向代理公开它们(并过滤通信量)。
https://unix.stackexchange.com/questions/678725
复制相似问题