

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Uso do Network Firewall para capturar os nomes de domínio DNS da indicação do nome do servidor para o tráfego de saída
<a name="use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Resumo
<a name="use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic-summary"></a>

Este modelo demonstra como usar o AWS Network Firewall para coletar os nomes de domínio DNS fornecidos pela indicação do nome do servidor (SNI, na sigla em inglês) no cabeçalho HTTPS do tráfego de rede de saída. O Network Firewall é um serviço gerenciado que facilita a implantação de proteções de rede críticas para a Amazon Virtual Private Cloud (Amazon VPC), incluindo a capacidade de proteger o tráfego de saída com um firewall que bloqueia pacotes que não atendem a determinados requisitos de segurança. Proteger o tráfego de saída para nomes de domínio DNS específicos é chamado de filtragem de saída, que é a prática de monitorar e potencialmente restringir o fluxo de informações de saída de uma rede para outra.

Depois de capturar os dados do SNI que passam pelo Network Firewall, você pode usar o Amazon CloudWatch Logs e o AWS Lambda para publicar os dados em um tópico do Amazon Simple Notification Service (Amazon SNS) que gera notificações por e-mail. As notificações por e-mail incluem o nome do servidor e outras informações relevantes da SNI. Além disso, você pode usar a saída desse padrão para permitir ou restringir o tráfego de saída por nome de domínio na SNI usando regras de firewall. Para obter mais informações, consulte [Trabalhar com grupos de regras com estado no AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/stateful-rule-groups-ips.html) na documentação do Network Firewall.

## Pré-requisitos e limitações
<a name="use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) versão 2, instalada e configurada no Linux, macOS ou Windows.
+ [Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/getting-started.html), instalado e configurado na Amazon VPC, e em uso para a inspeção do tráfego de saída. É possível configurar o Network Firewall para usar qualquer uma das seguintes configurações da VPC:
  + [Arquitetura simples de zona única com um gateway da Internet](https://docs.aws.amazon.com/network-firewall/latest/developerguide/arch-single-zone-igw.html)
  + [Arquitetura de várias zonas com um gateway da Internet](https://docs.aws.amazon.com/network-firewall/latest/developerguide/arch-two-zone-igw.html)
  + [Arquitetura com um gateway da Internet e um gateway NAT](https://docs.aws.amazon.com/network-firewall/latest/developerguide/arch-igw-ngw.html)

## Arquitetura
<a name="use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic-architecture"></a>

O diagrama a seguir mostra como usar o Firewall de Rede para coletar dados SNI do tráfego de rede de saída e, em seguida, publicar esses dados em um tópico do SNS usando Logs CloudWatch e Lambda.

![Fluxo de trabalho entre Network Firewall, CloudWatch Logs, Lambda e Amazon SNS.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/9eb1e9e3-f459-4ea3-8e6d-60fec6b7ea98/images/1094b5f6-33e3-42bc-8fb8-7409b5b826b0.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. O Network Firewall coleta nomes de domínio dos dados da SNI no cabeçalho HTTPS do tráfego de saída da rede.

1. CloudWatch O Logs monitora os dados do SNI e invoca uma função Lambda sempre que o tráfego de saída da rede passa pelo Network Firewall.

1. A função Lambda lê os dados SNI capturados pelo CloudWatch Logs e depois publica esses dados em um tópico do SNS.

1. O tópico SNS envia uma notificação por e-mail que inclui os dados da SNI.

**Automação e escala**
+ Você pode usar CloudFormation a [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) para criar esse padrão usando a [infraestrutura como código](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

**Pilha de tecnologia**
+  CloudWatch Registros da Amazon
+ Amazon SNS
+ Amazon VPC
+ AWS Lambda 
+ AWS Network Firewall

## Ferramentas
<a name="use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic-tools"></a>

**Serviços da AWS**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) — Você pode usar o Amazon CloudWatch Logs para monitorar, armazenar e acessar seus arquivos de log a partir de instâncias do Amazon Elastic Compute Cloud (Amazon EC2), AWS CloudTrail, Amazon Route 53 e outras fontes.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html): o Amazon Simple Notiﬁcation Service (Amazon SNS) é um serviço gerenciado que fornece entrega de mensagens de publicadores para assinantes (também conhecido como produtores e consumidores).
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html): a Amazon Virtual Private Cloud (Amazon VPC) provisiona uma seção logicamente isolada da Nuvem AWS, em que é possível executar recursos da AWS em uma rede virtual que você definiu. Essa rede virtual se assemelha a uma rede tradicional que você operaria no seu datacenter, com os benefícios de usar a infraestrutura dimensionável da AWS.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html): o AWS Lambda é um serviço de computação com tecnologia que pode ser usado para executar código sem provisionamento ou gerenciamento de servidores.
+ [Firewall de Rede](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html) da AWS — O Firewall de Rede da AWS é um serviço gerenciado que facilita a implantação de proteções de rede essenciais para toda a Amazon VPCs.

## Épicos
<a name="use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic-epics"></a>

### Crie um grupo de CloudWatch registros para o Network Firewall
<a name="create-a-cloudwatch-log-group-for-network-firewall"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um grupo de CloudWatch registros. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.html)Para obter mais informações, consulte [Trabalhando com grupos e fluxos de registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html) na CloudWatch documentação. | Administrador de nuvem | 

