¿Cómo configuro los grupos de reglas estándar de Network Firewall y las reglas del grupo de reglas de listas de dominios juntos?

8 minutos de lectura
0

Quiero configurar las reglas del grupo de reglas estándar de AWS Network Firewall y las reglas del grupo de reglas de listas de dominios para que trabajen juntas a fin de controlar el tráfico correctamente.

Descripción breve

Puede configurar reglas de grupos de reglas estándar para eliminar el tráfico TCP establecido. A continuación, puede configurar las reglas del grupo de reglas de listas de dominios para permitir que los flujos TCP (TLS) se envíen a los dominios permitidos desde el grupo de reglas de listas de dominios. Para ello, configure un grupo de reglas de listas de dominios y reglas de grupos de reglas estándar con la palabra clave «flow».

Nota: La consola de Amazon Virtual Private Cloud (Amazon VPC) muestra solo las opciones de reglas configuradas previamente. No permite añadir opciones de reglas. Para obtener más información, consulte Grupos de reglas estándar del firewall con estado en AWS Network Firewall.

Puede usar AWS CloudFormation o una API para especificar opciones de reglas para las reglas de grupos de reglas estándar. Para los ejemplos de este artículo se utiliza la Interfaz de la línea de comandos de AWS (AWS CLI):

Nota: Si recibe errores al ejecutar los comandos de la AWS CLI, asegúrese de utilizar la versión más reciente.

Solución

Requisitos previos

Antes de configurar las reglas de Network Firewall, revise la siguiente información:

  • Este artículo presenta un método para configurar reglas de grupos de reglas estándar que permite introducir opciones de reglas. En este ejemplo, añadir opciones de reglas a una regla de grupo de reglas estándar permite que funcione con un grupo de reglas de listas de dominios. Así puede controlar mejor su tráfico.
  • En este artículo se utiliza uno de los modelos de despliegue distribuido. Este modelo protege el tráfico entre una subred pública de carga de trabajo con una instancia cliente de Amazon Elastic Compute Cloud (Amazon EC2) y una puerta de enlace de Internet. El orden de las reglas de la política de firewall está establecido en el orden de acción predeterminado.
  • La instancia de Amazon EC2 puede enviar tráfico al puerto TCP 443 del grupo de seguridad de VPC y de la ACL de red.
  • Las reglas del firewall utilizadas en el artículo son ejemplos a los que puede hacer referencia. Debe asegurarse de que las reglas que configure para su firewall se adapten a sus necesidades específicas y funcionen según lo esperado.

Nota: En los ejemplos de código de este artículo, se han utilizado puntos suspensivos (...) para abreviar.

Configuración habitual del grupo de reglas de listas de dominios y el grupo de reglas estándar sin la palabra clave «flow»

Al configurar un grupo de reglas de listas de dominios y un grupo de reglas estándar, la configuración puede ser similar a la que se detalla en este ejemplo. Si crea un grupo de reglas de listas de dominios y un grupo de reglas estándar, debe usar la palabra clave «flow». Si no utiliza a palabra clave «flow», es posible que le aparezcan problemas como el que se detalla en este ejemplo.

En este ejemplo, se usa la consola de Amazon VPC para crear un grupo de reglas de listas de dominios. La regla permite el tráfico HTTPS a example.com.

Domain name source: example.com
Source IPs type: Default
Protocol: HTTPs
Action: Allow

Nota: Un grupo de reglas de listas de dominios con la acción establecida en Allow (Permitir) genera otra regla. La regla está configurada para denegar el tráfico del tipo de protocolo especificado que no coincida con las especificaciones del dominio. Para obtener más información, consulte Filtrado de dominios.

El uso de la consola de Amazon VPC para crear una configuración común de una regla de grupo de reglas estándar produce un resultado similar a la siguiente tabla:

ProtocoloOrigenDestinoPuerto de origenPuerto de destinoDirecciónAcción
TCPCualquieraCualquieraCualquieraCualquieraReenviarEliminar

Al enviar una solicitud a un dominio permitido para probar la configuración de la regla, el tráfico se bloquea y aparece el error «connection timed out» (se ha agotado el tiempo de espera de la conexión):

$ curl -kv -so /dev/null https://example.com
* Trying 93.184.216.34:443...
* connect to 93.184.216.34 port 443 failed: Connection timed out
* Failed to connect to example.com port 443 after 129180 ms: Connection timed out
* Closing connection 0

La configuración hace que se interrumpa todo el tráfico TCP y se agote el tiempo de espera de la conexión. Esto incluye el bloqueo del tráfico basado en TCP en el dominio permitido example.com.

La regla del grupo de reglas de listas de dominios que permite que example.com utilice HTTPS no funciona porque el protocolo TCP es el primero que aparece en el flujo inicial. El flujo comienza con el protocolo de enlace TCP de la capa inferior y se evalúa la regla de denegación. Sin embargo, todavía no existe un protocolo TLS que coincida, por lo que la regla de eliminación coincide. Esto hace que se reduzca todo el tráfico a example.com.

Nota: Puede configurar los niveles de registro del firewall con estado, lo que le permitirá acceder a información detallada sobre el tráfico filtrado. Para obtener más información, consulte Registro del tráfico de red desde AWS Network Firewall.

Grupo de reglas de listas de dominios y regla de grupo de reglas estándar con palabra clave «flow»

Puede usar los comandos describe-rule-group y update-rule-group de Network Firewall para actualizar las reglas de grupos de reglas estándar e incluir la palabra clave «flow».

