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

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

Введение

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

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

Предварительные требования

Для завершения данного обучающего модуля вам потребуется:

  • Сервер на базе Ubuntu 20.04. На сервере должен быть пользователь без привилегий root с правами администратора и брандмауэр, настроенный с помощью UFW. Вы можете выполнить настройку, следуя указаниям руководства Начальная настройка сервера для Ubuntu 20.04.
  • MongoDB, установленная на сервере. Данное обучающее руководство предполагает, что у вас уже установлена MongoDB версии 4.4 или более новой. Вы можете установить эту версию, следуя указаниям руководства Установка MongoDB в Ubuntu 20.04.
  • Второй компьютер, с которого вы получите доступ к вашему экземпляру MongoDB. Для простоты в данном руководстве мы будем считать, что этот компьютер — это еще один сервер Ubuntu 20.04 с пользователем без привилегий root и правами администратора и брандмауэром UFW, настроенным в соответствии с руководством Начальная настройка сервера 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:

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

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

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

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

  • sudo ufw allow from trusted_server_ip to any port 27017

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

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

  • sudo ufw status

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

Output
Status: active

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

 

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

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

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

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

Откройте файл конфигурации MongoDB в предпочитаемом текстовом редакторе. В следующем примере используется nano:

  • sudo nano /etc/mongod.conf

Найдите раздел network interfaces (сетевые интерфейсы), а затем значение bindIp:

/etc/mongod.conf
. . .
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

. . .

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

/etc/mongod.conf
. . .
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,mongodb_server_ip

. . .

Сохраните и закройте файл. Если вы используете nano, нажмите CTRL+XY, затем ENTER.

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

  • sudo systemctl restart mongod

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

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

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

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

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

Вначале войдите на ваш доверенный сервер с помощью SSH:

  • ssh sammy@trusted_server_ip

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

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

  • nc -zv mongodb_server_ip 27017

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

Output
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 с удаленного сервера. На этом этапе вы можете управлять вашей базой данных Mongo удаленно с доверенного сервера. Также вы можете настроить приложение, которое будет работать на доверенном сервере и удаленно использовать базу данных.

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

источник