Gestión de reglas de firewall de contenedores

La función de Firewall de contenedor Elasticserver ofrece la posibilidad de controlar la disponibilidad de sus nodos tanto desde el interior como desde el exterior de la Plataforma. Analiza varios parámetros (por ejemplo, fuente de solicitud entrante, protocolo, puerto de nodo de destino, etc.) para administrar de manera flexible el acceso a sus contenedores mediante el establecimiento de las reglas de conexión necesarias.

 

Consejo: Si desea restringir el acceso entre los ambientes en una sola cuenta, se puede configurar automáticamente a través de la función Aislamiento de red .

Gestión de firewall de contenedores a través de la interfaz de usuario Elasticserver

Cada nodo en Elasticserver PaaS (excluyendo los contenedores personalizados basados ​​en Docker y Windows ) está provisto de un conjunto de reglas de firewall, que pueden revisarse y administrarse a través de una interfaz gráfica de usuario intuitiva. Se puede acceder a la sección correspondiente haciendo clic en el botón Configuración junto al ambiente requerido y seleccionando el elemento del menú Firewall .

Nota: La disponibilidad de la interfaz de usuario de Container Firewall depende de la configuración particular de su proveedor de alojamiento. Si no tiene esta sección, comuníquese con el soporte de su plataforma y solicite la activación de la función para su cuenta.

Aquí, las siguientes pestañas están disponibles:

  • Resumen : proporciona información general sobre la función, permite cambiar el estado del cortafuegos (que está habilitado para todos los contenedores de forma predeterminada) y muestra a los grupos de entornos aislados en los que se incluye el entorno actual
  • Reglas de entrada : permite administrar las solicitudes entrantes (las que no figuran en la lista se rechazan de forma predeterminada)
  • Reglas de salida : permite controlar las conexiones salientes (las no enumeradas están permitidas de forma predeterminada)

Reglas de firewall predeterminadas

Cuando se crea un nuevo contenedor, Elasticserver rellena automáticamente las reglas entrantes y  salientes ademas de secciones con algunos registros requeridos para la operatividad recipiente adecuado.

Consejo: Estas reglas se obtienen automáticamente en función de los puertos EXPOSE de la variable del mismo nombre en el dockerfile de la imagen , consulte la guía vinculada para obtener más detalles sobre la creación de imágenes Docker para Elasticserver PaaS.

Aquí, las reglas se agrupan por capas y tienen la siguiente estructura:

  • el primer registro es de color gris (es decir, no editable / obligatorio), tiene la máxima prioridad ( 1 ) y permite que la infraestructura de Elasticserver acceda a los contenedores desde:
    • orquestador de plataforma para gestionar todas las operaciones internas (restablecimiento de contraseña, generación de configuraciones, ejecución de scripts CS, generación de claves SSH, etc.)
    • SSH Gate y Web SSH para proporcionar acceso a los servicios adecuados
    • Balanceadores de carga compartidos para permitir la conexión al contenedor sin IP pública
  • las reglas predeterminadas (relacionadas con la pila) y agregadas por el usuario (ya sea por el propietario del entorno o los colaboradores)

Nota: aplique los cambios a las reglas predeterminadas solo en caso de que sepa exactamente lo que está haciendo, ya que estos registros son necesarios para garantizar una funcionalidad específica de pila adecuada y proporcionar compatibilidad con funciones particulares (por ejemplo, para permitir conexiones SSH , HTTP , HTTPS o FTP ) .

  • otro registro gris no editable (siempre el último debido a la prioridad más baja de 65535 ) bloquea cualquier conexión entrante, lo que no está permitido a través de las reglas mencionadas anteriormente

Al trabajar con el contenedor (por ejemplo, agregar puntos de montaje, instalar el complemento FTP, etc.), la lista de reglas de firewall predeterminadas puede complementarse automáticamente con la plataforma de acuerdo con los nuevos requisitos. Con esto, cada registro predeterminado se agrega con un paso de prioridad de 10 puntos, lo que permite insertar reglas personalizadas en el medio.

Agregar reglas predeterminadas de contenedor

Si es necesario (por ejemplo, para las soluciones de automatización ), puede usar la variable de entorno  JELASTIC_PORTS para definir puertos personalizados, que se deben abrir a través del firewall del contenedor durante la creación de los nodos apropiados.

1. Haga clic en Nuevo ambiente en el tablero, seleccione la pila de software requerida y navegue hasta el marco de configuración Variables .

2. Proporcione una nueva variable JELASTIC_PORTS en el siguiente formato:

«JELASTIC_PORTS»: « {port1} , {port2} , …, {portN} «

