MongoDB представляет собой бесплатную базу данных NoSQL и с открытым исходным кодом, обычно используемую в современных веб – приложениях. Этот учебник поможет вам, как настроить MongoDB на сервере для использовать в производственной среде приложений. Вы будете устанавливать MongoDB и настраивать правила брандмауэра, чтобы ограничить доступ к MongoDB.
Следуя этому руководству, вам потребуется:
MongoDB уже включен в репозиторий Debian, но официальный репозиторий MongoDB предоставляет самую свежую версию и является рекомендуемым способом установки программного обеспечения. На этом шаге мы добавим этот официальный репозиторий на наш сервер.
Debian гарантирует подлинность пакетов программного обеспечения, проверив, что они подписаны с ключами GPG, поэтому мы сначала должны импортировать их ключ для официального репозитория MongoDB.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
После успешного импорта ключа, вы увидите:
gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
Далее, мы должны добавить в apt репозиторий MongoDB так будут знать, куда загружать пакеты.
Выполните следующую команду, чтобы создать файл списка для MongoDB.
echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
После добавления деталей репозитория, обновите список пакетов:
sudo apt-get update
Теперь установите пакет MongoDB с помощью следующей команды:
sudo apt-get install -y mongodb-org
Это устанавливает последнюю стабильную версию MongoDB, наряду с некоторыми полезными инструментами управления для сервера MongoDB.
После того, как MongoDB установлен, запустите службу, и убедитесь, что он запускается при перезагрузке вашего сервера:
sudo systemctl enable mongod.service sudo systemctl start mongod
Затем используйте , systemctl
чтобы проверить, что служба запущена правильно:
sudo systemctl status mongod
Вы должны увидеть следующий вывод, который указывает, что служба работает:
● mongod.service - High-performance, schema-free document-oriented database Loaded: loaded (/lib/systemd/system/mongod.service; enabled) Active: active (running) since Tue 2017-02-28 19:51:51 UTC; 7s ago Docs: https://docs.mongodb.org/manual Main PID: 8958 (mongod) CGroup: /system.slice/mongod.service └─8958 /usr/bin/mongod --quiet --config /etc/mongod.conf Feb 28 19:51:51 cart-61037 systemd[1]: Started High-performance, schema-free document-oriented database.
Теперь, когда MongoDB успешно установлена, давайте защитим его с помощью программного брандмауэра.
В большинстве случаев, MongoDB должны быть доступен только из определенных доверенных местах, таких как другой сервер хостинг приложения. Для выполнения этой задачи, вы можете разрешить доступ по порту MongoDB по умолчанию. При указании IP-адреса другого сервера, которому будет явно разрешено подключение. Мы будем использовать брандмауэр Iptables, чтобы настроить это правило, а также несколько других правил безопасности системы.
Перед тем, как писать какие – либо правила, установите пакет iptables-persistent
, так что вы можете сохранить правила, которые вы создаете. Таким образом, правила будут применяться каждый раз, когда вы перезапустите сервер. Выполните следующую команду:
sudo apt-get install iptables-persistent
Примечание:Во время установки, вам может быть предложено сохранить все существующие правила. Вы можете отказаться от существующих правил.
Затем удалите все существующие правила, которые могут быть, на всякий случай:
sudo iptables -F
Затем добавьте правило, которое позволяет налаженные связи продолжать общаться. Таким образом, наше существующее соединение SSH не будет прервано:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Затем убедитесь, что SSH доступ разрешен:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Если вы планируете подключиться к MongoDB с удаленного сервера, добавьте эти правила, которые позволяют получить доступ к порту MongoDB по умолчанию от сервера приложений:
sudo iptables -A INPUT -s your_other_server_ip -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -d your_other_server_ip -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
Затем добавьте эти правила, допускающие трафик на локальном устройстве:
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT
И, наконец, измените политику брандмауэра, чтобы отбросить все другие виды трафика:
sudo iptables -P INPUT DROP
Кроме того, если вы случайно удалили свои правила, вы будете заблокированы из вашего сервера. Это хорошая идея, чтобы использовать sudo iptables -P INPUT ACCEPT
чтобы разрешить трафик, если вам нужно настроить свои правила в будущем. Затем вы можете использовать sudo iptables -P INPUT DROP
для блокировки, как только вы будете уверены, что все настроены правильно снова.
Убедитесь в том, что правила выглядят правильно:
sudo iptables -S
Вы должны увидеть вывод, подобный этому:
-P INPUT DROP -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -s your_other_server_ip/32 -p tcp -m tcp --dport 27017 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A OUTPUT -d your_other_server_ip/32 -p tcp -m tcp --sport 27017 -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -o lo -j ACCEPT
И, наконец, сохранить правила:
netfilter-persistent save
Чтобы узнать больше об правилах брандмауэра, взгляните на Как использовать Iptables в Linux.
Текущие версии MongoDB не принимают внешние подключения по умолчанию. Если вы ограничили доступ к определенным IP-адресам с брандмауэром, вы можете изменить конфигурацию MongoDB, чтобы подключить удаленные соединения.
Отредактируйте файл конфигурации MongoDB:
sudo nano /etc/mongod.conf
Найдите этот раздел:
# network interfaces net: port: 27017 bindIp: 127.0.0.1
MongoDB прослушивает локальный адрес замыкая на себя, поэтому он будет принимать только локальные соединения. Измените значение bindIp
так, чтобы оно включало в себя IP – адрес сервера MongoDB:
# network interfaces net: port: 27017 bindIp: 127.0.0.1, your_server_ip
Сохраните файл и выйдите из редактора.
Затем перезапустите MongoDB, чтобы применить изменения:
sudo systemctl restart mongod
Теперь Ваш удаленный компьютер должен иметь возможность подключиться. Тем не менее, вы также можете включить проверку подлинности, чтобы обезопасить вашу базу данных еще больше.
Не забудьте создать резервную копию данных и прочитать, как шифровать данные при транспортировке.