

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Uso de Network Firewall para capturar los nombres de dominio de DNS de la indicación del nombre del servidor para el tráfico saliente
<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*

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

Este patrón le muestra cómo utilizar AWS Network Firewall para recopilar los nombres de dominio DNS que proporciona la indicación del nombre del servidor (SNI) en el encabezado HTTPS del tráfico de red saliente. Network Firewall es un servicio gestionado que facilita la implementación de protecciones de red críticas para Amazon Virtual Private Cloud (Amazon VPC), incluida la capacidad de proteger el tráfico saliente con un firewall que bloquea los paquetes que no cumplen determinados requisitos de seguridad. Proteger el tráfico saliente dirigido a nombres de dominio DNS específicos se denomina filtrado de salida, que consiste en monitorear y, potencialmente, restringir el flujo de información saliente de una red a otra.

Tras capturar los datos del SNI que pasan por Network Firewall, puede utilizar Amazon CloudWatch Logs y AWS Lambda para publicar los datos en un tema del Amazon Simple Notification Service (Amazon SNS) que genere notificaciones por correo electrónico. Las notificaciones por correo electrónico incluyen el nombre del servidor y otra información relevante sobre el SNI. Además, puede utilizar el resultado de este patrón para permitir o restringir el tráfico saliente por nombre de dominio en el SNI mediante reglas de firewall. Para obtener más información, consulte [Trabajo con grupos de reglas con estado en AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/stateful-rule-groups-ips.html) en la documentación de Network Firewall.

## Requisitos previos y limitaciones
<a name="use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ La versión 2 de la [Interfaz de la línea de comandos de AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) instalada y configurada en Linux, macOS o Windows.
+ [Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/getting-started.html), instalado y configurado en Amazon VPC y utilizado para inspeccionar el tráfico saliente. Puede configurar Network Firewall para utilizar cualquiera de las siguientes configuraciones de VPC:
  + [Arquitectura simple de una sola zona con una puerta de enlace de Internet](https://docs.aws.amazon.com/network-firewall/latest/developerguide/arch-single-zone-igw.html)
  + [Arquitectura de un varias zonas con una puerta de enlace de Internet](https://docs.aws.amazon.com/network-firewall/latest/developerguide/arch-two-zone-igw.html)
  + [Arquitectura con una puerta de enlace de Internet y una puerta de enlace NAT](https://docs.aws.amazon.com/network-firewall/latest/developerguide/arch-igw-ngw.html)

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

El siguiente diagrama muestra cómo usar Network Firewall para recopilar datos de SNI del tráfico de red saliente y, a continuación, publicar esos datos en un tema de SNS mediante Logs CloudWatch y Lambda.

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


En el diagrama, se muestra el siguiente flujo de trabajo:

1. Network Firewall recopila los nombres de dominio de los datos del SNI del encabezado HTTPS del tráfico de red saliente.

1. CloudWatch Logs supervisa los datos del SNI e invoca una función Lambda cada vez que el tráfico de red saliente pasa a través de Network Firewall.

1. La función Lambda lee los datos del SNI capturados por los CloudWatch registros y, a continuación, los publica en un tema de SNS.

1. El tema de SNS le envía una notificación por correo electrónico que incluye los datos del SNI.

**Automatización y escala**
+ Puede usar [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) para crear este patrón mediante el uso de [la infraestructura como código](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

**Pila de tecnología**
+ Amazon CloudWatch Logs
+ Amazon SNS
+ Amazon VPC
+ AWS Lambda 
+ AWS Network Firewall

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

**Servicios de AWS**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html): puede usar Amazon CloudWatch Logs para monitorear, almacenar y acceder a sus archivos de registro desde instancias de Amazon Elastic Compute Cloud (Amazon EC2) CloudTrail, AWS, Amazon Route 53 y otras fuentes.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html): Amazon Simple Notification Service (Amazon SNS) es un servicio administrado con el que se ofrece la entrega de mensajes de los publicadores a los suscriptores (también conocido como productores y consumidores).
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html): Amazon Virtual Private Cloud (Amazon VPC) le permite aprovisionar una sección aislada de forma lógica de la nube de AWS donde puede lanzar recursos de AWS en una red virtual que haya definido. Dicha red virtual es prácticamente idéntica a las redes tradicionales que se utilizan en sus propios centros de datos, con los beneficios que supone utilizar la infraestructura escalable de AWS.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html): AWS Lambda es un servicio de computación que permite ejecutar código sin aprovisionar ni administrar servidores.
+ [AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html): AWS Network Firewall es un servicio gestionado que facilita la implementación de las protecciones de red esenciales para todo su Amazon VPCs.

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

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un grupo de CloudWatch registros. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.html)Para obtener más información, consulte [Trabajar con grupos de registros y flujos de registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html) en la CloudWatch documentación. | Administrador de la nube | 

