En los sistemas Linux actuales, el programa iptables proporciona métodos para administrar las capacidades de filtrado de paquetes de red o netfilter 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 al limitar los hosts que pueden conectarse a un sistema.
Este documento describe las configuraciones básicas de firewall para los firewalls iptables en Linux. Utilice estos enfoques como punto de partida para su organización de redes más grande. Para obtener una descripción detallada de las prácticas de seguridad y la gestión de riesgos para MongoDB, consulte 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.
Dados los puertos predeterminados de todos los procesos de MongoDB, debe configurar reglas de red que permitan solo la comunicación requerida entre su aplicación y las instancias mongod y mongos apropiadas.
Tenga en cuenta que, por defecto, la política predeterminada de iptables es permitir todas las conexiones y el tráfico a menos que se deshabilite explícitamente. Los cambios de configuración descritos en este documento crearán reglas que permiten explícitamente el tráfico desde direcciones y puertos específicos, utilizando una política predeterminada que descarta todo el tráfico no permitido explícitamente. Una vez configuradas correctamente las reglas de iptables para permitir solo el tráfico que desea, puede... 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 que se ejecutan como instancias independientes o como parte de un mongod conjuntode réplicas.
El objetivo de este patrón es permitir explícitamente el tráfico a la instancia desde el servidor de aplicaciones. En los siguientes ejemplos,mongod sustituya <ip-address> por 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 27017 el puerto, lo que permite que el servidor de aplicaciones se conecte a la mongod instancia. La segunda regla permite que el tráfico saliente mongod desde llegue al servidor de aplicaciones.
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
mongos Las instancias proporcionan enrutamiento de consultas para clústeres fragmentados. Los clientes se conectan a las mongos instancias, que se comportan como desde la perspectiva del cliente. A su vez, la instancia mongod se mongos conecta a las mongod instancias que componen el clúster fragmentado.
Use el mismo iptables comando para permitir el tráfico hacia y desde estas instancias, tal como lo haría desde las mongod instancias que pertenecen al conjunto de réplicas. Tome como ejemplo la configuración descrita en la sección Tráfico hacia y desde mongod las instancias.
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 los metadatos de los clústeres fragmentados. Los servidores de configuración escuchan las conexiones en el 27019 puerto. Por lo tanto, agregue las siguientes iptables reglas al servidor de configuración para permitir las 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 direcciones de todos los que proporcionan servidores de mongod 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 fragmentos 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 instancias en los conjuntos de réplicas del
mongodfragmento.
Además, los fragmentos deben poder realizar conexiones salientes a:
todas las instancias en los servidores de
mongodconfiguración.
Cree una regla que se parezca a la siguiente y reemplace <ip-address> con la dirección de los servidores de configuración y las mongos instancias:
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 monitoreo
La mongostat herramienta de diagnóstico, cuando se ejecuta con,--discover debe mongos poder llegar a todos los componentes de un clúster, incluidos los servidores de configuración, los servidores de fragmentos y las instancias.
Cambiar la política predeterminada a DROP
La política predeterminada para las iptables cadenas es permitir todo el tráfico. Tras completar todos los iptables cambios de configuración de,debe cambiar la política predeterminada a DROP para que el tráfico no permitido explícitamente, como se indicó anteriormente, no pueda acceder a 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 sean persistentes iptables
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 relacionadas, puede 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
Coloque este comando en su archivo rc.local, o en el archivo /etc/network/if-up.d/iptables con otras operaciones similares.
Listar todas las iptables reglas
Para enumerar todas las reglas iptables aplicadas actualmente, utilice la siguiente operación en el shell del sistema.
iptables -L
Eliminar todas iptables las reglas
Si comete un error de configuración al ingresar reglas iptables o simplemente necesita volver al conjunto de reglas predeterminado, puede utilizar la siguiente operación en el shell del sistema para vaciar 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