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 configuraciones iptables se dividen en cadenas, que describen el proceso de filtrado y procesamiento de flujos de tráfico específicos. Las cadenas tienen un orden, y los paquetes deben pasar por las reglas anteriores para llegar a las posteriores. Este documento aborda únicamente las dos cadenas siguientes:
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 Cambiar la política predeterminada a DROP.
Patrones
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 mongod instancias
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 tiene un servidor de aplicaciones, puede reemplazar <ip-address> con la propia dirección IP, por ejemplo: 198.51.100.55. También puede expresar esto mediante la notación CIDR como 198.51.100.55/32. Si desea permitir un bloque mayor de posibles direcciones IP, puede permitir el tráfico desde un /24 utilizando una de las siguientes especificaciones para el <ip-address>, como se indica a continuación:
10.10.10.10/24 10.10.10.10/255.255.255.0
Tráfico hacia y desde mongos instancias
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
Reemplace <ip-address> con la dirección de las mongos instancias y las instancias mongod del fragmento.
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
Reemplace la <ip-address> especificación con la dirección IP de todos mongod los. Esto le permite permitir el tráfico entrante y saliente entre todos los fragmentos, incluidos los miembros del conjunto de réplicas, para:
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
Administrar y mantener iptables la configuración
Esta sección contiene varias operaciones básicas para administrar y usar iptables. Existen varias herramientas front-end que automatizan algunos aspectos de la configuración de iptables, pero en esencia, todas las interfaces de iptables ofrecen la misma funcionalidad básica:
Hacer que todas las reglas iptables sean persistentes
De forma predeterminada, todas las reglas iptables se almacenan únicamente en memoria. Al reiniciar el sistema, las reglas del firewall volverán a sus valores predeterminados. Una vez que haya probado un conjunto de reglas y se haya asegurado de que controla eficazmente el tráfico, puede usar las siguientes operaciones para que el conjunto de reglas sea persistente.
En Red Hat Enterprise Linux, Fedora Linux y distribuciones afines, puedes ejecutar el siguiente comando:
service iptables save
En Debian, Ubuntu y distribuciones relacionadas, puede utilizar el siguiente comando para volcar las reglas iptables al 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 iptables reglas
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 ha hecho que sus iptables reglas sean persistentes, deberá repetir el procedimiento apropiado en la sección Hacer que todas las reglas sean persistentes.iptables