### Crie um tópico do SNS e inscrição
<a name="create-an-sns-topic-and-subscription"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um tópico do SNS. | Para criar um tópico do SNS, siga as instruções na [documentação do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html#create-topic-aws-console). | Administrador de nuvem | 
| Inscreva um endpoint em um tópico do SNS. | Para inscrever um endereço de e-mail como endpoint para o tópico do SNS que você criou, siga as instruções na [documentação do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html). Em **Protocolo**, escolha [E-mail/e-mail-JSON](https://docs.aws.amazon.com/sns/latest/dg/sns-email-notifications.html). Além disso, é possível escolher um endpoint diferente com base nos seus requisitos. | Administrador de nuvem | 

### Configurar o login no Network Firewall
<a name="set-up-logging-in-network-firewall"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Habilitar o registro em log de firewall. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.html)Para obter mais informações sobre o uso de CloudWatch Logs como destino de log para o Network Firewall, consulte [Amazon CloudWatch Logs](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-cw-logs.html) na documentação do Network Firewall.  | Administrador de nuvem | 

### Configurar uma regra de estado no Network Firewall
<a name="set-up-a-stateful-rule-in-network-firewall"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma regra com estado. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.html) | Administrador de nuvem | 
| Associe a regra de estado ao Network Firewall. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.html) | Administrador de nuvem | 

### Criar uma função do Lambda para ler os logs
<a name="create-a-lambda-function-to-read-the-logs"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o código da função do Lambda. | Em um ambiente de desenvolvimento integrado (IDE) que pode ler o evento CloudWatch Logs do Network Firewall para tráfego de saída, cole o seguinte código do Python 3 e `<SNS-topic-ARN>` substitua pelo seu valor:<pre>import json<br />import gzip<br />import base64<br />import boto3<br />sns_client = boto3.client('sns')<br />def lambda_handler(event, context):<br />    decoded_event = json.loads(gzip.decompress(base64.b64decode(event['awslogs']['data'])))<br />    body = '''<br />    {filtermatch}<br />    '''.format(<br />        loggroup=decoded_event['logGroup'],<br />        logstream=decoded_event['logStream'],<br />        filtermatch=decoded_event['logEvents'][0]['message'],<br />    )<br />    print(body)<br />    filterMatch = json.loads(body)<br />    data = []<br />    if 'http' in filterMatch['event']:<br />        data.append(filterMatch['event']['http']['hostname'])<br />    elif 'tls' in filterMatch['event']:<br />        data.append(filterMatch['event']['tls']['sni'])<br />    result = 'Domain accessed ' + 1*' ' + (data[0]) + 1*' ' 'via AWS Network Firewall ' + 1*' '  + (filterMatch['firewall_name'])<br />    print(result)<br />    message = {'ServerName': result}<br />    send_to_sns = sns_client.publish(<br />        TargetArn=<SNS-topic-ARN>,          #Replace with the SNS topic ARN<br />        Message=json.dumps({'default': json.dumps(message),<br />                        'sms': json.dumps(message),<br />                        'email': json.dumps(message)}),<br />        Subject='Server Name passed through the Network Firewall',<br />        MessageStructure='json'<br />    )</pre><br />Esse exemplo de código analisa o conteúdo dos CloudWatch registros e captura o nome do servidor fornecido pelo SNI no cabeçalho HTTPS. | Desenvolvedor de aplicativos | 
| Criar a função do Lambda. | Para criar a função do Lambda, siga as instruções na [documentação do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#getting-started-create-function) e escolha **Python 3.9** para **Runtime**. | Administrador de nuvem | 
| Adicionar o código à função do Lambda. | Para adicionar seu código Python à função do Lambda que você criou anteriormente, siga as instruções na [documentação do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html#configuration-function-update). | Administrador de nuvem | 
| Adicione CloudWatch registros como um gatilho à função Lambda. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.html)Para obter mais informações, consulte Como [usar o Lambda com CloudWatch registros na documentação](https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchlogs.html) do Lambda. | Administrador de nuvem | 
| Adicione permissões de publicação do SNS. | Adicione a permissão **sns:Publish** à função de execução do Lambda, para que o Lambda possa fazer chamadas de API para publicar mensagens no SNS.  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.html)<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "AllowSNSPublish",<br />            "Effect": "Allow",<br />            "Action": [<br />                "sns:GetTopicAttributes",<br />                "sns:Subscribe",<br />                "sns:Unsubscribe",<br />                "sns:Publish"<br />            ],<br />            "Resource": "*"<br />        }<br />    ]<br />}</pre> | Administrador de nuvem | 

