Puerto 27017 (MongoDB): para qué sirve y cómo protegerlo
El puerto 27017 TCP es el puerto por defecto de MongoDB. Durante años MongoDB se instalaba sin autenticación y escuchando en todas las interfaces, lo que provocó miles de bases de datos borradas y secuestradas a cambio de un rescate. Debe escuchar solo en local o en la red interna, siempre con autenticación.
Qué es el puerto 27017
Desde la versión 3.6, MongoDB escucha por defecto solo en localhost. El problema reaparece cuando se publica el puerto en Docker ("27017:27017") o se cambia bindIp a 0.0.0.0 para conectar con Compass desde casa.
En Docker Compose, lo habitual es no publicar el puerto en absoluto: el backend llega a la base de datos por la red interna de Docker usando el nombre del servicio (mongodb://mongodb:27017).
¿Es peligroso tener abierto el puerto 27017?
Riesgo alto: No debe estar abierto a Internet.
- Bases de datos borradas y notas de rescate.
- Filtración de datos.
Cómo proteger el puerto 27017
- security.authorization: enabled.
- bindIp: 127.0.0.1 o la IP interna.
- En Docker, sin ports: la red interna basta.
- Túnel SSH para usar Compass.
Comandos y configuración
Comprobar si el puerto 27017 está abierto
sudo ss -tlnp | grep ':27017 '
nc -zv 203.0.113.10 27017
sudo nmap -p 27017 203.0.113.10/etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1
security:
authorization: enabledCompass a través de un túnel SSH
ssh -N -L 27018:127.0.0.1:27017 ana@203.0.113.10
# en Compass: mongodb://usuario:clave@127.0.0.1:27018/?authSource=adminTambién puedes comprobarlo desde fuera de tu red con nuestro escáner de puertos online.
Herramientas para comprobarlo
Preguntas frecuentes
¿Es peligroso exponer MongoDB?
Mucho. Los bots buscan el 27017 continuamente; una instancia sin autenticación se vacía y se secuestra en cuestión de horas.