Настройка удаленного доступа к MongoDB в Ubuntu 20.04

MongoDB (или просто Mongo) – это документная база данных с открытым исходным кодом, которая часто используется в современных веб-приложениях. По умолчанию Mongo поддерживает только локальные подключения (которые исходят с того же сервера, где установлена СУБД). Если вы хотите управлять MongoDB удаленно или подключить ее к серверу приложений, вам необходимо внести в конфигурацию по умолчанию несколько изменений.

В этом мануале вы научитесь настраивать безопасный доступ к MongoDB с доверенного удаленного компьютера. Для этого нужно обновить правила брандмауэра (чтобы открыть удаленному компьютеру доступ к порту, на котором MongoDB прослушивает соединения), а затем отредактировать конфигурации MongoDB, чтобы изменить привязку IP. В конце мы проверим, может ли удаленный компьютер подключиться к вашей базе данных.

Требования

  • Сервер Ubuntu 20.04, настроенный согласно этому мануалу (включая брандмауэр и пользователя sudo).
  • Установка MongoDB. Мы используем версию MongoDB 4.4, установить ее вам поможет этот мануал.
  • Второй компьютер, который вы настроите для доступа к удаленному экземпляру MongoDB. Для простоты в этом руководстве мы используем еще один сервер Ubuntu 20.04, настроенный согласно этому мануалу. Разделы 1 и 2, которые описывают фактическую процедуру включения удаленных соединений, будут работать независимо от операционной системы удаленного компьютера.

Это не обязательно, но мы настоятельно рекомендуем вам защитить MongoDB согласно этому мануалу.

1: Настройка брандмауэра

Если вы выполнили руководство по начальной настройке сервера и включили брандмауэр UFW, ваша установка MongoDB будет недоступна в интернете. Если вы собираетесь использовать MongoDB только локально, это самый безопасный вариант. Но если вам нужно иметь возможность подключать к своему серверу MongoDB удаленную машину, вам необходимо разрешить входящие подключения по порту, который прослушивает ваша база данных. Это можно сделать, добавив новое правило UFW.

Для начала проверьте, какой порт прослушивает ваша установка MongoDB. Это делается с помощью команды lsof. Эта команда обычно возвращает список всех открытых файлов в системе, но в сочетании с параметром -i она отображает только сетевые файлы или потоки данных.

Следующая команда перенаправит вывод lsof -i в grep для поиска строки со словом mongo.

sudo lsof -i | grep mongo

Вывод показывает, что MongoDB прослушивает соединения по стандартному порту 27017:

mongod    82221         mongodb   11u  IPv4 913411      0t0  TCP localhost:27017 (LISTEN)

В большинстве случаев доступ к MongoDB следует осуществлять только с надежных серверов (например, с сервера приложения). Один из способов настроить такой доступ – запустить на сервере MongoDB следующую команду, которая открывает стандартный порт MongoDB, явно разрешая только IP-адрес другого доверенного сервера.

Выполните следующую команду (замените trusted_server_ip на IP-адрес доверенного удаленного компьютера, который вы будете использовать для доступа к вашему экземпляру MongoDB):

sudo ufw allow from trusted_server_ip to any port 27017

Примечание: Если вывод предыдущей команды показал, что ваша установка MongoDB прослушивает не 27017, а другой порт, укажите этот номер порта вместо 27017.

Если в дальнейшем вы когда-нибудь захотите получить доступ к MongoDB с другого компьютера, запустите эту команду еще раз с IP-адресом нового компьютера.

Вы можете проверить изменение настроек брандмауэра с помощью команды ufw:

sudo ufw status

Вывод покажет, что теперь трафик с удаленного сервера на порт 27017 разрешен:

Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
27017                      ALLOW       trusted_server_ip
OpenSSH (v6)               ALLOW       Anywhere (v6)

Читайте также: Основы UFW: общие правила и команды фаервола

Теперь нам нужно привязать MongoDB к внешнему IP-адресу сервера, чтобы вы могли получить к нему доступ с удаленного компьютера.

2: Настройка публичного bindIP

На данный момент порт открыт, но MongoDB все равно привязан к 127.0.0.1, локальному сетевому loopback интерфейсу. Это означает, что MongoDB может принимать только соединения, которые исходят с того сервера, на котором он установлен.

