Knowledge Base
MongoDB открыт в интернет (порт 27017)
MongoDB публично доступен — порт 27017
Категория: Server Hardening · Риск: critical
MongoDB публично доступен — порт 27017
Критическая угроза
MongoDB по умолчанию **не требует аутентификации** и слушает `0.0.0.0:27017`. Тысячи серверов с открытым MongoDB были атакованы — злоумышленники удалили данные и оставили записку с требованием выкупа (MongoDB Ransomware Campaign, 2017–2023).
# Проверка из внешней сети
nc -zv <IP> 27017
# Или mongosh без пароля:
mongosh --host <IP> --port 27017
> show dbs # видит все базы данных
> use myapp
> db.users.find() # полный доступ ко всем данным
Немедленное исправление
1. Закрыть порт файрволом (первый шаг)
# ufw
ufw deny 27017
ufw allow from 127.0.0.1 to any port 27017
# iptables
iptables -A INPUT -p tcp --dport 27017 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 27017 -j DROP
2. Привязать к localhost
# /etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1 # Только локальные подключения
systemctl restart mongod
3. Включить аутентификацию
# /etc/mongod.conf
security:
authorization: enabled
# Создать admin-пользователя (до включения auth)
mongosh --eval '
use admin
db.createUser({
user: "admin",
pwd: "<strong-password>",
roles: [{role: "userAdminAnyDatabase", db: "admin"}, "readWriteAnyDatabase"]
})'
4. Docker Compose — убрать проброс порта
# НЕПРАВИЛЬНО — порт открыт публично:
services:
mongodb:
image: mongo
ports:
- "27017:27017" # ← УБРАТЬ
# ПРАВИЛЬНО — только внутри Docker сети:
services:
mongodb:
image: mongo
expose:
- "27017"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: <strong-password>
Проверка после исправления
# Должно вернуть "Connection refused" или timeout
nc -zv <PUBLIC_IP> 27017
# Локальное подключение должно требовать пароль
mongosh --host 127.0.0.1 --eval "db.adminCommand({listDatabases: 1})"
# MongoServerError: Command listDatabases requires authentication
Связанные проверки
- [Container public ports](/kb/server_hardening/container-public-ports-inventory)
- [Redis открыт публично](/kb/server_hardening/container-public-ports-inventory)