Usa Network Firewall per acquisire i nomi di dominio DNS dal Server Name Indication (SNI) per il traffico in uscita - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usa Network Firewall per acquisire i nomi di dominio DNS dal Server Name Indication (SNI) per il traffico in uscita

Creato da Kirankumar Chandrashekar (AWS)

Ambiente: PoC o pilota

Tecnologie: sicurezza, identità, conformità; reti; app Web e mobili

Carico di lavoro: tutti gli altri carichi di lavoro

Servizi AWS: AWS Lambda; AWS Network Firewall; Amazon VPC; Amazon Logs CloudWatch

Riepilogo

Questo modello mostra come utilizzare Amazon Web Services (AWS) Network Firewall per raccogliere i nomi di dominio DNS forniti dalla Server Name Indication (SNI) nell'intestazione HTTPS del traffico di rete in uscita. Network Firewall è un servizio gestito che semplifica l'implementazione di protezioni di rete critiche per Amazon Virtual Private Cloud (Amazon VPC), inclusa la possibilità di proteggere il traffico in uscita con un firewall che blocca i pacchetti che non soddisfano determinati requisiti di sicurezza. La protezione del traffico in uscita verso nomi di dominio DNS specifici si chiama filtro in uscita, che consiste nel monitorare e potenzialmente limitare il flusso di informazioni in uscita da una rete all'altra.

Dopo aver acquisito i dati SNI che passano attraverso Network Firewall, puoi utilizzare Amazon CloudWatch Logs e AWS Lambda per pubblicare i dati su un argomento Amazon Simple Notification Service (Amazon SNS) che genera notifiche e-mail. Le notifiche e-mail includono il nome del server e altre informazioni SNI pertinenti. Inoltre, è possibile utilizzare l'output di questo pattern per consentire o limitare il traffico in uscita in base al nome di dominio nell'SNI utilizzando le regole del firewall. Per ulteriori informazioni, consulta Lavorare con gruppi di regole stateful in AWS Network Firewall nella documentazione di Network Firewall.

Prerequisiti e limitazioni

Prerequisiti

Nota: Network Firewall può utilizzare una delle seguenti configurazioni VPC:

Architettura

Il diagramma seguente mostra come utilizzare Network Firewall per raccogliere dati SNI dal traffico di rete in uscita e quindi pubblicare tali dati su un argomento SNS utilizzando CloudWatch Logs e Lambda.

Flusso di lavoro tra Network Firewall, CloudWatch Logs, Lambda e Amazon SNS.

Il diagramma mostra il flusso di lavoro seguente:

  1. Network Firewall raccoglie i nomi di dominio dai dati SNI nell'intestazione HTTPS del traffico di rete in uscita.

  2. CloudWatch Logs monitora i dati SNI e richiama una funzione Lambda ogni volta che il traffico di rete in uscita passa attraverso Network Firewall.

  3. La funzione Lambda legge i dati SNI acquisiti da CloudWatch Logs e quindi li pubblica su un argomento SNS.

  4. L'argomento SNS ti invia una notifica e-mail che include i dati SNI.

Automazione e scalabilità

Stack tecnologico

  • CloudWatch Registri Amazon

  • Amazon SNS

  • Amazon VPC

  • AWS Lambda 

  • AWS Network Firewall

Strumenti

Servizi AWS

  • Amazon CloudWatch Logs: puoi utilizzare Amazon CloudWatch Logs per monitorare, archiviare e accedere ai tuoi file di log da istanze Amazon Elastic Compute Cloud (Amazon EC2) CloudTrail, AWS, Amazon Route 53 e altre fonti.

  • Amazon SNS — Amazon Simple Notification Service (Amazon SNS) è un servizio gestito che fornisce il recapito dei messaggi dagli editori agli abbonati (noti anche come produttori e consumatori).

  • Amazon VPC: Amazon Virtual Private Cloud (Amazon VPC) fornisce una sezione logicamente isolata del cloud AWS in cui è possibile avviare le risorse AWS in una rete virtuale definita dall'utente. Questa rete virtuale è simile a una comune rete da gestire all'interno del proprio data center, ma con i vantaggi dell'infrastruttura scalabile di AWS.

  • AWS Lambda: AWS Lambda è un servizio di elaborazione che consente di eseguire codice senza effettuare il provisioning o la gestione di server.

  • AWS Network Firewall: AWS Network Firewall è un servizio gestito che semplifica l'implementazione delle protezioni di rete essenziali per tutti i tuoi Amazon VPC.

Epiche

AttivitàDescrizioneCompetenze richieste

Crea un gruppo di CloudWatch log.

  1. Accedi alla Console di gestione AWS e apri la CloudWatch console.

  2. Nel pannello di navigazione, selezionare Log groups (Gruppi di log).

  3. Selezionare Actions (Operazioni) e scegliere Create log group (Crea gruppo di log).

  4. Immettere un nome per il gruppo di log, quindi selezionare Create log group (Crea gruppo di log).

Per ulteriori informazioni, consulta Lavorare con gruppi di log e flussi di log nella CloudWatch documentazione.

