Wie konfiguriere ich die Standardregelgruppen der Netzwerk-Firewall und die Regelgruppenregeln für Domainlisten zusammen?

Lesedauer: 7 Minute
0

Ich möchte die Standardregelgruppenregeln und die Regelgruppenregeln für Domainlisten von AWS Network Firewall so konfigurieren, dass sie zusammenarbeiten, um den Datenverkehr wie erwartet zu kontrollieren.

Kurze Beschreibung

Sie können Standardregelgruppenregeln konfigurieren, um den etablierten TCP-Verkehr zu unterbrechen. Anschließend können Sie Regeln für Regelgruppen für die Domänenliste so konfigurieren, dass TCP-Datenflüsse (TLS) aus der Regelgruppe für die Domänenliste an zulässige Domänen gesendet werden. Dazu konfigurieren Sie eine Regelgruppe für die Domainliste und Standardregelgruppenregeln mit dem Schlüsselwort „flow“.

Hinweis: Die Amazon Virtual Private Cloud (Amazon VPC) -Konsole zeigt nur zuvor konfigurierte Regeloptionen an. Es erlaubt Ihnen nicht, Regeloptionen hinzuzufügen. Weitere Informationen finden Sie unter Standard-Stateful-Regelgruppen in der AWS Network Firewall.

Sie können AWS CloudFormation oder eine API verwenden, um Regeloptionen für Ihre Standardregelgruppenregeln anzugeben. Das AWS Command Line Interface (AWS CLI) wird für die Beispiele in diesem Artikel verwendet:

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.

Auflösung

Voraussetzungen

Bevor Sie Ihre Netzwerk-Firewall-Regeln konfigurieren, überprüfen Sie die folgenden Informationen:

  • In diesem Artikel wird eine Methode zur Konfiguration von Standardregelgruppenregeln vorgestellt, die die Eingabe von Regeloptionen ermöglicht. In diesem Beispiel ermöglicht das Hinzufügen von Regeloptionen zu einer Standardregelgruppenregel die Arbeit mit einer Regelgruppe für Domänenlisten. Auf diese Weise können Sie Ihren Verkehr besser kontrollieren.
  • In diesem Artikel wird eines der verteilten Bereitstellungsmodelle verwendet. Dieses Modell schützt den Datenverkehr zwischen einem öffentlichen Workload-Subnetz mit einer Client-Instance von Amazon Elastic Compute Cloud (Amazon EC2) und einem Internet-Gateway. Die Regelreihenfolge der Firewall-Richtlinie ist auf die standardmäßige Aktionsreihenfolge festgelegt.
  • Die Amazon EC2-Instance darf Datenverkehr über den TCP-Port 443 in der VPC Security Group und der Netzwerk-ACL senden.
  • Die in diesem Artikel verwendeten Firewallregeln sind Beispiele, auf die Sie sich beziehen können. Sie müssen sicherstellen, dass die Regeln, die Sie für Ihre Firewall konfigurieren, Ihren spezifischen Anforderungen entsprechen und wie erwartet funktionieren.

Hinweis: In den Codebeispielen in diesem Artikel wurden Ellipsen (...) verwendet, um Ausgaben zu verkürzen.

Allgemeine Konfiguration der Regelgruppe für die Domainliste und der Standardregelgruppe ohne Flow-Schlüsselwort

Wenn Sie eine Regelgruppe für die Domainliste und eine Standardregelgruppe konfigurieren, kann Ihre Konfiguration der in diesem Beispiel beschriebenen entsprechen. Wenn Sie eine Regelgruppe für die Domainliste und eine Standardregelgruppe erstellen, müssen Sie ein Flow-Schlüsselwort verwenden. Wenn Sie kein Flow-Schlüsselwort verwenden, können Probleme auftreten, wie sie in diesem Beispiel beschrieben werden.

In diesem Beispiel wird die Amazon VPC-Konsole verwendet, um eine Regelgruppe für die Domainliste zu erstellen. Die Regel erlaubt HTTPS-Verkehr zu example.com.

Domain name source: example.com
Source IPs type: Default
Protocol: HTTPs
Action: Allow

Hinweis: Eine Regelgruppe für die Domänenliste, für die die Aktion auf Zulassen gesetzt ist, generiert eine weitere Regel. Die Regel ist so eingerichtet, dass Datenverkehr des angegebenen Protokolltyps verweigert wird, der nicht den Domainspezifikationen entspricht. Weitere Informationen finden Sie unter Domainfilterung.

Wenn Sie die Amazon VPC-Konsole verwenden, um eine gemeinsame Konfiguration einer Standardregelgruppenregel zu erstellen, wird eine Ausgabe erzeugt, die der folgenden Tabelle ähnelt:

