Verwenden Sie die Network Firewall, um die DNS Domainnamen aus der Servernamenanzeige (SNI) für ausgehenden Datenverkehr zu erfassen - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie die Network Firewall, um die DNS Domainnamen aus der Servernamenanzeige (SNI) für ausgehenden Datenverkehr zu erfassen

Erstellt von Kirankumar Chandrashekar () AWS

Umgebung: PoC oder Pilotprojekt

Technologien: Sicherheit, Identität, Compliance; Netzwerke; Web- und mobile Apps

Arbeitslast: Alle anderen Workloads

AWSDienste: AWS Lambda; AWS Network Firewall; AmazonVPC; Amazon Logs CloudWatch

Übersicht

Dieses Muster zeigt Ihnen, wie Sie die Amazon Web Services (AWS) Network Firewall verwenden, um die DNS Domainnamen zu sammeln, die durch die Server Name Indication (SNI) im HTTPS Header Ihres ausgehenden Netzwerkverkehrs bereitgestellt werden. Network Firewall ist ein verwalteter Service, der es einfach macht, wichtige Netzwerkschutzmaßnahmen für Amazon Virtual Private Cloud (AmazonVPC) bereitzustellen, einschließlich der Möglichkeit, ausgehenden Datenverkehr mit einer Firewall zu sichern, die Pakete blockiert, die bestimmte Sicherheitsanforderungen nicht erfüllen. Die Sicherung des ausgehenden Datenverkehrs zu bestimmten DNS Domainnamen wird als Ausgangsfilterung bezeichnet. Dabei handelt es sich um eine Methode, bei der der ausgehende Informationsfluss von einem Netzwerk in ein anderes überwacht und möglicherweise eingeschränkt wird.

Nachdem Sie die SNI Daten erfasst haben, die die Network Firewall passieren, können Sie Amazon CloudWatch Logs und AWS Lambda verwenden, um die Daten in einem Amazon Simple Notification Service (AmazonSNS) -Thema zu veröffentlichen, das E-Mail-Benachrichtigungen generiert. Die E-Mail-Benachrichtigungen enthalten den Servernamen und andere relevante SNI Informationen. Darüber hinaus können Sie die Ausgabe dieses Musters verwenden, um ausgehenden Datenverkehr anhand des Domainnamens mithilfe SNI von Firewallregeln zuzulassen oder einzuschränken. Weitere Informationen finden Sie unter Arbeiten mit statusbehafteten Regelgruppen in der AWS Network Firewall in der Netzwerk-Firewall-Dokumentation.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives Konto AWS

  • AWSCommand Line Interface (AWSCLI) Version 2, installiert und konfiguriert unter Linux, macOS oder Windows

  • Network Firewall, in Amazon eingerichtet und konfiguriert VPC und zur Überprüfung des ausgehenden Datenverkehrs verwendet

Hinweis: Die Network Firewall kann jede der folgenden VPC Konfigurationen verwenden:

Architektur

Das folgende Diagramm zeigt, wie die Network Firewall verwendet wird, um SNI Daten aus ausgehendem Netzwerkverkehr zu sammeln und diese Daten dann mithilfe von CloudWatch Logs und Lambda in einem SNS Thema zu veröffentlichen.

Workflow zwischen Network Firewall, CloudWatch Logs, Lambda und AmazonSNS.

Das Diagramm zeigt den folgenden Workflow:

  1. Die Network Firewall erfasst Domainnamen aus den SNI Daten im HTTPS Header Ihres ausgehenden Netzwerkverkehrs.

  2. CloudWatch Logs überwacht die SNI Daten und ruft eine Lambda-Funktion auf, wenn der ausgehende Netzwerkverkehr die Network Firewall passiert.

  3. Die Lambda-Funktion liest die von CloudWatch Logs erfassten SNI Daten und veröffentlicht diese Daten dann in einem SNS Thema.

  4. Das SNS Thema sendet Ihnen eine E-Mail-Benachrichtigung, die die SNI Daten enthält.

Automatisierung und Skalierung

Technologie-Stack

  • CloudWatch Amazon-Protokolle

  • Amazon SNS

  • Amazon VPC

  • AWSLambda 

  • AWS Network Firewall

Tools