Amministratore cloud
AttivitàDescrizioneCompetenze richieste

Creare un argomento SNS.

Per creare un argomento SNS, segui le istruzioni nella documentazione di Amazon SNS.

Amministratore cloud

Sottoscrivi un endpoint all'argomento SNS.

Per iscrivere un indirizzo e-mail come endpoint all'argomento SNS che hai creato, segui le istruzioni nella documentazione di Amazon SNS. Per Protocollo, scegli Email/email-JSON. Nota: puoi anche scegliere un endpoint diverso in base alle tue esigenze.

Amministratore cloud
AttivitàDescrizioneCompetenze richieste

Abilita la registrazione del firewall.

  1. Accedi alla Console di gestione AWS e apri la console Amazon VPC.

  2. Nel pannello di navigazione, in NETWORK FIREWALL, scegli Firewall.

  3. Nella sezione Firewall, scegli il firewall in cui desideri acquisire il nome del server dal SNI per il traffico in uscita.

  4. Scegli la scheda Dettagli del firewall, quindi scegli Modifica nella sezione Registrazione. 

  5. Per Tipo di registro, seleziona Avviso. Per Destinazione di registro per gli avvisi, seleziona il gruppo di CloudWatch log

  6. Per Gruppo di CloudWatch log, cerca e scegli il gruppo di log che hai creato in precedenza, quindi scegli Salva.

Per ulteriori informazioni sull'utilizzo di CloudWatch Logs come destinazione di log per Network Firewall, consulta Amazon CloudWatch Logs nella documentazione di Network Firewall. 

Amministratore cloud
AttivitàDescrizioneCompetenze richieste

Crea una regola statica.

  1. Accedi alla Console di gestione AWS e apri la console Amazon VPC.

  2. Nel riquadro di navigazione, in NETWORK FIREWALL, scegli Network Firewall Rule Groups.

  3. Scegli Crea gruppo di regole Network Firewall.

  4. Nella pagina Crea gruppo di regole Network Firewall, per il tipo di gruppo di regole, scegli Stateful rule group. Nota: per ulteriori informazioni, consulta Working with stateful rule group in AWS Network Firewall.

  5. Nella sezione Stateful rule group, inserisci un nome e una descrizione per il gruppo di regole.

  6. Per Capacità, imposta la capacità massima che desideri consentire per il gruppo di regole stateful (fino a un massimo di 30.000). Nota: non puoi modificare questa impostazione dopo aver creato il gruppo di regole. Per informazioni su come calcolare la capacità, consulta Setting rule group capacity in AWS Network Firewall. Per informazioni sull'impostazione massima, consulta le quote di AWS Network Firewall.

  7. Per le opzioni del gruppo di regole Stateful, seleziona 5-tuple.

  8. Nella sezione Stateful rule order, scegli Default.

  9. Nella sezione Variabili delle regole, mantieni i valori predefiniti.

  10. Nella sezione Aggiungi regola, scegli TLS per Protocollo. Per Origine, scegli Qualsiasi. Per Porta di origine, scegli Qualsiasi porta. Per Destinazione, scegli Qualsiasi. Per Porta di destinazione, scegli Qualsiasi porta. Per Direzione del traffico, scegli Avanti. In Azione, scegli Avviso. Scegli Aggiungi regola.

  11. Scegli Crea gruppo di regole stateful.

Amministratore cloud

Associa la regola stateful a Network Firewall.

  1. Accedi alla Console di gestione AWS e apri la console Amazon VPC.

  2. Nel pannello di navigazione, in NETWORK FIREWALL, scegli Firewalls.

  3. Scegli il firewall in cui desideri acquisire il nome del server dal SNI per il traffico in uscita.

  4. Nella sezione Gruppi di regole con stato, scegli Azioni, quindi scegli Aggiungi gruppi di regole con stato non gestiti

  5. Nella pagina Aggiungi gruppi di regole stateful non gestiti, seleziona il gruppo di regole stateful che hai creato in precedenza, quindi scegli Aggiungi gruppo di regole stateful.

Amministratore cloud
AttivitàDescrizioneCompetenze richieste

Crea il codice per la funzione Lambda.

In un ambiente di sviluppo integrato (IDE) in grado di leggere l'evento CloudWatch Logs di Network Firewall per il traffico in uscita, incolla il seguente codice Python 3 e <SNS-topic-ARN> sostituiscilo con il tuo valore:

