如何限制从同一服务器中的其他码头化应用程序到码头化MongoDB的连接,并拒绝对27017的公共访问



我正在使用Orion Context Broker(在docker容器中(,我需要它来连接MongoDB(在它自己的docker容器内(。同时,我必须拒绝从外部源到27017的所有传入业务,因为在运行docker compose之后;暴露的";公开。

以上所有内容均使用Ubuntu 20.04。

这是我的docker-compose.yml文件

version: "3.5"
services:
orion:
image: fiware/orion-ld
hostname: orion
container_name: fiware-orion
expose:
- "1026"
ports:
- "1026:1026"
depends_on:
- mongo-db
command: -dbhost mongo-db -logLevel DEBUG
mongo-db:
image: mongo:3.6
hostname: mongo-db
container_name: db-mongo
ports:
- "27017:27017"
networks:
- default
command: --nojournal
volumes:
- mongo-db:/data
volumes:
mongo-db: ~

172.18.0.3是提供给Orion的docker容器的内部IP。因此,我尝试将--bind_ip 172.18.0.3添加到docker compose文件中的commandmongo_db参数中,但这会中断docker-compose up进程,并出现以下错误:

db-mongo | 2022-01-12T13:17:56.650+0000 E STORAGE [initandlisten] Failed to set up listener: SocketException: Cannot assign requested address

这是我的ubuntu防火墙规则(我刚刚了解到docker绕过[*](

OpenSSH                    ALLOW       Anywhere
1026                       ALLOW       Anywhere
27017                      DENY        Anywhere
27017                      ALLOW       127.0.0.1
27017                      ALLOW       172.18.0.3
OpenSSH (v6)               ALLOW       Anywhere (v6)
1026 (v6)                  ALLOW       Anywhere (v6)
27017 (v6)                 DENY        Anywhere (v6)

[*]https://www.techrepublic.com/article/how-to-fix-the-docker-and-ufw-security-flaw/我也做了教程建议的修复,但如果重新启动docker,那么(出于某种未知原因(我将停止访问1026端口,这应该是唯一的公共端口。

Composeports:设置使容器可以从Docker空间外部访问。容器之间的连接不需要(或不使用(它。删除此项应满足您的需要。

version: '3.8'
services:
orion:
image: fiware/orion-ld
ports:
- "1026:1026"  # accessible from host port 1026
depends_on:
- mongo-db
command: -dbhost mongo-db -logLevel DEBUG
#  same hostname ^^^^^^^^ and default MongoDB port 27017
# vvvvvvvv
mongo-db:
image: mongo:3.6
command: --nojournal
volumes:
- mongo-db:/data
# no ports:, not accessible from outside Docker
volumes:
mongo-db:

(我还从这个设置中删除了不必要的container_name:hostname:networks:expose:选项;它们没有区别,Compose堆栈在没有它们的情况下应该可以正常工作。(

将其放在自己的网络上(即新的docker网络:orion_net(,只公开您需要的端口。目前您在";默认";网络,这是共享的。

最新更新