### Crear un tema de SNS y una suscripción
<a name="create-an-sns-topic-and-subscription"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un tema de SNS. | Para crear un tema de SNS, siga las instrucciones de la [documentación de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html#create-topic-aws-console). | Administrador de la nube | 
| Suscriba un punto de conexión a un tema SNS. | Para suscribir una dirección de correo electrónico como punto de conexión al tema de SNS que ha creado, siga las instrucciones de la [documentación de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html). En **Protocolo**, elija [Email/Email-JSON](https://docs.aws.amazon.com/sns/latest/dg/sns-email-notifications.html). También puede elegir un punto de conexión diferente en función de sus requisitos. | Administrador de la nube | 

### Configurar el registro en Network Firewall
<a name="set-up-logging-in-network-firewall"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Habilite el registro de firewall. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.html)Para obtener más información sobre el uso de CloudWatch Logs como destino de registro para Network Firewall, consulte [Amazon CloudWatch Logs](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-cw-logs.html) en la documentación de Network Firewall.  | Administrador de la nube | 

### Configurar una regla con estado en Network Firewall
<a name="set-up-a-stateful-rule-in-network-firewall"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un grupo de reglas con estado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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 la nube | 
| Asocie la regla con estado a Network Firewall. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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 la nube | 

### Cree una función de Lambda para leer los registros
<a name="create-a-lambda-function-to-read-the-logs"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear el código para la función de Lambda. | En un entorno de desarrollo integrado (IDE) que pueda leer el evento CloudWatch Logs de Network Firewall para el tráfico saliente, pegue el siguiente código de Python 3 y `<SNS-topic-ARN>` sustitúyalo por su 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>Este ejemplo de código analiza el contenido de CloudWatch los registros y captura el nombre del servidor proporcionado por el SNI en el encabezado HTTPS. | Desarrollador de aplicaciones | 
| Crear la función de Lambda. | Para crear la función de Lambda, siga las instrucciones de la [documentación de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#getting-started-create-function) y elija **Python 3.9** para el **Tiempo de ejecución**. | Administrador de la nube | 
| Añada el código a la función de Lambda. | Para añadir el código Python a la función de Lambda que creó anteriormente, siga las instrucciones de la [documentación de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html#configuration-function-update). | Administrador de la nube | 
| Agregue CloudWatch registros como activador a la función Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.html)Para obtener más información, consulte [Uso de Lambda con CloudWatch registros](https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchlogs.html) en la documentación de Lambda. | Administrador de la nube | 
| Agregue permisos de publicación de SNS. | Agregue el permiso **sns:Publish** a la función de ejecución de Lambda para que Lambda pueda realizar llamadas a la API para publicar mensajes en SNS.  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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 la nube | 

### Pruebe la funcionalidad de su notificación de SNS
<a name="test-the-functionality-of-your-sns-notification"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Envíe tráfico a través de Network Firewall. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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>A continuación, consulte el registro de alertas de Network Firewall en Amazon CloudWatch siguiendo las instrucciones de la [ CloudWatch documentación de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SearchDataFilterPattern.html). El registro de alerta muestra el siguiente resultado:<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> | Ingeniero de pruebas | 