### Teste a funcionalidade da sua notificação do SNS
<a name="test-the-functionality-of-your-sns-notification"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Envie tráfego por meio do Network Firewall. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.html)<pre>{<br />    "Type": "Notification",<br />    "MessageId": "<messageID>",<br />    "TopicArn": "arn:aws:sns:us-west-2:123456789:testSNSTopic",<br />    "Subject": "Server Name passed through the Network Firewall",<br />    "Message": "{\"ServerName\": \"Domain 'aws.amazon.com' accessed via AWS Network Firewall 'AWS-Network-Firewall-Multi-AZ-firewall\"}",<br />    "Timestamp": "2022-03-22T04:10:04.217Z",<br />    "SignatureVersion": "1",<br />    "Signature": "<Signature>",<br />    "SigningCertURL": "<SigningCertUrl>",<br />    "UnsubscribeURL": "<UnsubscribeURL>"<br />}</pre>Em seguida, verifique o registro de alertas do Firewall de Rede na Amazon CloudWatch seguindo as instruções na [ CloudWatch documentação da Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SearchDataFilterPattern.html). O log de alerta mostra a seguinte saída:<pre>{<br />    "firewall_name": "AWS-Network-Firewall-Multi-AZ-firewall",<br />    "availability_zone": "us-east-2b",<br />    "event_timestamp": "<event timestamp>",<br />    "event": {<br />        "timestamp": "2021-03-22T04:10:04.214222+0000",<br />        "flow_id": <flow ID>,<br />        "event_type": "alert",<br />        "src_ip": "10.1.3.76",<br />        "src_port": 22761,<br />        "dest_ip": "99.86.59.73",<br />        "dest_port": 443,<br />        "proto": "TCP",<br />        "alert": {<br />            "action": "allowed",<br />            "signature_id": 2,<br />            "rev": 0,<br />            "signature": "",<br />            "category": "",<br />            "severity": 3<br />        },<br />        "tls": {<br />            "subject": "CN=aws.amazon.com",<br />            "issuerdn": "C=US, O=Amazon, OU=Server CA 1B, CN=Amazon",<br />            "serial": "<serial number>",<br />            "fingerprint": "<fingerprint ID>",<br />            "sni": "aws.amazon.com",<br />            "version": "TLS 1.2",<br />            "notbefore": "2020-09-30T00:00:00",<br />            "notafter": "2021-09-23T12:00:00",<br />            "ja3": {},<br />            "ja3s": {}<br />        },<br />        "app_proto": "tls"<br />    }<br />}</pre> | Engenheiro de testes | 