Manager, Developer Education
Melissa Anderson escribió una versión anterior de este tutorial.
MongoDB, también conocido como Mongo, es una base de datos de documentos de código abierto usada comúnmente en las aplicaciones web modernas. Por defecto, solo permite conexiones que se originan en el mismo servidor donde está instalado. Si desea administrar MongoDB de forma remota o conectarlo a un servidor de aplicaciones independiente, existen algunos cambios que deberá realizar a la configuración predeterminada.
En este tutorial, configurará una instalación de MongoDB para permitir el acceso de forma segura desde un equipo remoto de confianza. Para hacer esto, actualizará las reglas de su firewall para proporcionar acceso del equipo remoto al puerto sobre el cual MongoDB está escuchando las conexiones, y a continuación actualizará su archivo de configuración para cambiar su ajuste de vinculación de IP. Luego, como paso final, probará que su equipo remoto puede realizar la conexión a su base de datos correctamente.
Para completar este tutorial, necesitará lo siguiente:
Finalmente, aunque no es necesario para completar este tutorial, recomendamos encarecidamente que proteja su instalación de MongoDB creando una cuenta de usuario administrativo para la base de datos y permitiendo la autenticación. Para hacer esto, siga nuestro tutorial sobre Cómo proteger MongoDB en Ubuntu 20.04.
Asumiendo que siguió el tutorial de requisitos previos de configuración inicial del servidor y habilitó un firewall UFW en su servidor, su instalación de MongoDB será inaccesible desde Internet. Si tiene intención de usar el servidor de MongoDB solo a nivel local con aplicaciones que se ejecuten en el mismo servidor, este es el ajuste recomendado y seguro. Sin embargo, si desea poder conectar con su servidor MongoDB desde una ubicación remota, tendrá que permitir las conexiones entrantes al puerto donde está escuchando la base de datos añadiendo una nueva regla UFW.
Comience verificando en qué puerto está escuchando la instalación de MongoDB con el comando lsof
. Este comando normalmente devuelve una lista con cada archivo abierto en un sistema, pero cuando se combina con la opción -i
, lista solo los archivos o corrientes de datos relacionados con la red:
El siguiente comando redirigirá el resultado producido por lsof -i
a un comando grep
que busca una cadena llamada mongo
:
- sudo lsof -i | grep mongo
Este resultado de ejemplo muestra que MongoDB está escuchando las conexiones en su puerto predeterminado, 27017
:
Outputmongod 82221 mongodb 11u IPv4 913411 0t0 TCP localhost:27017 (LISTEN)
En la mayoría de los casos, solo se debe acceder a MongoDB desde determinadas ubicaciones de confianza, como otro servidor que aloje una aplicación. Una forma de configurar esto es ejecutar el siguiente comando en su servidor MongoDB, que abre el acceso en el puerto predeterminado de Mongo mientras que explícitamente solo permite la dirección IP del otro servidor de confianza.
Ejecute el siguiente comando, asegurándose de cambiar trusted_server_ip
a la dirección IP del equipo remoto de confianza que usará para acceder a su instancia de MongoDB:
Nota: Si el resultado del comando anterior mostró que su instalación de MongoDB está escuchando sobre un puerto no predeterminado, utilice ese número de puerto en lugar de 27017
en este comando.
- sudo ufw allow from trusted_server_ip to any port 27017
En el futuro, si alguna vez quiere acceder a MongoDB desde otro equipo, ejecute este comando de nuevo con la dirección IP del nuevo equipo en lugar de trusted_server_ip
.
Puede verificar el cambio en los ajustes del firewall con ufw
:
- sudo ufw status
El resultado mostrará que el tráfico al puerto 27017
desde el servidor remoto ahora está permitido:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
27017 ALLOW trusted_server_ip
OpenSSH (v6) ALLOW Anywhere (v6)
Puede encontrar ajustes de firewall más avanzados para restringir el acceso a servicios en Aspectos básicos de UFW: Reglas y comandos comunes de firewall.
A continuación, vinculará MongoDB a la dirección IP pública del servidor para que pueda acceder a él desde su equipo remoto.
En este momento, aunque el puerto está abierto, MongoDB está actualmente vinculado a 127.0.0.1
, la interfaz de red loopback. Esto significa que MongoDB solo puede aceptar conexiones que se originen en el servidor donde está instalado.
Para permitir conexiones remotas, debe editar el archivo de configuración de MongoDB (/etc/mongod.conf
) para vincular adicionalmente MongoDB a la dirección IP públicamente dirigible de su servidor. De esta forma, su instalación de MongoDB podrá escuchar las conexiones realizadas a su servidor MongoDB desde equipos remotos.
Abra el archivo de configuración de MongoDB en su editor de texto preferido: El siguiente ejemplo utiliza nano
:
- sudo nano /etc/mongod.conf
Busque la sección network interfaces
y, a continuación, el valor bindIp
:
. . .
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
. . .
Añada una coma a esta línea seguida de la dirección IP pública de su servidor MongoDB:
. . .
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,mongodb_server_ip
. . .
Guarde y cierre el archivo. Si utiliza nano
, podrá hacerlo presionando CTRL+X
, Y
y luego ENTER
.
A continuación, reinicie MongoDB para que este cambio surta efecto:
- sudo systemctl restart mongod
Tras eso, su instalación de MongoDB podrá aceptar conexiones remotas desde cualquier equipo al que haya permitido acceder al puerto 27017
. Como paso final, puede probar si el servidor remoto de confianza que permitió a través del firewall en el Paso 1 puede llegar a la instancia de MongoDB que se ejecuta en su servidor.
Ahora que ha configurado su instalación de MongoDB para que escuche las conexiones que se originan en su dirección IP dirigible públicamente y ha concedido a su equipo remoto acceso a través del firewall de su servidor al puerto predeterminado de Mongo, puede probar que el equipo remoto puede conectarse.
Nota: Como se mencionó en la sección Requisitos previos, este tutorial asume que su equipo remoto es otro servidor con Ubuntu 20.04. El procedimiento para permitir las conexiones remotas descrito en los Pasos 1 y 2 debería funcionar independientemente de qué sistema operativo ejecute su equipo remoto, pero los métodos de prueba descritos en este Paso no funcionan universalmente entre sistemas operativos.
Una forma de probar que su servidor remoto de confianza puede conectarse a la instancia de MongoDB es usar el comando nc
. nc
, abreviatura de netcat, es una utilidad usada para establecer conexiones de red con TCP o UDP. Es útil para probar en casos como este porque le permite especificar una dirección IP y un número de puerto.
Primero, inicie sesión en su servidor de confianza usando SSH:
- ssh sammy@trusted_server_ip
A continuación, ejecute el siguiente comando nc
, que incluye la opción -z
. Esto limita a nc
para que solo analice un daemon de escucha en el servidor de destino sin enviar datos. Recuerde del tutorial de instalación de requisitos previos que MongoDB está ejecutándose como un daemon de servicio, lo que hace que esta opción sea útil para probar la conectividad. También incluye la opción v
que aumenta la verbosidad del comando, lo que hace que netcat devuelva un resultado que de otra forma no devolvería.
Ejecute el siguiente comando nc
desde su servidor remoto de confianza, asegurándose de sustituir mongodb_server_ip
con la dirección IP del servidor sobre el cual instaló MongoDB:
- nc -zv mongodb_server_ip 27017
Si el servidor de confianza puede acceder al daemon de MongoDB, su resultado indicará que la conexión se realizó correctamente:
OutputConnection to mongodb_server_ip 27017 port [tcp/*] succeeded!
Asumiendo que tenga una versión compatible del shell de mongo
instalado en su servidor remoto, puede en este momento conectar directamente con la instancia de MongoDB instalada en el servidor host.
Una forma de conectar es con una URI de cadena de conexión, como esta:
- mongo "mongodb://mongo_server_ip:27017"
Nota: Si siguió el tutorial recomendado Cómo proteger MongoDB en Ubuntu 20.04, habrá cerrado el acceso a su base de datos para los usuarios sin autenticar. En este caso, necesitará usar una URI que especifique un nombre de usuario válido, como esta:
- mongo "mongodb://username@mongo_server_ip:27017"
El shell le pedirá automáticamente que introduzca la contraseña del usuario.
Con eso, ha confirmado que su servidor MongoDB puede aceptar conexiones desde el servidor de confianza.
Ahora puede acceder a su instalación de MongoDB desde un servidor remoto. En este momento, puede administrar su base de datos Mongo remotamente desde el servidor de confianza. Alternativamente, podría configurar una aplicación para que se ejecute en el servidor remoto y utilice la base de datos remotamente.
Si no ha configurado un usuario administrativo y habilitado la autenticación, cualquiera que tenga acceso a su servidor remoto podrá acceder también a su instalación de MongoDB. Si aún no lo ha hecho, le recomendamos encarecidamente que siga nuestra guía sobre Cómo proteger MongoDB en Ubuntu 20.04 para añadir usuario administrativo y habilitar un bloqueo adicional.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!