首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FirewallD和docker:阻止一个端口被公开访问

FirewallD和docker:阻止一个端口被公开访问
EN

Unix & Linux用户
提问于 2021-11-23 12:05:40
回答 1查看 1.5K关注 0票数 3

我遇到了一些问题,试图限制我目前使用Centos8和Firewalld运行的两个码头容器的访问权限。首先,容器具有以下配置:

代码语言:javascript
复制
services:
  service1:
    ports:
      - 1234:1234
  service2:
    ports:
      - 6969:6969

停靠区具有以下(默认)配置:

代码语言:javascript
复制
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。到目前为止,我所做的工作并没有奏效:

  1. 首先,我尝试将停靠区的目标更改为default,这只破坏了两个应用程序之间的通信,而没有其他任何东西。
  2. 添加了一个丰富的规则:rule family="ipv4" source NOT address="X.X.X.X" port port="6969" protocol="tcp" reject规则被忽略。

是否有一种方法可以使用FirewallD和docker区域阻止对这些端口的访问,同时两个服务可以相互通信?

EN

回答 1

Unix & Linux用户

发布于 2021-11-25 09:14:28

可以向设置中添加反向代理服务,然后停止公开service1 & service2端口,让反向代理过滤通信量。

如果不公开端口,容器仍然可以彼此对话(在同一个码头网络中),并通过内置的码头DNS通过服务名称解析in。(例如service1,service2)。

在这种情况下,撰写文件大致如下所示:

代码语言:javascript
复制
services:
  service1:

  service2:

  proxy:
    ports:
      - 80:80
      - 443:443
      - <extra ports>:<extra ports>

例如,您可以使用带有额外配置的nginx容器:(只需确保代理配置为侦听在它的服务下指定的外部端口):

代码语言:javascript
复制
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添加路径的话。

这还将允许您运行多个服务副本,所有这些副本都侦听相同的端口,同时仍然能够通过反向代理公开它们(并过滤通信量)。

票数 -1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/678725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档