Aquí, {portN} es un puerto particular ( 1234 ) o rango ( 33062-34000 ), que estará expuesto dentro de las reglas de firewall entrantes (a través de los protocolos tcp y udp ) después de la creación del contenedor.

Nota: Los cambios debidos a la variable JELASTIC_PORTS se aplican solo una vez durante la instalación de los nodos. En consecuencia, las reglas del firewall deben administrarse manualmente.

3. Puede verificar las reglas de su firewall después de la creación.

Consejo: A continuación, puede consultar un ejemplo sobre cómo configurar esta variable a través de Cloud Scripting :

1
2
3
4
5
6
7
8
jpsType: install
name: JELASTIC_PORTS env variable
nodes:
  nodeType: apache2
  nodeGroup: cp
  env:
    JELASTIC_PORTS: 3306, 33061, 33062

Gestión de reglas

Para una gestión conveniente de las reglas de firewall ya existentes y proporcionar las nuevas, el panel de herramientas que se encuentra sobre la lista contiene un conjunto de botones, a saber: Agregar , Editar , Mover , No disponible ( Disponible ) y Actualizar .

Al agregar una nueva regla de firewall, se deben definir los siguientes parámetros:

  • Nodos : para seleccionar la capa de entorno requerida
  • Nombre : para proporcionar un nombre para este registro (se puede ampliar para seleccionar entre los preajustes utilizados comúnmente)
  • Protocolo : para establecer el tipo de protocolo requerido ( TCP , UDP o TCP / UDP )
  • Rango de puertos : para definir un puerto particular (por ejemplo, 80 ) o su rango (por ejemplo, 1024-2048 ) para abrir / cerrar para la conexión; deje este campo en blanco para aplicar la regla a todos los puertos
  • Fuente : para seleccionar la fuente de la solicitud:
    • Direcciones IP personalizadas : una lista separada por comas de direcciones IPv4 / IPv6 y bloques CIDR (por ejemplo, 10.0.0.1,10.0.0.0 / 24 )
    • rangos predefinidos: todo , todo IPv4 , todo IPv6 , red local , Internet (acceso público)
    • Nodos de entorno : tipo de nodo (capa) de cualquier entorno en una cuenta (posteriormente, esta regla se complementa / disminuye automáticamente con las IP requeridas cuando la capa apropiada se escala / reduce)
  • Prioridad : para establecer una prioridad de regla (donde las reglas con valores más bajos se aplican primero)
  • Acción : para definir la acción requerida al recibir la solicitud coincidente ( permitir o denegar )

Posteriormente, si cumple con la necesidad de editar cualquier regla predeterminada o personalizada, podrá ajustar todos los parámetros descritos anteriormente, excepto el campo Nodos (es decir, la capa de destino no se puede cambiar). Además, para fines de prueba, puede deshabilitar temporalmente reglas particulares y volver a aplicarlas más adelante con los botones Deshabilitar / Habilitar apropiados . El botón Actualizar puede ser útil para actualizar la lista de reglas después de algunos ajustes del servidor (por ejemplo, su cambio de topología) sin la necesidad de reiniciar todo el servidor.

Casos de uso del firewall

El acceso a sus nodos se puede controlar en función de parámetros de solicitud como la dirección IP de su nodo de origen, el protocolo de conexión, el puerto, etc. En la guía a continuación, consideraremos un ejemplo simple de bloqueo de acceso a un contenedor para una dirección IP particular, aplicado a través de:

Nota: Antes de seguir estas instrucciones, asegúrese de que se proporcione el contenedor apropiado con una dirección IP pública .

Además, al preparar alguna solución de automatización del ciclo de vida del contenedor, es posible que deba aplicar los cambios de firewall necesarios a través de la API Elasticserver : examine la lista de los métodos apropiados dentro de la referencia vinculada.

Restringir el acceso a através de la interfaz del usuario

Entonces, como se mostró en parte anteriormente, Elasticserver proporciona una GUI bastante fácil de usar y poderosa para administrar el firewall del contenedor directamente a través del tablero.

1. Para acceder al panel de control apropiado, haga clic en el botón Configuración al lado del ambiente requerido y cambie a la sección Firewall dentro de la pestaña abierta.

Seleccione la pestaña Reglas de entrada y haga clic en el botón Agregar (obviamente, para administrar el tráfico del contenedor externo, debe elegir la pestaña Reglas de salida en su lugar; aquí, todos los parámetros de la regla son similares a los que se describen a continuación).

2. En el formulario abierto Agregar regla de entrada , puede configurar una nueva condición para el procesamiento de solicitudes entrantes por un contenedor.

