Tutorial

Cómo configurar el acceso remoto para MongoDB en Ubuntu 20.04

Published on September 11, 2020

Manager, Developer Education

Español
Cómo configurar el acceso remoto para MongoDB en Ubuntu 20.04

Melissa Anderson escribió una versión anterior de este tutorial.

Introducción

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.

Requisitos previos

Para completar este tutorial, necesitará lo siguiente:

  • Un servidor con Ubuntu 20.04. Este servidor debería tener un usuario administrativo y un firewall configurado con ufw. Puede establecerlo siguiendo nuestra Guía inicial de configuración del servidor para Ubuntu 20.04.
  • MongoDB instalado en su servidor. Este tutorial asume que tiene instalado MongoDB 4.4 o una versión más reciente. Puede instalar esta versión siguiendo nuestro tutorial en Cómo instalar MongoDB en Ubuntu 20.04.
  • Un segundo equipo desde el cual accederá a su instancia de MongDB. Para mayor simplicidad, este tutorial asume que este equipo es otro servidor Ubuntu 20.04 con un usuario administrativo no root y un firewall UFW configurado siguiendo nuestra guía de configuración inicial para servidores de Ubuntu 20.04. Sin embargo, los Pasos 1 y 2, que describen el procedimiento real para permitir la conectividad remota sobre el servidor de la base de datos, funcionarán independientemente de qué sistemas operativos esté ejecutando el equipo remoto.

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.

Paso 1: Ajuste del firewall

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:

  1. sudo lsof -i | grep mongo

Este resultado de ejemplo muestra que MongoDB está escuchando las conexiones en su puerto predeterminado, 27017:

Output
mongod 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.

  1. 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:

  1. sudo ufw status

El resultado mostrará que el tráfico al puerto 27017 desde el servidor remoto ahora está permitido:

Output
Status: 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.

Paso 2: Configurar una bindIP pública

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:

  1. sudo nano /etc/mongod.conf

Busque la sección network interfaces y, a continuación, el valor bindIp:

/etc/mongod.conf
. . .
# 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:

/etc/mongod.conf
. . .
# 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:

  1. 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.

Paso 3: Probar la conectividad remota

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:

  1. 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:

  1. 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:

Output
Connection 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:

  1. 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:

  1. 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.

Conclusión

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.

Learn more about our products

About the authors
Default avatar

Manager, Developer Education

Technical Writer @ DigitalOcean

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


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!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.