Ir para o conteúdo

Como configurar grupos de regras padrão do Network Firewall e regras do grupo de regras de lista de domínios juntos?

8 minuto de leitura
0

Quero configurar regras do grupo de regras padrão do AWS Network Firewall e regras do grupo de regras de lista de domínios para trabalharem juntas para controlar o tráfego conforme o esperado.

Breve descrição

Configure regras do grupo de regras padrão para descartar o tráfego TCP estabelecido. Em seguida, configure regras de grupo de regras de lista de domínios para permitir que fluxos TCP (TLS) sejam enviados aos domínios permitidos a partir do grupo de regras de lista de domínios. Para fazer isso, configure um grupo de regras de lista de domínios e regras do grupo de regras padrão com uma palavra-chave "flow".

Este artigo usa um dos modelos de implantação distribuída. Esse modelo protege o tráfego entre uma sub-rede pública de workload com uma instância de cliente do Amazon Elastic Compute Cloud (Amazon EC2) e um gateway da internet. A ordem das regras da política de firewall é definida como a ordem da ação padrão.

Observação: o console da Amazon Virtual Private Cloud (Amazon VPC) exibe somente opções de regras configuradas anteriormente. Ele não permite que você adicione opções de regras. Para obter mais informações, consulte Standard stateful rule groups in AWS Network Firewall (Grupos de regras stateful padrão no AWS Network Firewall).

Use o AWS CloudFormation ou uma API para especificar opções de regras para suas regras do grupo de regras padrão. A AWS Command Line Interface (AWS CLI) é usada nos exemplos deste artigo.

Resolução

Observação: se você receber mensagens de erro ao executar comandos da AWS CLI, consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Pré-requisitos

Confirme se a instância do Amazon EC2 tem permissão para enviar tráfego na porta TCP 443 no grupo de segurança da VPC e na ACL da rede.

Observação: nos exemplos de código deste artigo, as elipses (...) encurtam as saídas.

Configure um grupo de regras de lista de domínios e um grupo de regras padrão sem uma palavra-chave "flow"

Quando você configura um grupo de regras de lista de domínios e um grupo de regras padrão, sua configuração pode ser semelhante à detalhada neste exemplo. Se você criar um grupo de regras de lista de domínios e um grupo de regras padrão, deve usar uma palavra-chave "flow". Se você não usar uma palavra-chave "flow", pode encontrar problemas como o detalhado neste exemplo.

No exemplo a seguir, o console da Amazon VPC cria um grupo de regras de lista de domínios. A regra permite tráfego HTTPS para example.com:

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

Observação: um grupo de regras de lista de domínios com a ação definida como Allow (Permitir) gera outra regra. A regra nega tráfego do tipo de protocolo especificado que não corresponde às especificações do domínio. Para obter mais informações, consulte Domain filtering (Filtragem de domínio).

O console da Amazon VPC cria uma regra de grupo de regras padrão com a seguinte configuração: protocolo TCP, origem Any, destino Any, porta de origem Any, porta de destino Any, direção Forward e ação Drop.

Ao enviar uma solicitação a um domínio permitido para testar a configuração da regra, o tráfego é bloqueado e você recebe um erro "connection timed out":

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

A configuração faz com que todo o tráfego TCP caia e a conexão expire. Isso inclui bloquear o tráfego baseado em TCP para o domínio permitido example.com.

A regra do grupo de regras de lista de domínios que permite example.com via HTTPS falha porque o TCP é o primeiro protocolo a aparecer no fluxo inicial. O fluxo começa com o handshake TCP de camada inferior, e a regra de negação é avaliada. Nesse ponto, não há protocolo TLS compatível, então a regra de descarte corresponde. Isso faz com que todo o tráfego para example.com caia.

Observação: é possível configurar níveis de log para que o mecanismo stateful do seu firewall acesse informações detalhadas sobre o tráfego filtrado. Para obter mais informações, consulte Logging network traffic from AWS Network Firewall (Registrar em log o tráfego de rede a partir do AWS Network Firewall).