ProtokollQuelleZielQuellportZielportRichtungAktion
TCPIrgendeinIrgendeinIrgendeinIrgendeinVorwärtsFallenlassen

Wenn Sie eine Anfrage an eine zugelassene Domain senden, um Ihre Regelkonfiguration zu testen, wird der Datenverkehr blockiert und Sie erhalten die Fehlermeldung „Verbindung ist abgelaufen“:

$ 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

Die Konfiguration führt dazu, dass der gesamte TCP-Verkehr unterbrochen wird und dass für die Verbindung ein Timeout auftritt. Dazu gehört das Blockieren von TCP-basiertem Datenverkehr zur zulässigen Domain example.com.

Die Regelgruppenregel für die Domainliste, nach der example.com über HTTPS zugelassen wird, schlägt fehl, da das TCP-Protokoll das erste Protokoll ist, das im ersten Ablauf erscheint. Der Ablauf beginnt mit dem TCP-Handshake auf der unteren Ebene und die Ablehnungsregel wird ausgewertet. Es gibt jedoch immer noch kein passendes TLS-Protokoll, weshalb die Drop-Regel übereinstimmt. Dadurch sinkt der gesamte Traffic zu example.com.

Hinweis: Sie können die Protokollierungsstufen für die Stateful-Engine Ihrer Firewall konfigurieren, sodass Sie auf detaillierte Informationen über den gefilterten Datenverkehr zugreifen können. Weitere Informationen finden Sie unter Netzwerkverkehr von der AWS Network Firewall protokollieren.

Regelgruppe für die Domänenliste und Standardregelgruppenregel mit dem Schlüsselwort-Flow

Sie können die Befehle describe-rule-group und update-rule-group der Network Firewall verwenden, um Ihre Standardregelgruppenregeln um ein zusätzliches Flow-Schlüsselwort zu aktualisieren.

1.    Führen Sie den Befehl describe-rule-group für das ursprüngliche Stateful-Regelgruppenobjekt aus. Sie benötigen den Wert UpdateToken, um den Befehl update-rule-group auszuführen.

Hinweis: Ein Teil der Ausgabe des folgenden Befehls wird später als JSON-Vorlage für weitere Anpassungen verwendet.

$ 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.    Erstellen Sie eine JSON-Regeldatei mit einer geänderten Regelkonfiguration. Führen Sie einen Befehl ähnlich dem folgenden aus, um den Inhalt der JSON-Regeldatei zu überprüfen:

$ 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"
            ]
          }
        ]
      }
    ]
  }
}

In diesem Beispiel ermöglicht das Flow-Schlüsselwort, dass der TCP-Handshake abgeschlossen wird, bevor die TCP-Drop-Regel beim Senden einer Anfrage an example.com ausgewertet wird. Danach hat die Standardaktionsreihenfolge der Regel Vorrang. Die Domainliste erlaubt HTTPS-Regeln für example.com-Matches, sodass der restliche Traffic für diesen Fluss durchgelassen wird. Jeglicher Verkehr zu nicht zugelassenen Domains wird ebenso blockiert wie jeder andere etablierte TCP-Verkehr.

3.    Führen Sie den Befehl update-rule-group mit dem UpdateToken-Wert und der JSON-Regeldatei aus, um die Standardregelgruppe zu aktualisieren:

$ 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

Das Ergebnis sieht ähnlich wie in dieser Ausgabe aus:

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

4.    Führen Sie den Befehl describe-rule-group aus, um die Änderungen an der Stateful-Regelgruppe zu überprüfen:

$ 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

Die Ausgabe sieht ähnlich wie die folgende Meldung aus:

{(...)
        "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"
    }
}

Hinweis: Im vorherigen Beispiel spiegelt „established, to_server“ die Änderung gegenüber dem Befehl update-rule-group wider.

5.    Stellen Sie sicher, dass sowohl die Regelgruppe für die Domänenliste als auch die Standardregelgruppe den Datenverkehr korrekt filtern:

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

Im vorherigen Beispiel zeigt die Ausgabe, dass der HTTPS-Verkehr zur zulässigen Domain example.com wie konfiguriert erfolgreich ist.

In diesem nächsten Beispiel wird HTTPS-Verkehr zu Domains, die nicht zulässig sind, erwartungsgemäß blockiert:

$ 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

Je nach Konfiguration werden auch andere Arten von TCP-Verkehr blockiert:

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

Verwandte Informationen

Praktische Anleitung zur flexiblen Regel-Engine der AWS Network Firewall – Teil 1

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr