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

8 minuto de leitura
0

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

Breve descrição

Você pode configurar regras de grupo de regras padrão para descartar o tráfego TCP estabelecido. Em seguida, pode configurar 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ínio e regras de grupo de regras padrão com uma palavra-chave “flow”.

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

Você pode usar o AWS CloudFormation ou uma API para especificar opções de regras para suas regras de grupo de regras padrão. A AWS Command Line Interface (AWS CLI) é usada para os exemplos deste artigo:

Observação: se você receber erros ao executar os comandos da AWS CLI, utilize a versão mais recente da AWS CLI.

Resolução

Pré-requisitos

Antes de configurar suas regras do Network Firewall, revise as seguintes informações:

  • Este artigo apresenta um método de configuração de regras padrão de grupos de regras que permite a entrada de opções de regras. Neste exemplo, adicionar opções de regras a uma regra de grupo de regras padrão permite que ela trabalhe com um grupo de regras de lista de domínios. Isso permite que você controle melhor seu tráfego.
  • 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.
  • 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 de rede.
  • As regras de firewall usadas no artigo são exemplos a que você deve consultar. Você deve garantir que as regras configuradas para seu firewall sejam adequadas às suas necessidades específicas e funcionem conforme o esperado.

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

Configuração comum do grupo de regras de lista de domínios e do grupo de regras padrão sem a palavra-chave “flow”

Quando você configura um grupo de regras de lista de domínio 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ínio e um grupo de regras padrão, deverá usar uma palavra-chave “flow”. Se você não usar uma palavra-chave “flow”, poderá encontrar problemas como o detalhado neste exemplo.

Neste exemplo, o console da Amazon VPC é usado para criar 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 é definida para negar tráfego do tipo de protocolo especificado que não corresponda às especificações do domínio. Para obter mais informações, consulte Filtragem de domínio.

O uso do console da Amazon VPC para criar uma configuração comum de uma regra de grupo de regras padrão produz uma saída semelhante à tabela a seguir:

ProtocoloOrigemDestinoPorta de origemPorta de destinoDireçãoAção
TCPQualquerQualquerQualquerQualquerAvançarDescartar

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 de “tempo limite de conexão”:

$ 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

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

A regra de grupo de regras de lista de domínios para permitir example.com via HTTPS falha porque o protocolo 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. No entanto, ainda não há um protocolo TLS compatível e, portanto, a regra de descarte corresponde. Isso faz com que todo o tráfego para example.com seja descartado.

Observação: você pode configurar níveis de log para o mecanismo de estado do seu firewall, permitindo acessar informações detalhadas sobre o tráfego filtrado. Para obter mais informações, consulte Registrar em log o tráfego de rede a partir do AWS Network Firewall.

Grupo de regras de lista de domínio e regra de grupo de regras padrão com a palavra-chave “flow”

Você pode usar os comandos describe-rule-group e update-rule-group do Network Firewall para atualizar suas regras de grupo de regras padrão de forma a incluir uma palavra-chave “flow” adicional.

1.    Execute o comando describe-rule-group com o objeto de grupo de regra de reconhecimento de estado original. Você precisa do valor UpdateToken para executar o comando update-rule-group.

Observação: parte da saída do comando a seguir é usada como um modelo JSON para outros 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.    Crie um arquivo de regras JSON com uma configuração de regra modificada. Execute um comando semelhante ao seguinte para verificar o conteúdo do arquivo de regras 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"
            ]
          }
        ]
      }
    ]
  }
}

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.    Execute o comando update-rule-group usando o valor UpdateToken e o arquivo de regras JSON para atualizar o grupo de regras padrão:

$ 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

O resultado é semelhante a esta saída:

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

4.    Execute o comando describe-rule-group para verificar as alterações no grupo de regras de reconhecimento de 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

A saída é semelhante à seguinte mensagem:

{(...)
        "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: no exemplo anterior, “established, to_server” reflete a alteração do comando update-rule-group.

5.    Verifique se o grupo de regras de lista de domínios e o grupo de regras padrão filtram o tráfego corretamente:

$ 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
(...)

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

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

$ 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

Outros tipos de tráfego TCP também são bloqueados com base na configuração:

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

Informações relacionadas

Passo a passo prático do mecanismo de regras flexíveis do AWS Network Firewall - Parte 1

AWS OFICIAL
AWS OFICIALAtualizada há um ano