Manager, Developer Education
Предыдущая версия данного руководства была написана Мелиссой Андерсон.
MongoDB (или Mongo) — это документоориентированная база данных с открытым исходным кодом, используемая во многих современных веб-приложениях. По умолчанию она допускает только те подключения, которые исходят с того же сервера, на котором она установлена. Если вы хотите управлять MongoDB удаленно или подключить ее к отдельному серверу приложения, вам необходимо будет внести несколько изменений в исходную конфигурацию по умолчанию.
В этом обучающем руководстве мы настроим систему MongoDB для безопасного доступа с доверенного удаленного компьютера. Для этого вам нужно будет обновить правила брандмауэра, чтобы обеспечить удаленному компьютеру доступ к порту, на котором MongoDB слушает подключения, и обновить файл конфигурации для изменения параметра привязки IP-адреса. А затем, в качестве завершающего шага, вы проверите, сможет ли ваш удаленный компьютер успешно подключиться к вашей базе данных.
Для завершения данного обучающего модуля вам потребуется:
Наконец, мы настоятельно рекомендуем вам обеспечить безопасность системы MongoDB путем создания учетной записи пользователя с правами администратора для базы данных и обеспечения аутентификации, хотя это и не требуется для выполнения данного обучающего модуля. Для этого следуйте указаниям руководства Обеспечение безопасности MongoDB в Ubuntu 20.04.
Если вы выполнили начальную инструкцию по настройке сервера и включили брандмауэр UFW на вашем сервере, тогда ваша система MongoDB будет недоступна из Интернета. Если вы собираетесь использовать MongoDB только локально с запуском приложений на том же сервере, эту безопасную настройку рекомендуется сохранить. Но если вы хотите иметь возможность подключаться к серверу MongoDB с удаленной локации, вам нужно разрешить входящие подключения к порту, на котором прослушивается база данных. Для этого нужно добавить новое правило UFW.
Для начала проверьте порт, на котором прослушивается ваша система MongoDB, с помощью команды lsof
. Эта команда обычно возвращает список со всеми открытыми файлами в системе, но при сочетании с опцией -i
она указывает только сетевые файлы или потоки данных.
Следующая команда перенаправляет вывод команды lsof -i
на команду grep
, которая ищет строку с именем mongo
:
- sudo lsof -i | grep mongo
Этот пример вывода показывает, что MongoDB прослушивает подключения на порту по умолчанию 27017
:
Outputmongod 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
с удаленного сервера сейчас разрешен:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
27017 ALLOW trusted_server_ip
OpenSSH (v6) ALLOW Anywhere (v6)
Дополнительные настройки брандмауэра для ограничения доступа к службам можно найти в разделе Основы UFW: распространенные правила и команды брандмауэра.
В следующем шаге мы свяжем MongoDB с публичным IP-адресом сервера, чтобы получить доступ с удаленного компьютера.
На этом этапе даже при открытом порте система MongoDB привязана к 127.0.0.1
, локальному кольцевому сетевому интерфейсу. Это означает, что база данных MongoDB может принимать только те подключения, которые исходят с сервера, на котором она установлена.
Чтобы разрешить удаленные подключения, необходимо отредактировать файл конфигурации MongoDB — /etc/mongod.conf
— для дополнительной привязки MongoDB к публичному маршрутизированному IP-адресу вашего сервера. Таким образом ваша система MongoDB сможет прослушивать подключения к вашему серверу MongoDB, выполненные с удаленных компьютеров.
Откройте файл конфигурации MongoDB в предпочитаемом текстовом редакторе. В следующем примере используется nano
:
- 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
. . .
Сохраните и закройте файл. Если вы используете nano
, нажмите CTRL+X
, Y
, затем ENTER
.
Затем перезапустите MongoDB, чтобы изменение вступило в силу:
- sudo systemctl restart mongod
После этого ваша система MongoDB сможет принимать удаленные подключения с любых компьютеров, которым вы разрешите доступ к порту 27017
. В качестве завершающего шага вы можете проверить, сможет ли доверенный удаленный сервер, которому вы разрешили доступ через брандмауэр на шаге 1, связаться с экземпляром MongoDB, работающем на вашем сервере.
Теперь, когда вы настроили систему MongoDB для прослушивания подключений, исходящих с ее публичного маршрутизированного IP-адреса, и предоставили удаленному компьютеру доступ через брандмауэр сервера к порту по умолчанию Mongo, можно проверить, сможет ли удаленный компьютер выполнить подключение.
Примечание. Как указано в разделе «Предварительные требования», это обучающее руководство предполагает, что ваш удаленный компьютер — это еще один сервер на базе Ubuntu 20.04. Процедура по обеспечению удаленных подключений, описанная в шагах 1 и 2, должна работать независимо от операционной системы вашего удаленного компьютера. Однако методы тестирования, описанные в этом шаге, не являются универсальными для всех операционных систем.
Один из способов проверки возможности подключения вашего доверенного удаленного сервера к экземпляру MongoDB — это использование команды nc
. nc
(сокращенно от 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, его вывод будет означать, что подключение было успешным:
OutputConnection 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. Если вы еще не сделали этого, мы настоятельно рекомендуем вам следовать инструкциям руководства Обеспечение безопасности MongoDB в Ubuntu 20.04, чтобы добавить пользователя с правами администратора и дополнительные ограничения.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.