Я хочу, чтобы мой веб-сайт использовал MongoDB в качестве хранилища данных. Я без проблем использовал MongoDB в своей среде разработки, но меня беспокоит безопасность общедоступного сервера.
Мой сервер - это VPS под управлением Arch Linux. Веб-приложение также будет работать на нем, поэтому ему нужно только принимать соединения от localhost. И никакие другие пользователи (по ssh или иным образом) не будут иметь прямого доступа к моему серверу.
Что мне делать, чтобы защитить свой экземпляр MongoDB?
Вот хороший контрольный список
Включить аутентификацию. Даже если вы развернули серверы Mongodb в надежной сети, рекомендуется включить аутентификацию. Он обеспечивает «глубокую защиту» в случае взлома вашей сети. Отредактируйте файл конфигурации mongod, чтобы включить аутентификацию
Не размещайте свою рабочую базу данных в Интернете - ограничение физического доступа к базе данных является важным аспектом безопасности. Если в этом нет необходимости, не размещайте свою производственную базу данных в Интернете. В случае любого взлома, если злоумышленник не может физически подключиться к вашему серверу MongoDB, ваши данные будут намного безопаснее. Если вы используете AWS, вы можете разместить свои базы данных в частной подсети VPC. Прочтите сообщение в блоге Развертывание MongoDB в VPC для получения дополнительной информации.
Используйте брандмауэры - используйте брандмауэры, чтобы ограничить, каким другим объектам разрешено подключаться к вашему серверу mongodb. Лучше всего разрешить доступ к базе данных только серверам приложений. Если вы размещены на AWS, используйте «Группы безопасности» для ограничения доступа. Если вы размещены у провайдера, который не поддерживает конструкции брандмауэра, вы можете легко настроить его самостоятельно, используя «iptables». Обратитесь к документации mongodb, чтобы настроить iptables для вашего сценария.
Используйте файлы ключей для настройки набора реплик - укажите файл общего ключа, чтобы разрешить обмен данными между вашими экземплярами mongodb в наборе реплик. Чтобы включить это, добавьте параметр ключевого файла в файл конфигурации, как показано ниже. Содержимое файла должно быть одинаковым на всех машинах.
Отключить интерфейс состояния HTTP. Mongodb по умолчанию предоставляет интерфейс HTTP, работающий по умолчанию на порту 28017, который обеспечивает «домашнюю» страницу состояния. Этот интерфейс не рекомендуется для производственного использования, и его лучше всего отключить. Используйте параметр конфигурации «nohttpinterface», чтобы отключить интерфейс http.
Отключите интерфейс REST. Интерфейс REST monogdb не рекомендуется для производства. Он не поддерживает аутентификацию. По умолчанию он выключен. Если вы включили его с помощью параметра конфигурации «отдых», вам следует отключить его для производственных систем.
Настройте Bind_ip. Если ваша система имеет несколько сетевых интерфейсов, вы можете использовать параметр «bind_ip», чтобы ограничить ваш сервер mongodb прослушиванием только соответствующих интерфейсов. По умолчанию mongodb привязывается ко всем интерфейсам
Включите SSL. Если вы не используете SSL, ваши данные передаются между вашим клиентом Mongo и сервером Mongo в незашифрованном виде и уязвимы для подслушивания, взлома и атак типа «человек посередине». Это особенно важно, если вы подключаетесь к своему серверу Mongodb через незащищенные сети, такие как Интернет.
Авторизация на основе ролей - MongoDB поддерживает аутентификацию на основе ролей, чтобы дать вам точный контроль над действиями, которые могут выполняться каждым пользователем. Используйте конструкции на основе ролей для ограничения доступа вместо того, чтобы делать всех своих пользователей администраторами. Обратитесь к документации по ролям для получения более подробной информации.
Enterprise mongodb и Kerberos Enterprise mongodb интегрируется с Kerberos для аутентификации. Обратитесь к документации mongodb для получения более подробной информации. Системы имен пользователей и паролей по своей сути небезопасны - по возможности используйте аутентификацию на основе ограничений.
https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/
Отказ от ответственности: я являюсь основателем scalegrid.io
Безопасность и аутентификация Документация MongoDB.
Mongo поддерживает только самую базовую безопасность:
тот же запрос хорошо обсуждался здесь ~ https://security.stackexchange.com/questions/7610/how-to-secure-a-mongodb-instance/7655#7655
Несколько важных вещей, которые следует запомнить:
Remove IP Binding from all to just the IP (private or localhost), you expect to get Connection Request
Change the default Port Bindings
Give only required permissions (like no update/delete permissions to select query users)
Setup ssh keys for required master-slave connection, removing involvement of passwords
You can even setup an encrypted tunnel for connection between your application and mongodb
фактически они применимы ко всем службам хранилища данных
PS: очень ограниченный опыт mongodb
В целях безопасности лучше предотвратить любой внешний доступ к узлу MongoDB. Вы можете запустить приложение и MongoDB на разных узлах. Узел приложения доступен извне, а узел MongoDB открывает только порт MongoDB для узла приложения.
Также следите за Официальный контрольный список безопасности MongoDB для защиты MongoDB.
FireCamp автоматизирует его в облаке, например AWS. FireCamp обеспечивает безопасность. 1) AppAccessSecurityGroup - единственная, кому разрешен доступ к MongoDB. Создайте узел своего приложения в AppAccessSecurityGroup и VPC, на котором работает узел MongoDB. 2) Создан узел Bastion, единственный, который может подключаться по SSH к узлам MongoDB. 3) Включены аутентификация пользователей MongoDB и контроль доступа между членами ReplicaSet.