import json import gzip import base64 import boto3 sns_client = boto3.client('sns') def lambda_handler(event, context): decoded_event = json.loads(gzip.decompress(base64.b64decode(event['awslogs']['data']))) body = ''' {filtermatch} '''.format( loggroup=decoded_event['logGroup'], logstream=decoded_event['logStream'], filtermatch=decoded_event['logEvents'][0]['message'], ) print(body) filterMatch = json.loads(body) data = [] if 'http' in filterMatch['event']: data.append(filterMatch['event']['http']['hostname']) elif 'tls' in filterMatch['event']: data.append(filterMatch['event']['tls']['sni']) result = 'Domain accessed ' + 1*' ' + (data[0]) + 1*' ' 'via AWS Network Firewall ' + 1*' ' + (filterMatch['firewall_name']) print(result) message = {'ServerName': result} send_to_sns = sns_client.publish( TargetArn=<SNS-topic-ARN>, #Replace with the SNS topic ARN Message=json.dumps({'default': json.dumps(message), 'sms': json.dumps(message), 'email': json.dumps(message)}), Subject='Server Name passed through the Network Firewall', MessageStructure='json' )

Questo esempio di codice analizza il contenuto dei CloudWatch Logs e acquisisce il nome del server fornito da SNI nell'intestazione HTTPS.

Sviluppatore di app

Creazione della funzione Lambda

Per creare la funzione Lambda, segui le istruzioni nella documentazione di Lambda e scegli Python 3.9 for Runtime.

Amministratore cloud

Aggiungi il codice alla funzione Lambda.

Per aggiungere il codice Python alla funzione Lambda creata in precedenza, segui le istruzioni nella documentazione di Lambda.

Amministratore cloud

Aggiungi CloudWatch i log come trigger alla funzione Lambda.

  1. Accedi alla Console di gestione AWS e apri la console Lambda.

  2. Nel pannello di navigazione, scegli Funzioni, quindi scegli la funzione che hai creato in precedenza.

  3. Nella sezione Panoramica della funzione, scegli Aggiungi trigger.

  4. Nella pagina Aggiungi trigger, nella sezione Configurazione Trigger, scegli CloudWatch Registri, quindi scegli Aggiungi.

  5. Per Gruppo di log, scegli il gruppo di CloudWatch log che hai creato in precedenza.

  6. Per Nome del filtro, inserisci un nome per il filtro.

  7. Scegli Aggiungi.

  8. Nella scheda Configurazione della pagina della funzione, nella sezione Trigger, seleziona il trigger che hai appena aggiunto, quindi scegli Abilita.

Per ulteriori informazioni, consulta Using Lambda with CloudWatch Logs nella documentazione di Lambda.

Amministratore cloud

Aggiungi le autorizzazioni di pubblicazione SNS.

Aggiungi l'autorizzazione SNS:Publish al ruolo di esecuzione Lambda, in modo che Lambda possa effettuare chiamate API per pubblicare messaggi su SNS.  

  1. Trova il ruolo di esecuzione della funzione Lambda che hai creato in precedenza.

  2. Aggiungi la seguente policy al tuo ruolo AWS Identity and Access Management (IAM):

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSNSPublish", "Effect": "Allow", "Action": [ "sns:GetTopicAttributes", "sns:Subscribe", "sns:Unsubscribe", "sns:Publish" ], "Resource": "*" } ] }
Amministratore cloud
AttivitàDescrizioneCompetenze richieste

Invia traffico tramite Network Firewall.

  1. Invia o attendi che il traffico HTTPS passi attraverso Network Firewall.

  2. Controlla l'e-mail di notifica SNS che ricevi da AWS quando il traffico attraversa Network Firewall. L'e-mail include i dettagli SNI per il traffico in uscita. Ad esempio, l'e-mail generata dal codice Lambda precedente avrà il seguente contenuto se il nome di dominio a cui si accede è https://aws.amazon.com e il protocollo di abbonamento è EMAIL-JSON:

{ "Type": "Notification", "MessageId": "<messageID>", "TopicArn": "arn:aws:sns:us-west-2:123456789:testSNSTopic", "Subject": "Server Name passed through the Network Firewall", "Message": "{\"ServerName\": \"Domain 'aws.amazon.com' accessed via AWS Network Firewall 'AWS-Network-Firewall-Multi-AZ-firewall\"}", "Timestamp": "2022-03-22T04:10:04.217Z", "SignatureVersion": "1", "Signature": "<Signature>", "SigningCertURL": "<SigningCertUrl>", "UnsubscribeURL": "<UnsubscribeURL>" }

Quindi, controlla il registro degli avvisi di Network Firewall in Amazon CloudWatch seguendo le istruzioni nella CloudWatch documentazione di Amazon. Il registro degli avvisi mostra il seguente output:

{ "firewall_name": "AWS-Network-Firewall-Multi-AZ-firewall", "availability_zone": "us-east-2b", "event_timestamp": "<event timestamp>", "event": { "timestamp": "2021-03-22T04:10:04.214222+0000", "flow_id": <flow ID>, "event_type": "alert", "src_ip": "10.1.3.76", "src_port": 22761, "dest_ip": "99.86.59.73", "dest_port": 443, "proto": "TCP", "alert": { "action": "allowed", "signature_id": 2, "rev": 0, "signature": "", "category": "", "severity": 3 }, "tls": { "subject": "CN=aws.amazon.com", "issuerdn": "C=US, O=Amazon, OU=Server CA 1B, CN=Amazon", "serial": "<serial number>", "fingerprint": "<fingerprint ID>", "sni": "aws.amazon.com", "version": "TLS 1.2", "notbefore": "2020-09-30T00:00:00", "notafter": "2021-09-23T12:00:00", "ja3": {}, "ja3s": {} }, "app_proto": "tls" } }
Tecnico collaudatore