Para denegar una conexión desde una IP particular (de acuerdo con nuestro ejemplo de caso de uso sugerido), complete los campos de la siguiente manera:

  • Nodos : elija un contenedor para restringir el acceso ( tomcat en nuestro caso)
  • Nombre : ingrese cualquier nombre de regla deseado (por ejemplo, mi regla )
  • Protocolo : seleccione un protocolo requerido ( TCP )
  • Rango de puertos : denegar el acceso a todos los puertos dejando este campo en blanco
  • Fuente : elija la opción Dirección (es) IP personalizada (s) y escriba la IP necesaria en el campo Intervalo de direcciones IP aparecido ( 111.111.111.111 )
  • Prioridad : establezca la prioridad adecuada para este registro (por ejemplo, 900 que se aplicará antes de las reglas predeterminadas)
  • Acción : seleccione la opción Denegar

Haga clic en Agregar para guardar y aplicar automáticamente su regla.

3. Ahora, cuando intente conectarse a su nodo desde la dirección IP 111.111.111.111 especificada, se mostrará al usuario la siguiente página:

De esta manera, puede denegar el acceso a sus contenedores desde cualquier dirección IP.

Restringir el acceso a através de SSH

Alternativamente, puede configurar las reglas de firewall para su contenedor a través de la terminal al acceder al nodo a través de Elasticserver SSH Gate .

Nota: Aunque la mayoría de las configuraciones de firewall se pueden realizar a través de la interfaz de usuario dedicada, la administración a través de SSH es más flexible (por ejemplo, permite configurar redireccionamientos NAT). Por lo tanto, dichas reglas no se mostrarán en la lista de la interfaz de usuario, pero serán de mayor prioridad.

1. La forma más sencilla de acceder al nodo a través de SSH es llamar a la opción Web SSH adecuada directamente desde el panel de Elasticserver: haga clic en el botón con el mismo nombre al lado del nodo requerido. Una vez conectado, verifique el archivo /etc/jelastic/metainf.conf para asegurarse de que el firewall del contenedor esté activado:

gato /etc/jelastic/metainf.conf

 

Aquí, el parámetro FIREWALL_ENABLED debe ser igual a « 1 «. De lo contrario, comuníquese con su proveedor de alojamiento y solicite la habilitación de la protección de firewall para su cuenta.

2. A continuación, debe modificar el archivo /etc/sysconfig/iptables-custom (por ejemplo, con un editor vim ):

Nota: El archivo /etc/sysconfig/ip6tables-custom se debe usar al trabajar con las reglas de IPv6.

3. Declare las reglas de firewall requeridas utilizando el formato de la herramienta iptables-save . Por ejemplo, el siguiente código debe usarse para denegar el acceso desde una IP en particular (por ejemplo, 111.111.111.111 ):

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-I INPUT -s 111.111.111.111 -p tcp -m state --state NEW -m tcp --dport 1111 -j DROP
COMMIT

#

 

4. Use el siguiente comando para aplicar su configuración de firewall personalizada a la lista de reglas predeterminadas del contenedor:

sudo /usr/bin/jem firewall fwstart

5. Ahora, puede verificar la lista de las reglas de firewall actualmente en funcionamiento para su contenedor ejecutando el siguiente comando:

sudo jem firewall list {tabla} {opciones}

Aquí:

  • {table} – especifica el objetivo de iptable ( filter , nat , mangle , raw )
  • {opciones} : enumera los parámetros de iptable , que deben aplicarse

Su regla personalizada se coloca después de las predeterminadas, denegando el acceso a su nodo desde la dirección IP 111.111.111.111 .

Establecer reglas a través de la API de Elasticserver

En algunos casos (por ejemplo, para scripts personalizados, automatizaciones, etc.), es posible que deba configurar las reglas del firewall a través del código. Para hacer esto, puede usar los métodos apropiados de la sección entorno> Seguridad en la documentación de la API de Elasticserver :

  • AddRule : crea una nueva regla
  • AddRules : agrega varias reglas
  • EditRule : cambia los parámetros de una regla existente
  • GetRules : muestra una lista de reglas para el medio ambiente
  • RemoveRule : elimina una regla
  • RemoveRules : elimina varias reglas
  • SetFirewallEnabled : activa el firewall
  • SetRuleEnabled : habilita una regla existente
  • SetRules – reemplaza las reglas existentes

De esta forma, la administración de su Firewall Сontainer le permite controlar la disponibilidad de nodos en su cuenta de manera efectiva y aumentar significativamente la seguridad de las aplicaciones (al filtrar las conexiones deseadas y no deseadas).