Comment configurer simultanément les groupes de règles standard de Network Firewall et les règles des groupes de règles des listes de domaines ?

Lecture de 8 minute(s)
0

Je souhaite configurer les règles des groupes de règles standard d'AWS Network Firewall et les règles des groupes de règles des listes de domaines pour qu'elles fonctionnent ensemble afin de contrôler le trafic comme prévu.

Brève description

Vous pouvez configurer des règles de groupe de règles standard pour supprimer le trafic TCP établi. Vous pouvez ensuite configurer les règles des groupes de règles de la liste de domaines pour autoriser les flux TCP (TLS) envoyés aux domaines autorisés à partir du groupe de règles de la liste de domaines. Pour ce faire, vous devez configurer un groupe de règles de liste de domaines et des règles de groupe de règles standard à l'aide du mot clé « flux ».

**Remarque :**La console Amazon Virtual Private Cloud (Amazon VPC) affiche uniquement les options de règles précédemment configurées. Cela ne vous permet pas d'ajouter des options de règles. Pour plus d'informations, consultez la section Groupes de règles dynamiques standard dans AWS Network Firewall.

Vous pouvez utiliser AWS CloudFormation ou une API pour spécifier des options de règles pour vos règles de groupe de règles standard. L'interface de la ligne de commande AWS (AWS CLI) est utilisée pour les exemples de cet article :

**Remarque :**Si vous recevez des erreurs lors de l'exécution des commandes de l'AWS CLI, assurez-vous que vous utilisez la version la plus récente de l'AWS CLI.

Résolution

Prérequis

Avant de configurer vos règles pour Network Firewall, consultez les informations suivantes :

  • Cet article présente une méthode de configuration des règles de groupe de règles standard qui permet de saisir des options de règles. Dans cet exemple, l'ajout d'options de règle à une règle de groupe de règles standard lui permet de fonctionner avec un groupe de règles de liste de domaines. Cela vous permet de mieux contrôler votre trafic.
  • Cet article utilise l'un des modèles de déploiement distribué. Ce modèle protège le trafic entre un sous-réseau public de charge de travail doté d'une instance cliente Amazon Elastic Compute Cloud (Amazon EC2) et une passerelle Internet. L'ordre des règles de politique de pare-feu est défini sur l'ordre d'action par défaut.
  • L'instance Amazon EC2 est autorisée à envoyer du trafic sur le port TCP 443 dans le groupe de sécurité VPC et l'ACL réseau.
  • Les règles de pare-feu utilisées dans cet article sont des exemples auxquels vous pouvez vous référer. Vous devez vous assurer que les règles que vous configurez pour votre pare-feu sont adaptées à vos besoins spécifiques et fonctionnent comme prévu.

**Remarque :**Dans les exemples de code de cet article, des points de suspension (…) ont été utilisés pour raccourcir les saisies.

Configuration commune du groupe de règles de liste de domaines et du groupe de règles standard sans mot clé de flux

Lorsque vous configurez un groupe de règles de liste de domaines et un groupe de règles standard, votre configuration peut être similaire à celle décrite dans cet exemple. Si vous créez un groupe de règles de liste de domaines et un groupe de règles standard, vous devez utiliser un mot clé de flux. Si vous n'utilisez pas de mot clé de flux, vous risquez de rencontrer des problèmes tels que ceux décrits dans cet exemple.

Dans cet exemple, la console Amazon VPC est utilisée pour créer un groupe de règles de liste de domaines. La règle autorise le trafic HTTPS vers** example.com**.

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

**Remarque :**Un groupe de règles de liste de domaines dont l'action est définie sur Autoriser génère une autre règle. La règle est définie pour refuser le trafic du type de protocole spécifié qui ne correspond pas aux spécifications du domaine. Pour plus d'informations, consultez la section Filtrage des domaines.

L'utilisation de la console Amazon VPC pour créer une configuration commune d'une règle de groupe de règles standard produit un résultat similaire au tableau suivant :

ProtocoleSourceDestinationPort sourcePort de destinationDirectionAction
TCPPeu importePeu importePeu importePeu importeTransférerInterrompre

Lorsque vous envoyez une demande à un domaine autorisé pour tester la configuration de vos règles, le trafic est bloqué et vous recevez un message d'erreur « connexion expirée » :

$ 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

La configuration entraîne l'interruption de tout le trafic TCP et l'expiration du délai de connexion. Cela inclut le blocage du trafic TCP vers le domaine autorisé example.com.

La règle du groupe de règles de la liste de domaines qui autorise example.com via HTTPS échoue car le protocole TCP est le premier protocole à apparaître dans le flux initial. Le flux commence par la prise de contact TCP de couche inférieure et la règle de refus est évaluée. Cependant, il n'existe toujours pas de protocole TLS correspondant, et la règle d’interruption correspond donc. Cela entraîne une interruption de tout le trafic** vers **example.com.

**Remarque :**Vous pouvez configurer des niveaux de journalisation pour le moteur dynamique de votre pare-feu, ce qui vous permet d'accéder à des informations détaillées sur le trafic filtré. Pour plus d'informations, consultez Journalisation du trafic réseau depuis AWS Network Firewall.

Groupe de règles de liste de domaines et règle de groupe de règles standard avec mot clé de flux

Vous pouvez utiliser les commandesdescribe-rule-group et update-rule-group de Network Firewall pour mettre à jour les règles de vos groupes de règles standard afin d'inclure un mot clé de flux supplémentaire.

1.    Exécutez la commande describe-rule-group sur l'objet du groupe de règles dynamiques d'origine. Vous avez besoin de la valeur UpdateToken pour exécuter la commande update-rule-group.

Remarque : Une partie de la sortie de la commande suivante est utilisée comme modèle JSON pour d'autres ajustements ultérieurs.

$ 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.    Créez un fichier de règles JSON avec une configuration de règles modifiée. Exécutez une commande similaire à la suivante pour vérifier le contenu du fichier de règles JSON :

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

Dans cet exemple, le mot clé flux permet de terminer la liaison TCP avant d'évaluer la règle de suppression TCP lors de l'envoi d'une demande à example.com. Ensuite, l'ordre d'action par défaut de la règle est prioritaire. La liste des domaines autorise la règle HTTPS pour les correspondances avec example.com, permettant ainsi au reste du trafic de passer par ce flux. Tout trafic vers des domaines non autorisés est bloqué, de même que tout autre trafic TCP établi.

3.    Exécutez la commande update-rule-group à l'aide de la valeur UpdateToken et du fichier de règles JSON pour mettre à jour le groupe de règles standard :

$ 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

Le résultat ressemble à la sortie suivante :

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

4.    Exécutez la commande describe-rule-group pour vérifier les modifications apportées au groupe de règles dynamiques :

$ 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

La sortie ressemble au message suivant :

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

**Remarque :**Dans l'exemple précédent, « established, to_server » reflète la modification par rapport à la commande update-rule-group.

5.    Vérifiez que le groupe de règles de la liste de domaines et le groupe de règles standard filtrent correctement le trafic :

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

Dans l'exemple précédent, la sortie indique que le trafic HTTPS vers le domaine autorisé example.com aboutit, tel que configuré.

Dans l'exemple suivant, le trafic HTTPS vers des domaines non autorisés est bloqué, comme prévu :

$ 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

D'autres types de trafic TCP sont également bloqués en fonction de la configuration :

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

Informations connexes

Présentation pratique du moteur de règles flexibles d'AWS Network Firewall — Partie 1

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an