Типовая конфигурация системы WNAM использует сервер СУБД MongoDB, работающий на том же сервере (VM), что и само приложение WNAM. Конфигурация СУБД MongoDB по умолчанию сформирована так, что сервер этой СУБД доступен для подключения только непосредственно с самой виртуальной машины, т.к. имеет сокет подключения, работающий только на localhost (127.0.0.1). Подключиться к такому серверу извне невозможно.

Кластерная конфигурация системы WNAM и СУБД MongoDB, а также безкластерная конфигурация с распределением нагрузки, при которой система WNAM и СУБД MongoDB работаю на разных виртуальных машинах, требуют, чтобы сервис СУБД MongoDB взаимодействовал по сети. Для этого в конфигурационном файле /etc/mongod.conf следует указать, на каких адресах "слушать" сеть:

# network interfaces
net:
port: 27017
bindIp: 0.0.0.0

По умолчанию авторизация доступа к БД отсутствует.

Оставлять открытым доступ к СУБД MongoDB (без защиты паролем и правилами межсетевого экранирования) особенно с подключением из сети Интернет, запрещено. Это приведет к тому, что БД будет доступна злоумышленникам и подвержена модификации, удалению и даже утечке из неё информации.

Для защиты от подобных угроз необходимо выполнить два обязательных действия - настроить сетевую блокировку и настроить парольный доступ.

Настройка сетевой блокировки

При помощи iptables, nftables, ufw или другого инструмента используемой ОС необходимо ограничить доступ к серверу по TCP посредством порта 27017. Разрешить доступ только по localhost, трафик между серверами кластера СУБД MongoDB и серверами приложения WNAM, используя:

*filter
:INPUT DROP
:FORWARD ACCEPT [84513626:11603166108]
:OUTPUT ACCEPT [343401181:88762595634]
-A INPUT -s 172.16.10.0/24 -p tcp -m multiport --dports 27017 -j ACCEPT
-A INPUT -i lo -m multiport -p tcp --dports 27017 -j ACCEPT
-A INPUT -m multiport -p tcp --dports 27017 -j DROP
COMMIT

Настройка парольного доступа

Данным действием запрещается беспарольный доступ к серверу СУБД MongoDB. При этом следует создать пользователя с заданными правами и использовать его в работе системы WNAM (и возможно в утилитах командной строки и резервного копирования).

Для создания пользователя необходимо:

  • войти в консоль СУБД MongoDB;
  • в консоли ввести команды:
use wnam_db

db.createUser(

  {

    user: "wnam_user",

    pwd:  "Pa$$w0rd",   

    roles: [ { role: "readWrite", db: "wnam_db" }, {role: "dbAdmin", db: "wnam_db" }, { role: "clusterMonitor", db:"admin"},  { role: 'clusterAdmin', db: 'admin' }, { role: "userAdminAnyDatabase", db: "admin" }]

  }

)

  • в файле конфигурации /etc/mongod.conf прописать раздел:
security:
  authorization: enabled
  • перезапустить сервис СУБД MongoDB:
systemctl restart mongod

Если используется БД в кластерной конфигурации (настроен replicaSet), то потребуется прописать это на каждом сервере. В файле конфигурации системы WNAM application.yaml в параметре mongodb uri прописать пользователя и пароль.

Для application.yaml:

spring:
   data:
      mongodb:
           uri: mongodb://wnam_user:Pa$$w0rd@127.0.0.1:27017/wnam_db

Для replicaSet все сервера кластера прописываются в uri через запятую:

uri: mongodb://wnam_user:Pa$$w0rd@192.168.0.1:27017,192.168.0.2:27017,192.168.0.3:27018/wnam_db


  • No labels