Configure um grupo de regras de lista de domínios e uma regra do grupo de regras padrão com a palavra-chave "flow"

Use os comandos describe-rule-group e update-rule-group do Network Firewall para atualizar suas regras do grupo de regras padrão para incluir uma palavra-chave "flow" adicional.

  1. Para recuperar o valor de UpdateToken para o grupo de regras stateful, execute o seguinte comando describe-rule-group da AWS CLI:

    $ 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

    Observação: substitua XXXXXXXX0575 pelo ID da sua conta da AWS. Substitua stateful-rg-5-tuple pelo nome do seu grupo de regras. Parte da saída desse comando é usada como um modelo JSON para outros ajustes posteriores.

    A saída é semelhante ao seguinte:

    {
        "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. Para verificar o conteúdo do arquivo de regras JSON, crie um arquivo de regras JSON com uma configuração de regra modificada e execute o seguinte comando:

    $ 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"
                ]
              }
            ]
          }
        ]
      }
    }

    Neste exemplo, a palavra-chave flow permite que o handshake TCP seja concluído antes de avaliar a regra de descarte TCP ao enviar uma solicitação para example.com. Depois disso, a ordem de ação padrão da regra tem precedência. A lista de domínios permite a regra HTTPS para correspondências de example.com, permitindo que o resto do tráfego passe por esse fluxo. Qualquer tráfego para domínios não permitidos é bloqueado, assim como qualquer outro tráfego TCP estabelecido.

  3. Para atualizar o grupo de regras padrão, execute o seguinte comando update-rule-group da AWS CLI usando o valor de UpdateToken e o arquivo de regras JSON:

    $ 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

    Observação: substitua XXXXXXXX0575 pelo ID da sua conta da AWS. Substitua stateful-rg-5-tuple pelo nome do seu grupo de regras. Substitua 40b87af5-a20c-4f8c-8afd-6777c81add3c pelo valor de UpdateToken da etapa 1.

    O resultado é semelhante a esta saída:

    {
        "UpdateToken": "bf8fe6d4-f13e-406c-90c1-9e3bad2118a7",
        "RuleGroupResponse": {...},
            "LastModifiedTime": "2023-02-07T14:12:14.993000+11:00"
        }
    }
  4. Para verificar as alterações no grupo de regras stateful, execute o seguinte comando describe-rule-group da AWS CLI:

    $ 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

    Observação: substitua XXXXXXXX0575 pelo ID da sua conta da AWS e stateful-rg-5-tuple pelo nome do seu grupo de regras.

    A saída é semelhante ao seguinte:

    {(...)
            "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"
        }
    }

    Observação: Na saída anterior, established, to_server reflete a alteração do comando update-rule-group.

  5. Para verificar se o grupo de regras de lista de domínios e o grupo de regras padrão filtram tráfego corretamente, execute o seguinte comando:

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

    A saída mostra que o tráfego HTTPS para o domínio example.com permitido é bem-sucedido, conforme configurado.

    Neste próximo exemplo, o tráfego HTTPS para domínios que não estão permitidos é bloqueado, conforme esperado:

    $ curl -m 5 -kv -so /dev/null https://www.amazon.com
    *   Trying [IP_ADDRESS]...
    * Connected to www.amazon.com ([IP_ADDRESS]) 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

Opcionalmente, para verificar se outro tráfego TCP estabelecido também está bloqueado, execute o seguinte comando s3 ls da AWS CLI:

aws s3 ls --cli-read-timeout 30 --debug

Informações relacionadas

Hands-on walkthrough of the AWS Network Firewall flexible rules engine – Part 1 (Passo a passo prático do mecanismo de regras flexíveis do AWS Network Firewall - Parte 1)

AWS OFICIALAtualizada há 6 meses