AWSDienstleistungen

  • Amazon CloudWatch Logs — Sie können Amazon CloudWatch Logs verwenden, um Ihre Protokolldateien von Amazon Elastic Compute Cloud (AmazonEC2) -Instances, AWS CloudTrail Amazon Route 53 und anderen Quellen zu überwachen, zu speichern und darauf zuzugreifen.

  • Amazon SNS — Amazon Simple Notification Service (AmazonSNS) ist ein verwalteter Service, der die Nachrichtenzustellung von Verlagen an Abonnenten (auch bekannt als Produzenten und Verbraucher) ermöglicht.

  • Amazon VPC — Amazon Virtual Private Cloud (AmazonVPC) stellt einen logisch isolierten Bereich der AWS Cloud bereit, in dem Sie AWS Ressourcen in einem von Ihnen definierten virtuellen Netzwerk starten können. Dieses virtuelle Netzwerk ähnelt stark einem herkömmlichen Netzwerk, das Sie in Ihrem eigenen Rechenzentrum betreiben würden, und bietet die Vorteile der Nutzung der skalierbaren Infrastruktur vonAWS.

  • AWSLambda — AWS Lambda ist ein Rechendienst, mit dem Sie Code ausführen können, ohne Server bereitzustellen oder zu verwalten.

  • AWSNetwork Firewall — Die AWS Network Firewall ist ein verwalteter Service, mit dem Sie auf einfache Weise wichtige Netzwerkschutzmaßnahmen für Ihr gesamtes VPCs Amazon-Netzwerk einrichten können.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine CloudWatch Protokollgruppe.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die CloudWatch Konsole.

  2. Wählen Sie im Navigationsbereich Protokollgruppen aus.

  3. Wählen Sie Actions (Aktionen) und anschließend Create log group (Protokollgruppe erstellen) aus.

  4. Geben Sie einen Namen für die Protokollgruppe ein. Wählen Sie anschließend Create log group (Protokollgruppe erstellen) aus.

Weitere Informationen finden Sie in der CloudWatch Dokumentation unter Arbeiten mit Protokollgruppen und Protokollströmen.

Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Ein SNS-Thema erstellen.

Folgen Sie den Anweisungen in der SNSAmazon-Dokumentation, um ein SNS Thema zu erstellen.

Cloud-Administrator

Abonnieren Sie einen Endpunkt für das SNS Thema.

Um eine E-Mail-Adresse als Endpunkt für das von Ihnen erstellte SNS Thema zu abonnieren, folgen Sie den Anweisungen in der SNSAmazon-Dokumentation. Wählen Sie unter Protokoll die Option Email/Email - aus. JSON Hinweis: Sie können je nach Ihren Anforderungen auch einen anderen Endpunkt auswählen.

Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Aktivieren Sie die Firewall-Protokollierung.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die VPCAmazon-Konsole.

  2. Wählen Sie im Navigationsbereich unter NETWORKFIREWALLFirewalls aus.

  3. Wählen Sie im Abschnitt Firewalls die Firewall aus, von der Sie den Servernamen SNI für ausgehenden Datenverkehr erfassen möchten.

  4. Wählen Sie die Registerkarte Firewall-Details und dann im Abschnitt Protokollierung die Option Bearbeiten aus. 

  5. Wählen Sie als Protokolltyp die Option Warnung aus. Wählen Sie unter Protokollziel für Warnungen die Option CloudWatch Protokollgruppe aus. 

  6. Suchen Sie unter CloudWatch Protokollgruppe nach der Protokollgruppe, die Sie zuvor erstellt haben, wählen Sie sie aus, und klicken Sie dann auf Speichern.

Weitere Informationen zur Verwendung von CloudWatch Logs als Protokollziel für die Network Firewall finden Sie unter Amazon CloudWatch Logs in der Dokumentation zur Network Firewall. 

Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine Stateful-Regel.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die VPCAmazon-Konsole.

  2. Wählen Sie im Navigationsbereich unter NETWORKFIREWALLNetzwerk-Firewall-Regelgruppen aus.

  3. Wählen Sie „Netzwerk-Firewall-Regelgruppe erstellen“.

  4. Wählen Sie auf der Seite „Netzwerk-Firewall-Regelgruppe erstellen“ als Regelgruppentyp die Option Stateful-Regelgruppe aus. Hinweis: Weitere Informationen finden Sie unter Arbeiten mit statusbehafteten Regelgruppen in der AWS Network Firewall.

  5. Geben Sie im Abschnitt Stateful-Regelgruppe einen Namen und eine Beschreibung für die Regelgruppe ein.

  6. Geben Sie unter Kapazität die maximale Kapazität ein, die Sie für die statusbehaftete Regelgruppe zulassen möchten (bis zum Maximum von 30.000). Hinweis: Sie können diese Einstellung nicht ändern, nachdem Sie die Regelgruppe erstellt haben. Informationen zur Berechnung der Kapazität finden Sie unter Einstellung der Regelgruppenkapazität in der AWS Network Firewall. Informationen zur Maximaleinstellung finden Sie unter AWSNetzwerk-Firewall-Kontingente.

  7. Wählen Sie für Stateful-Regelgruppenoptionen die Option 5-Tuple aus.

  8. Wählen Sie im Abschnitt Reihenfolge der Stateful-Regeln die Option Standard aus.

  9. Behalten Sie im Abschnitt Regelvariablen die Standardwerte bei.

  10. Wählen Sie im Abschnitt Regel hinzufügen die Option TLSProtokoll aus. Wählen Sie als Quelle die Option Beliebig aus. Wählen Sie für Quellport die Option Beliebiger Port aus. Wählen Sie als Ziel die Option Beliebig aus. Wählen Sie für Zielport die Option Beliebiger Port aus. Wählen Sie für Verkehrsrichtung die Option Forward aus. Wählen Sie für Aktion die Option Warnung aus. Wählen Sie Regel hinzufügen aus.

  11. Wählen Sie Stateful-Regelgruppe erstellen aus.

