Типовая конфигурация системы 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_dbdb.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