¿Cómo configurar mi servidor con MongoDB en forma segura?

A continuación te mostraremos como configurar tu servidor con MongoDB en forma segura, cómo crear bases de datos, usuarios con permisos específicos y conectarte en forma remota.

1) Habilitar el puerto 20017 en el firewall

Para mayor seguridad, el puerto 20017 utilizado por MongoDB se encuentra cerrado por defecto y debes crear una regla de Firewall que lo abra.

Si desconoces cuales son las IPs desde las cuales, tu o tu aplicación, se conectarán al servidor de MongoDB, utiliza 0.0.0.0/0. Así permitirás que cualquier IP pueda conectarse a MongoDB. Sin embargo, te recomendamos crear reglas con las IPs específicas para brindarle mayor seguridad a tus bases de datos.

2) Verificar la versión de MongoDB

Accede a través de la consola SSH a tu servidor y verifica la versión de MongoDB con el siguiente comando:

mongod --version

Conocer la versión te servirá más adelante si decides utilizar un cliente con interfaz gráfica para administrar tus bases de datos y usuarios, ya que no todas tienen soporte para las últimas versiones de MongoDB.

3) Crear un usuario administrador

Ahora, a través de la consola SSH y utilizando los siguientes comandos, creamos un usuario con los permisos necesarios para administrar cualquier base de datos del servidor MongoDB.

Para ello, ejecutamos una instancia de MongoShell y lo hacemos en el puerto en el cual está configurado con el siguiente comando:

mongo --port 20017
use admin
db.createUser(
{
user: "myServerAdmin",
pwd: "mipassword",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
);

Cambia los datos “user” y “pwd” del código de arriba, con el usuario y contraseña que decidas utilizar.

4) Restringir el acceso No Autenticado

Por defecto, es posible acceder al servidor de MongoDB sin necesidad de autenticarse y esto genera problemas de seguridad. Ahora que ya disponemos de un usuario con los privilegios suficientes, cambiaremos la configuración para restringir el acceso mediante autenticación.

Para ello, editamos el archivo mongod.conf, quitando el comentario de la línea donde se encuentra auth = true

mcedit /etc/mongod.conf

Una vez guardado el cambio, reiniciamos el servicio de MongoDB para que los mismos hagan efecto.

service mongod restart

A partir de ahora podremos acceder a la consola MongoShell autenticándonos como el usuario administrador que creamos en el paso 3. Ingresa el usuario y contraseña que elegiste en lugar de “myServerAdmin” y “mipassword”.

mongo --port 20017 -u myServerAdmin -p mipassword --authenticationDatabase admin

5) Crear una Base de Datos y un usuario para la misma

Ahora, crearemos la base de datos que utilizaremos para nuestra aplicación. A diferencia de servidores como MySQL donde hay un comando explícito para crearlas, en MongoDB las base de datos se crean insertando el primer contenido (una colección) o creando un usuario para la misma.

En nuestro caso crearemos un base de datos llamada test agregándole un usuario llamado myDbAdmin.

use test
db.createUser(
{
user: "myDbAdmin",
pwd: "mipassword",
roles: [ { role: "readWrite", db: "test" } ]
}
);

Una vez listo, para acceder a la base de datos recién creada utilizamos el siguiente comando:

mongo --port 20017 -u myDbAdmin -p mipassword --authenticationDatabase test

6) Insertar los primeros datos (colección)

Ahora veremos, a través de un ejemplo, como insertar una colección de datos en la base que acabamos de crear.

use test
db.personal.save({nombre:'Ariel Perez',edad:23})
db.personal.save({nombre:'Diego Angel',edad:32})
db.personal.find()

Al hacerlo, veremos en pantalla los siguientes resultados:

{ "_id" : ObjectId("55d87309d6b60ea1b22fb2ad"), "nombre" : "Ariel Perez", "edad" : 23 }
{ "_id" : ObjectId("55d87311d6b60ea1b22fb2ae"), "nombre" : "Diego Angel", "edad" : 32 }

7) Aprovechar una interfaz gráfica

Si bien la consola MongoShell nos permite hacer prácticamente de todo con nuestro MongoDB, utilizar interfaces gráficas en la administración de bases de datos simplifica mucho la tarea.

En el mercado existen muchos clientes de administración para MongoDB y la gran mayoría son pagos. Algunos de los gratuitos que podemos sugerirte son Mongo Management Studio o MongoChef

mongodb://usuario:[email protected]:puerto/nombre_db

Y en el ejemplo que utilizamos quedaría:

mongodb://myDbAdmin:[email protected]:20017/test