En los sistemas Linux contemporáneos, el programa iptables proporciona métodos para gestionar las capacidades de netfilter o filtrado de paquetes de red del kernel de Linux. Estas reglas de firewall permiten a los administradores controlar qué hosts pueden conectarse al sistema y limitar la exposición al riesgo limitando los hosts que pueden conectarse a un sistema.
Este documento describe las configuraciones básicas del cortafuegos para los cortafuegos iptables en Linux. Utiliza estos enfoques como punto de partida para tu organización de redes más grande. Para obtener una visión detallada de las prácticas de seguridad y la gestión de riesgos para MongoDB, consulta Seguridad.
Overview
Las reglas en las configuraciones de iptables se agrupan en cadenas, que describen el proceso para filtrar y procesar flujos específicos de tráfico. Las cadenas tienen un orden, y los paquetes deben pasar por reglas anteriores en una cadena para llegar a reglas posteriores. Este documento solo aborda las siguientes dos cadenas:
INPUT- Controla todo el tráfico entrante.
OUTPUT- Controla todo el tráfico saliente.
Dado que los puertos por defecto de todos los procesos de MongoDB, es necesario configurar reglas de red que permitan solo la comunicación requerida entre su aplicación y las instancias apropiadas de mongod y mongos.
Tenga en cuenta que, por defecto, la política por defecto de iptables es permitir todas las conexiones y el tráfico a menos que se deshabiliten explícitamente. Los cambios de configuración descritos en este documento crearán reglas para permitir explícitamente el tráfico proveniente de direcciones específicas y en puertos determinados, utilizando una política por defecto que descarta todo el tráfico que no esté explícitamente permitido. Cuando hayas configurado correctamente tus reglas iptables para permitir sólo el tráfico que deseas autorizar, puedes Cambie la política por defecto a DROP.
patrón
Esta sección contiene varios patrones y ejemplos para configurar iptables en despliegues de MongoDB. Si ha configurado diferentes puertos utilizando la configuración port, deberá modificar las reglas en consecuencia.
Tráfico hacia y desde Instancias mongod
Este patrón es aplicable a todas las instancias de mongod que se ejecutan como instancias autónomo o como parte de un set de réplicas.
El objetivo de este patrón es permitir explícitamente el tráfico a la instancia mongod desde el servidor de aplicaciones. En los siguientes ejemplos, reemplaza <ip-address> con la dirección IP del servidor de aplicaciones:
iptables -A INPUT -s <ip-address> -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT
La primera regla permite todo el tráfico entrante desde <ip-address> en el puerto 27017, lo que permite al servidor de la aplicación conectarse a la instancia mongod. La segunda regla permite el tráfico saliente desde mongod para llegar al servidor de la aplicación.
Nota
Opcional
Si solo tienes un servidor de aplicaciones, puedes reemplazar <ip-address> con la dirección IP, como por ejemplo: 198.51.100.55. También puedes expresar esto utilizando notación CIDR como 198.51.100.55/32. Si deseas permitir un bloque más grande de posibles direcciones IP, puedes permitir el tráfico desde un /24 utilizando una de las siguientes especificaciones para el <ip-address>, de la siguiente manera:
10.10.10.10/24 10.10.10.10/255.255.255.0
Tráfico hacia y desde Instancias mongos
Las instancias mongos proporcionan enrutamiento de consultas para los clústeres fragmentados. Los clientes se conectan a instancias de mongos, que se comportan desde la perspectiva del cliente como instancias de mongod. A su vez, el mongos se conecta a todas las instancias mongod que son componentes del clúster particionado.
Utiliza el mismo comando iptables para permitir el tráfico hacia y desde estas instancias como lo harías desde las instancias mongod que son miembros del set de réplicas. Toma como ejemplo la configuración descrita en la sección Tráfico hacia y desde las instancias mongod .
Tráfico hacia y desde un servidor de configuración de MongoDB
Los servidores de configuración alojan la base de datos de configuración que almacena metadatos para clústeres particionados. Los servidores de configuración escuchan conexiones en el puerto 27019. Como resultado, añade las siguientes reglas iptables al servidor de configuración para permitir conexiones entrantes y salientes en el puerto 27019, para la conexión con los demás servidores de configuración.
iptables -A INPUT -s <ip-address> -p tcp --destination-port 27019 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27019 -m state --state ESTABLISHED -j ACCEPT
Reemplace <ip-address> con la dirección o el espacio de dirección de todos los mongod que proveen servidores de configuración.
Además, los servidores de configuración deben permitir conexiones entrantes desde todas las instancias mongos en el clúster y todas las instancias mongod en el clúster. Agrega reglas que se parezcan a las siguientes:
iptables -A INPUT -s <ip-address> -p tcp --destination-port 27019 -m state --state NEW,ESTABLISHED -j ACCEPT
Reemplaza <ip-address> con la dirección de las instancias mongos y de las instancias de particiones mongod.
Tráfico hacia y desde un servidor de partición de MongoDB
Los servidores de partición usan por defecto el puerto número 27018. Debe configurar las siguientes iptables reglas para permitir el tráfico hacia y desde cada partición:
iptables -A INPUT -s <ip-address> -p tcp --destination-port 27018 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27018 -m state --state ESTABLISHED -j ACCEPT
Reemplazar la especificación <ip-address> con la dirección IP de todos los mongod. Esto te permite permitir el tráfico entrante y saliente entre todas las particiones, incluidos los miembros constituyentes del conjunto de réplicas, en:
todas las
mongodinstancias en los conjuntos de réplicas de la partición.
Además, las particiones deben poder realizar conexiones salientes con:
todas las instancias
mongoden los servidores de configuración.
Crea una regla que sea similar a la siguiente y sustituye <ip-address> por la dirección de los servidores de configuración y las instancias mongos:
iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27018 -m state --state ESTABLISHED -j ACCEPT
| [1] | Todas las particiones en un clúster deben poder comunicarse con todas las demás particiones para facilitar las operaciones de fragmento y balanceo. |
Proporcionar acceso a los sistemas de supervisión
La mongostat herramienta de diagnóstico, cuando se ejecuta con la --discover necesita poder alcanzar todos los componentes de un clúster, incluidos los servidores de configuración, los servidores de particiones y las instancias de mongos.
Cambiar la Política por Defecto a DROP
La política por defecto para las cadenas iptables es permitir todo el tráfico. Después de completar todos los cambios de configuración de iptables, debe cambiar la política por defecto a DROP para que todo el tráfico que no esté explícitamente permitido como se indicó anteriormente no pueda alcanzar los componentes de la implementación de MongoDB. Ejecute los siguientes comandos para cambiar esta política:
iptables -P INPUT DROP iptables -P OUTPUT DROP
Gestione y mantenga la configuración de iptables
Esta sección contiene una serie de operaciones básicas para gestionar y utilizar iptables. Existen varias herramientas front-end que automatizan algunos aspectos de la configuración de iptables, pero en el núcleo, todos los front-end de iptables proporcionan la misma funcionalidad básica:
Hacer que todas las reglas iptables sean persistentes
Por defecto, todas las reglas de iptables sólo se almacenan en memoria. Cuando el sistema se reinicie, las reglas del firewall volverán a ser por defecto. Cuando hayas probado un conjunto de reglas y hayas garantizado que controla el tráfico de manera efectiva, puedes utilizar las siguientes operaciones para hacer persistente el conjunto de reglas.
En Red Hat Enterprise Linux, Fedora Linux y distribuciones afines, puedes ejecutar el siguiente comando:
service iptables save
En Debian, Ubuntu y otras distribuciones relacionadas, puedes utilizar el siguiente comando para volcar las reglas de iptables en el archivo /etc/iptables.conf:
iptables-save > /etc/iptables.conf
Ejecute la siguiente operación para restaurar las reglas de red:
iptables-restore < /etc/iptables.conf
Coloca este comando en tu archivo rc.local, o en el archivo /etc/network/if-up.d/iptables junto con otras operaciones similares.
Listar todas las reglas de iptables
Para listar todas las reglas del iptables aplicadas actualmente, utiliza la siguiente operación en la shell del sistema.
iptables -L
Desactivar todas las reglas iptables
Si comete un error de configuración al ingresar las reglas de iptables o simplemente necesita revertir el conjunto de reglas por defecto, puede utilizar la siguiente operación en el shell del sistema para borrar todas las reglas:
iptables -F
Si ya has hecho persistentes tus reglas de iptables, deberás repetir el procedimiento correspondiente en la sección Hacer persistentes todas las reglas de iptables .