Puerto 3000 (Desarrollo (Node.js, Grafana)): para qué sirve y cómo protegerlo
El puerto 3000 TCP no está asignado a ningún servicio oficial, pero es el puerto por defecto de muchos servidores de desarrollo (Create React App, Next.js, Express) y de Grafana. Si aparece abierto en un servidor de producción, conviene revisar qué lo usa: a menudo es un servidor de desarrollo que se quedó expuesto.
Qué es el puerto 3000
Los servidores de desarrollo no están pensados para Internet: no minifican, muestran errores detallados y a veces exponen el código fuente. En producción, la aplicación debe compilarse y servirse detrás de un proxy (nginx) por el 443.
¿Es peligroso tener abierto el puerto 3000?
Riesgo medio: Solo expuesto con autenticación fuerte o limitado por IP.
- Servidores de desarrollo con mensajes de error y código visibles.
- Grafana con la contraseña por defecto (admin/admin).
Cómo proteger el puerto 3000
- Publica el servicio detrás de nginx o Caddy con HTTPS.
- Haz que el servicio escuche solo en 127.0.0.1.
- En Docker Compose: "127.0.0.1:3000:3000" en lugar de "3000:3000".
Comandos y configuración
Comprobar si el puerto 3000 está abierto
sudo ss -tlnp | grep ':3000 '
nc -zv 203.0.113.10 3000
sudo nmap -p 3000 203.0.113.10¿Qué proceso usa el puerto 3000?
sudo lsof -i :3000
sudo ss -tlnp | grep ':3000 'Liberar el puerto (matar el proceso)
kill $(lsof -t -i :3000)También puedes comprobarlo desde fuera de tu red con nuestro escáner de puertos online.
Herramientas para comprobarlo
Preguntas frecuentes
¿Por qué Docker se salta ufw y mi puerto 3000 es accesible desde fuera?
Docker escribe sus propias reglas de iptables y los puertos publicados con -p quedan abiertos aunque ufw diga lo contrario. Publica solo en 127.0.0.1 (127.0.0.1:3000:3000) y deja el acceso externo al proxy.
"Something is already running on port 3000"
Otro proceso (a menudo un servidor de desarrollo anterior) usa el puerto. Búscalo con lsof -i :3000 y ciérralo, o arranca en otro puerto con PORT=3001.