Чтобы разрешить удаленные подключения, вы должны отредактировать конфигурационный файл MongoDB /etc/mongod.conf, чтобы привязать MongoDB к внешнему IP-адресу вашего сервера. Тогда ваша установка MongoDB сможет прослушивать подключения к серверу MongoDB с удаленных машин.

Откройте конфигурационный файл MongoDB в текстовом редакторе.

sudo nano /etc/mongod.conf

Найдите раздел network interfaces, а в нем bindIp.

. . .
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
. . .

Добавьте в эту строку запятую, за которой укажите публичный IP-адрес вашего сервера MongoDB:

. . .
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,mongodb_server_ip
. . .

Сохраните и закройте файл.

Затем перезапустите MongoDB, чтобы это изменение вступило в силу:

sudo systemctl restart mongod

После этого ваша установка MongoDB сможет принимать удаленные подключения с любых машин, которым вы открыли доступ к порту 27017. В заключение вы можете проверить, может ли доверенный удаленный сервер подключиться к MongoDB.

3: Тестирование удаленного подключения

Теперь, когда вы настроили MongoDB для прослушивания соединений, исходящих с публичного IP-адреса, и предоставили удаленному компьютеру доступ к стандартному порту Mongo, вам нужно проверить, может ли удаленный компьютер подключиться.

Примечание: Как упоминалось в разделе «Требования», в этом мануале предполагается, что ваш удаленный компьютер использует ОС Ubuntu 20.04. Процедура включения удаленных соединений, описанная в разделах 1 и 2, будет работать независимо от операционной системы на удаленном компьютере, но методы тестирования зависят от ОС.

Один из способов проверить, может ли ваш доверенный удаленный сервер подключиться к MongoDB, — это использовать команду nc. Nc (сокращение от netcat) — это утилита, используемая для установления сетевых соединений с TCP или UDP. Она отлично подходит для тестирования в подобных случаях, поскольку позволяет указать как IP-адрес, так и номер порта.

Сначала войдите на свой доверенный сервер по SSH:

ssh 8host@trusted_server_ip

Затем выполните следующую команду nc, которая включает параметр -z. С его помощью nc сканирует только прослушивающий демон на целевом сервере, не отправляя ему каких-либо данных. Как вы уже знаете, установка MongoDB работает как демон, потому этот параметр полезен для тестирования подключения. Команда также включает параметр v, который увеличивает подробность вывода (заставляет netcat выводить некоторые дополнительные данные).

Выполните следующую команду nc со своего доверенного удаленного сервера (не забудьте заменить mongodb_server_ip на IP-адрес сервера MongoDB):

nc -zv mongodb_server_ip 27017

Если доверенный сервер может получить доступ к демону MongoDB, его выходные данные укажут, что соединение было успешным:

Connection to mongodb_server_ip 27017 port [tcp/*] succeeded!

Если на вашем удаленном сервере есть совместимая версия оболочки mongo, на этом этапе вы можете напрямую подключиться к MongoDB.

Один из способов сделать это — использовать URI строки подключения:

mongo "mongodb://mongo_server_ip:27017"

Примечание: Если вы следовали рекомендованному руководству Защита MongoDB в Ubuntu 20.04, доступ к вашей базе данных закрыт для пользователей, не прошедших авторизацию. В этом случае вам нужно использовать URI, указывающий действительное имя пользователя:

mongo "mongodb://username@mongo_server_ip:27017"

Оболочка автоматически предложит вам ввести пароль пользователя.

Итак, вы убедились, что ваш сервер MongoDB может принимать соединения от удаленного сервера.

Заключение

Теперь вы можете получить доступ к своей установке MongoDB с удаленного сервера. Теперь вы можете разместить приложение на доверенном сервере и удаленно использовать базу данных.

Если вы не настроили пользователя с правами администратора и не включили аутентификацию, любой, у кого есть доступ к вашему удаленному серверу, также сможет получить доступ к вашей установке MongoDB. Настоятельно рекомендуем вам выполнить мануал Защита MongoDB в Ubuntu 20.04, чтобы повысить безопасность ваших данных.

Tags: , , , ,

Добавить комментарий