1.    Ejecute el comando describe-rule-group en el objeto del grupo de reglas del firewall con estado original. Necesita el valor UpdateToken para ejecutar el comando update-rule-group.

Nota: Parte del resultado del siguiente comando se utiliza como plantilla JSON para realizar otros ajustes posteriores.

$ aws network-firewall describe-rule-group --rule-group-arn "arn:aws:network-firewall:us-east-1:XXXXXXXX0575:stateful-rulegroup/stateful-rg-5-tuple" --output json
{
    "UpdateToken": "40b87af5-a20c-4f8c-8afd-6777c81add3c",
    (...)
        "RulesSource": {
            "StatefulRules": [{
                "Action": "DROP",
                "Header": {
                    "Protocol": "TCP",
                    "Source": "Any",
                    "SourcePort": "Any",
                    "Direction": "FORWARD",
                    "Destination": "Any",
                    "DestinationPort": "Any"
                },
                "RuleOptions": [{
                    "Keyword": "sid",
                    "Settings": [
                        "5"
                    ]
                }]
            }]
        }
    (...)
}

2.    Cree un archivo de reglas JSON con una configuración de reglas modificada. Ejecute un comando similar al siguiente para verificar el contenido del archivo de reglas JSON:

$ cat tcp-drop-rule-updated.json
{
  "RulesSource": {
    "StatefulRules": [
      {
        "Action": "DROP",
        "Header": {
          "Direction": "FORWARD",
          "Protocol": "TCP",
          "Destination": "Any",
          "Source": "Any",
          "DestinationPort": "Any",
          "SourcePort": "Any"
        },
        "RuleOptions": [
          {
            "Keyword": "sid",
            "Settings": [
              "5"
            ]
          },
          {
            "Keyword": "flow",
            "Settings": [
              "established, to_server"
            ]
          }
        ]
      }
    ]
  }
}

En este ejemplo, la palabra clave flow permite que el protocolo de enlace TCP se complete antes de evaluar la regla de eliminación de TCP al enviar una solicitud a example.com. Después de esto, prevalece el orden de acción predeterminado de la regla. La lista de dominios permite la regla HTTPS para las coincidencias de example.com, lo que permite que el resto del tráfico pase por ese flujo. Se bloquea todo el tráfico a dominios no permitidos, así como cualquier otro tráfico TCP establecido.

3.    Ejecute el comandoupdate-rule-group con el valor UpdateToken y el archivo de reglas JSON para actualizar el grupo de reglas estándar:

$ aws network-firewall update-rule-group --rule-group-arn "arn:aws:network-firewall:us-east-1:XXXXXXXX0575:stateful-rulegroup/stateful-rg-5-tuple" --update-token 40b87af5-a20c-4f8c-8afd-6777c81add3c --rule-group file://tcp-drop-rule-updated.json --output json

El resultado es similar al siguiente:

{
    "UpdateToken": "bf8fe6d4-f13e-406c-90c1-9e3bad2118a7",
    "RuleGroupResponse": {(...)},
        "LastModifiedTime": "2023-02-07T14:12:14.993000+11:00"
    }
}

4.    Ejecute el comando describe-rule-group para comprobar los cambios en el grupo de reglas del firewall con estado:

$ aws network-firewall describe-rule-group --rule-group-arn "arn:aws:network-firewall:us-east-1:XXXXXXXX0575:stateful-rulegroup/stateful-rg-5-tuple" --output json

El resultado es similar al siguiente mensaje:

{(...)
        "RulesSource": {
            "StatefulRules": [
                {
                    "Action": "DROP",
                    "Header": {
                        "Protocol": "TCP",
                        "Source": "Any",
                        (...)
                    },
                    "RuleOptions": [
                        {
                            "Keyword": "sid",
                            "Settings": [
                                "5"
                            ]
                        },
                        {
                            "Keyword": "flow",
                            "Settings": [
                                "established, to_server"
                           ]
           (...)
        }
    },
    "RuleGroupResponse": {(...)        },
        "LastModifiedTime": "2023-02-07T14:12:14.993000+11:00"
    }
}

Nota: En el ejemplo anterior, «established, to_server» refleja el cambio con respecto al comando update-rule-group.

5.    Compruebe que tanto el grupo de reglas de listas de dominios como el grupo de reglas estándar filtran el tráfico correctamente:

$ curl -kv -so /dev/null https://example.com
*   Trying  93.184.216.34 :443...
* Connected to example.com ( 93.184.216.34 ) port 443 (#0)
(...)
> GET / HTTP/1.1
> Host: example.com
(...)

< HTTP/1.1 200 OK
(...)

En el ejemplo anterior, el resultado muestra que el tráfico HTTPS se dirige correctamente al dominio permitido example.com, tal como está configurado.

En el siguiente ejemplo, se bloquea el tráfico HTTPS a los dominios que no están permitidos, tal y como se esperaba:

$ curl -m 5 -kv -so /dev/null https://www.amazon.com
*   Trying  93.184.216.34 :443...
* Connected to www.amazon.com ( 93.184.216.34 ) port 443 (#0)
(...)
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
(...)
* Operation timed out after 5000 milliseconds with 0 out of 0 bytes received
* Closing connection 0

También se bloquean otros tipos de tráfico TCP en función de la configuración:

$ aws s3 ls --cli-read-timeout 30 --debug
(...)
Read timeout on endpoint URL: "https://s3.amazonaws.com/"

Información relacionada

Tutorial práctico del motor de reglas flexibles de AWS Network Firewall (parte 1)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año