Cloud-Administrator

Ordnen Sie die statusbehaftete Regel der Network Firewall zu.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die VPCAmazon-Konsole.

  2. Wählen Sie im Navigationsbereich unter NETWORKFIREWALLFirewalls aus.

  3. Wählen Sie die Firewall aus, von der Sie den Servernamen SNI für ausgehenden Datenverkehr erfassen möchten.

  4. Wählen Sie im Abschnitt Stateful-Regelgruppen die Option Aktionen und dann Unverwaltete statusbehaftete Regelgruppen hinzufügen aus. 

  5. Wählen Sie auf der Seite Nicht verwaltete statusbehaftete Regelgruppen hinzufügen die statusbehaftete Regelgruppe aus, die Sie zuvor erstellt haben, und klicken Sie dann auf Stateful-Regelgruppe hinzufügen.

Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie den Code für die Lambda-Funktion.

Fügen Sie in einer integrierten Entwicklungsumgebung (IDE), die das CloudWatch Logs-Ereignis von der Network Firewall für ausgehenden Datenverkehr lesen kann, den folgenden Python-3-Code ein und <SNS-topic-ARN> ersetzen Sie ihn durch Ihren Wert:

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' )

Dieses Codebeispiel analysiert den Inhalt der CloudWatch Protokolle und erfasst den Servernamen, der SNI in der HTTPS Kopfzeile angegeben wird.

App-Developer

So erstellen Sie die Lambda-Funktion:

Um die Lambda-Funktion zu erstellen, folgen Sie den Anweisungen in der Lambda-Dokumentation und wählen Sie Python 3.9 für Runtime.

Cloud-Administrator

Fügen Sie den Code zur Lambda-Funktion hinzu.

Folgen Sie den Anweisungen in der Lambda-Dokumentation, um Ihren Python-Code zu der zuvor erstellten Lambda-Funktion hinzuzufügen.

Cloud-Administrator

Fügen Sie CloudWatch Logs als Trigger zur Lambda-Funktion hinzu.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Lambda-Konsole.

  2. Wählen Sie im Navigationsbereich Funktionen und dann die Funktion aus, die Sie zuvor erstellt haben.

  3. Wählen Sie im Abschnitt Funktionsübersicht die Option Auslöser hinzufügen aus.

  4. Wählen Sie auf der Seite Trigger hinzufügen im Abschnitt Trigger-Konfiguration die Option CloudWatch Logs und dann Add aus.

  5. Wählen Sie unter Protokollgruppe die CloudWatch Protokollgruppe aus, die Sie zuvor erstellt haben.

  6. Geben Sie unter Filtername einen Namen für Ihren Filter ein.

  7. Wählen Sie Hinzufügen aus.

  8. Wählen Sie auf der Seite Ihrer Funktion auf der Registerkarte Konfiguration im Abschnitt Trigger den Trigger aus, den Sie gerade hinzugefügt haben, und klicken Sie dann auf Aktivieren.

Weitere Informationen finden Sie unter Using Lambda with CloudWatch Logs in der Lambda-Dokumentation.

Cloud-Administrator

Fügen Sie SNS Veröffentlichungsberechtigungen hinzu.

Fügen Sie der Lambda-Ausführungsrolle die Berechtigung sns:Publish hinzu, sodass Lambda API Aufrufe zum Veröffentlichen von Nachrichten an tätigen kann. SNS  

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSNSPublish", "Effect": "Allow", "Action": [ "sns:GetTopicAttributes", "sns:Subscribe", "sns:Unsubscribe", "sns:Publish" ], "Resource": "*" } ] }
Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Senden Sie den Datenverkehr über die Network Firewall.

  1. Senden oder warten Sie, bis der HTTPS Datenverkehr die Network Firewall passiert.

  2. Überprüfen Sie die SNS Benachrichtigungs-E-Mail, die Sie erhaltenAWS, wenn der Datenverkehr die Network Firewall passiert. Die E-Mail enthält die SNI Details für ausgehenden Datenverkehr. Die aus dem obigen Lambda-Code generierte E-Mail hat beispielsweise den folgenden Inhalt, wenn der aufgerufene Domainname lautet https://aws.amazon.comund das Abonnementprotokoll EMAIL- JSON lautet:

{ "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>" }

Überprüfen Sie dann das Warnprotokoll der Network Firewall bei Amazon, CloudWatch indem Sie den Anweisungen in der CloudWatch Amazon-Dokumentation folgen. Das Warnungsprotokoll zeigt die folgende Ausgabe:

{ "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" } }
Testingenieur