Configurando la seguridad de mongodb para un entorno de producción
En este artículo os voy a a hablar de cómo realizar la configuracíon necesaria para aplicar seguridad para un entorno de producción de una base de datos mongoDB.
En estos últimos años he visto, cómo la seguridad ha pasado a un segundo plano, una problemática que se debe en parte a la desprofesionalización del sector y la continua pelea por el "yo lo hago más barato".
MongoDB es una de las bases de datos noSQL más usadas, en parte porque nos proveé de una enorme flexibilidad permitiéndonos de esta forma, mejorar nuestra productividad. Precisamente por su uso cotidiano no debemos nunca descuidar o prescindir de las pautas necesarias para configurarla de forma segura. Si la seguridad no se tiene en cuenta, pueden suceder ataques a esta base de datos, como ya han sucedido en su momento por una mala o nula configuración de seguridad por parte de los propietarios de las mismas.
Los puntos sobre los que vamos a trabajar en la configuración de la seguridad de nuestra base de datos, serán los siguientes:
1. Arquitectura
2. IP Binding
3. Firewall
4. Usuarios y Roles
5. SSL
Arquitectura
En esta imagen podemos visualizar la arquitectura implementada: Podemos observar cómo tanto la base de datos como el api que lo llaman disponen de su propio VPS , realizando la comunicación entre ellos a través de una red privada. Aislando cada componente, mejoramos tanto su escalabilidad como la eficiencia de los mismos, haciendo que funcionen de forma independiente .IP Binding
Modificaremos nuestro archivo mongod.conf configurando la propiedad bindip a la ip privada de la instancia, de este modo sólo se podrá acceder a la base de datos desde nuestra red privada. Nuestro archivo de configuración quedaría de la siguiente formaFirewall
Añadiendo un par de simples reglas de firewall podremos restringuir cualquier entrada desde una dirección sospechosa. En este caso el ejemplo os lo dejo usando ufw, ya que mi configuración es sobre ubuntu: En el siguiente comando sustituimos {ip} por la ip privada desde donde se accederá a nuestra base de datos o por aquella donde tengamos desplegada la aplicación que conecta con mongoDB. De esta forma, solo se podrán conectar a nuestra base de datos desde la ip que le indiquemos, haciendo que nuestro firewall bloqueé el resto de peticiones a ese puerto.Usuarios y roles
Una buena practica de seguridad consiste en crear usuarios con los permisos estrictamente necesarios en cada una de nuestras bases de datos. En nuestro caso, crearemos un usuario que pueda leer y modificar evitando cualquier otro privilegio innecesario. Debemos sustituir {user} y {pass} por el usuario y contraseña que deseemos crear y {mydb} por la base de datos sobre la que se aplicará.Si por ejemplo nuestra aplicación solo mostrase información, lo conviente sería aplicar el rol read. Con el rol read nos aseguramos que nunca se pueda escribir en base de datos desde nuestra aplicación.Una vez configurado nuestro usuario y rol, habilitamos este mecanismo de autenticación en nuestro archivo mongod.conf