A propos des ACL de réseau

Vous pouvez utiliser une liste de contrôle d'accès pour contrôler tout le trafic entrant et sortant dans IBM Cloud® Virtual Private Cloud. Une liste de contrôle d'accès est un pare-feu virtuel intégré similaire à un groupe de sécurité. Contrairement aux groupes de sécurité, les règles ACL contrôlent le trafic vers et à partir du Sous-réseaux et non pas vers et à partir des Instances.

Pour obtenir une comparaison des caractéristiques des groupes de sécurité et des listes de contrôle d'accès, consultez le tableau de comparaison.

L'exemple qui est présenté dans ce document montre comment créer des listes de contrôle d'accès réseau dans votre VPC en utilisant l'interface de ligne de commande. Pour plus d'informations sur la configuration des ACL dans la console IBM Cloud, voir Configuration des ACL dans la console.

Utilisation des listes et des règles de contrôle d'accès

Pour rendre vos listes de contrôle d'accès efficaces, créez des règles qui déterminent comment traiter votre trafic réseau entrant et sortant. Vous pouvez créer plusieurs règles entrantes et sortantes. Pour plus d'informations sur les quotas de règles, voir Quotas.

  • Avec les règles entrantes, vous pouvez autoriser ou rejeter le trafic en provenance d'une plage d'adresses IP source, avec des protocoles et des ports spécifiés.
  • Avec les règles sortantes, vous pouvez autoriser ou rejeter le trafic vers une plage d'adresses IP de destination, avec des protocoles et des ports spécifiés.
  • Les règles de liste de contrôle d'accès sont classées par ordre de priorité et traitées en séquence. Les règles de priorité plus élevée sont évaluées en premier et prennent le pas sur les règles de priorité inférieure.
  • Les règles entrantes sont séparées des règles sortantes.
  • Si aucune règle n'est spécifiée, implicit deny est le comportement par défaut.

Pour plus d'informations sur l'utilisation de ICMP, TCP, UDP, et de tous les autres protocoles dans vos règles ACL, voir Comprendre les protocoles de communication Internet.

Limitations

  • Actuellement, les paquets de protocole ESP ne sont pris en charge que sur les instances dotées de Gen2 profils. Dans les instances avec d'autres profils et sur tous les serveurs bare metal, les paquets ESP entrants et sortants sont toujours rejetés. Bien que les règles ACL réseau puissent être configurées pour le trafic ESP à l'aide de l'API VPC, ces règles n'affectent que les instances dotées de Gen2 profils. Le protocole ESP n'est pas pris en charge sur les autres types de profils connectés au même réseau qu'un Gen2 profil. Le protocole ESP n'apparaît pas comme choix dans la IBM Cloud console afin d'éviter toute confusion entre les générations de profils d'instance. Pour plus d'informations, consultez les profils d'instance d' x86-64.

Mise à jour des règles ACL par défaut d'un VPC

L'ACL par défaut est similaire à toute autre ACL, à l'exception du fait qu'elle ne peut pas être supprimée.

Lorsque vous créez un VPC, le système crée un ACL par défaut pour le VPC avec deux règles :

  • Une règle nommée allow-inbound pour autoriser le trafic ICMP, TCP et UDP entrant, quelle que soit la source
  • Une règle nommée allow-outbound pour autoriser le trafic sortant ICMP, TCP et UDP vers n'importe quelle destination

Vous pouvez modifier les règles de l'ACL par défaut en utilisant la console, le CLI ou l'API.

Si vous modifiez les règles de l'ACL par défaut, ces règles modifiées s'appliquent alors à tous les sous-réseaux actuels et futurs attachés à l'ACL.

Connexion d'une liste de contrôle d'accès à un sous-réseau

Lorsque vous créez un sous-réseau, vous pouvez spécifier une ACL à connecter. Si vous ne spécifiez pas d'ACL, l'ACL réseau par défaut du VPC est attaché.

Chaque sous-réseau est associé à exactement une liste de contrôle d'accès. Vous pouvez remplacer la liste de contrôle d'accès d'un sous-réseau par une autre liste de contrôle d'accès.

Exemple de liste de contrôle d'accès

Dans l'exemple qui suit, vous créez deux listes de contrôle d'accès et vous les associez à deux sous-réseaux en utilisant l'interface de ligne de commande. La figure 1 illustre le scénario.

Figure montrant un exemple de scénario
avec deux

Comme l'illustre la Figure 1, vous disposez de deux serveurs Web qui traitent les demandes provenant d'Internet et de deux serveurs back-end que vous voulez cacher au public. Dans cet exemple, vous placez les serveurs dans deux sous-réseaux distincts, 10.10.10.0/24 et 10.10.20.0/24, et vous devez autoriser les serveurs Web à échanger des données avec les serveurs back-end. De plus, vous souhaitez autoriser un trafic sortant limité à partir des serveurs back-end.

Exemples de règles

Les exemples de règles qui suivent montrent comment configurer les règles de liste de contrôle d'accès pour le scénario de base.

Il est recommandé de donner aux règles à granularité fine une priorité plus élevée qu'aux règles à granularité grossière. Par exemple, vous disposez d'une règle qui bloque tout le trafic du sous-réseau 10.10.30.0/24. S'il est affecté d'une priorité plus élevée, toutes les règles à granularité fine avec une priorité inférieure permettant le trafic à partir de 10.10.30.5 ne sont jamais appliquées.

Pour les protocoles bidirectionnels tels que TCP, il est essentiel de définir des règles d'entrée et de sortie. La règle de sortie autorise la demande de connexion initiale TCP SYN, tandis que la règle d'entrée correspondante doit accepter la réponse TCP SYN ACK. Sans ces deux règles, la communication ne peut être établie.

Exemples de règles de liste de contrôle d'accès 1

Exemple de règles pour ACL-1
Direction Autoriser/Refuser IP source Port source Adresse IP de destination Port de destination Protocole Description
Entrant Autoriser 10.10.20.0/24 Tout 10.10.10.0/24 Tout Tout Autoriser tout le trafic entrant du sous-réseau 10.10.20.0/24 où sont placés les serveurs back-end
Entrant Autoriser 0.0.0.0/0 Tout 10.10.10.0/24 80 TCP Autoriser le trafic HTTP de l'internet vers le serveur web
Entrant Autoriser 0.0.0.0/0 Tout 10.10.10.0/24 443 TCP Autoriser le trafic HTTPS de l'internet vers le serveur web
Entrant Autoriser 0.0.0.0/0 80 10.10.10.0/24 Tout TCP Autoriser le trafic de retour HTTP de l'internet vers le serveur web
Entrant Autoriser 0.0.0.0/0 443 10.10.10.0/24 Tout TCP Autoriser le trafic de retour HTTPS de l'internet vers le serveur web
Entrant Refuser 0.0.0.0/0 Tout 0.0.0.0/0 Tout Tout Interdire tout autre trafic entrant
Sortant Autoriser 10.10.10.0/24 Tout 0.0.0.0/0 80 TCP Autoriser le trafic HTTP du serveur web vers l'internet
Sortant Autoriser 10.10.10.0/24 Tout 0.0.0.0/0 443 TCP Autoriser le trafic HTTPS du serveur web vers l'internet
Sortant Autoriser 10.10.10.0/24 80 0.0.0.0/0 Tout TCP Autoriser le trafic de retour HTTP du serveur web vers l'internet
Sortant Autoriser 10.10.10.0/24 443 0.0.0.0/0 Tout TCP Autoriser le trafic de retour HTTPS Trafic du serveur web vers l'internet
Sortant Autoriser 10.10.10.0/24 Tout 10.10.20.0/24 Tout Tout Autoriser tout le trafic sortant vers le sous-réseau 10.10.20.0/24 où les serveurs back-end sont placés
Sortant Refuser 0.0.0.0/0 Tout 0.0.0.0/0 Tout Tout Interdire tout autre trafic sortant

Exemples de règles de liste de contrôle d'accès 2

Exemple de règles pour ACL-2
Direction Autoriser/Refuser IP source Port source Adresse IP de destination Port de destination Protocole Description
Entrant Autoriser 10.10.10.0/24 Tout 10.10.20.0/24 Tout Tout Autoriser tout le trafic entrant à partir du sous-réseau 10.10.10.0/24 où les serveurs Web sont placés
Entrant Refuser 0.0.0.0/0 Tout 0.0.0.0/0 Tout Tout Interdire tout autre trafic entrant
Entrant Refuser 0.0.0.0/0 80 10.0.20.0/24 Tout Tout Autoriser le trafic de retour de HTTP à partir de l'internet
Entrant Refuser 0.0.0.0/0 443 10.0.20.0/24 Tout Tout Autoriser le trafic de retour de HTTPS à partir de l'internet
Sortant Autoriser 10.10.20.0/24 Tout 0.0.0.0/0 80 TCP Autoriser le trafic HTTP vers Internet
Sortant Autoriser 10.10.20.0/24 Tout 0.0.0.0/0 443 TCP Autoriser le trafic HTTPS vers Internet
Sortant Autoriser 10.10.20.0/24 Tout 10.10.10.0/24 Tout Tout Autoriser tout le trafic sortant vers le sous-réseau 10.10.10.0/24 où les serveurs Web sont placés
Sortant Refuser 0.0.0.0/0 Tout 0.0.0.0/0 Tout Tout Interdire tout autre trafic sortant

Cet exemple n'illustre que des cas généraux. Dans vos scénarios, vous pouvez également avoir un contrôle plus granulaire du trafic :

  • Il se peut qu'un administrateur réseau ait besoin d'accéder au sous-réseau 10.10.10.0/24 à partir d'un réseau distant à des fins d'exploitation. Dans ce cas, vous devez autoriser le trafic SSH d'Internet vers ce sous-réseau.
  • Vous pouvez limiter la portée du protocole que vous autorisez entre vos deux sous-réseaux.

Exemple d'étapes

Les exemples d'étapes suivants omettent les étapes prérequises d'utilisation de l'interface de ligne de commande pour créer un VPC, ce qui doit être fait en premier lieu. Pour plus d'informations, voir Utilisation de l'interface de ligne de commande pour créer des ressources VPC.

Étape 1. Créer les listes de contrôle d'accès (ACL)

Utilisez les commandes d'interface de ligne de commande suivantes pour créer deux listes de contrôle d'accès, nommées my_web_subnet_acl et my_backend_subnet_acl:

ibmcloud is network-acl-create my-web-subnet-acl $vpc_id --source-acl-id $old_acl_id
ibmcloud is network-acl-create my-backend-subnet-acl $vpc_id --source-acl-id $old_acl_id

La réponse inclut les ID des listes de contrôle d'accès récemment créées. Sauvegardez les ID des deux listes de contrôle d'accès destinées à être utilisées dans des commandes ultérieures. Vous pouvez utiliser des variables, intitulées webacl et bkacl, de la façon suivante :

webacl="0738-ba9e785a-3e10-418a-811c-56cfe5669676"
bkacl="0738-a4e28308-8ee7-46ab-8108-9f881f22bdbf"

Étape 2. Extraire les règles ACL par défaut

Avant d'ajouter des règles, extrayez les règles de liste de contrôle d'accès entrantes et sortantes par défaut de façon à ce que vous puissiez y insérer de nouvelles règles avant.

ibmcloud is network-acl-rules $webacl
ibmcloud is network-acl-rules $bkacl

La réponse affiche les règles entrantes et sortantes par défaut qui autorisent tout le trafic IPv4 dans tous les protocoles.

Getting rules of network acl ba9e785a-3e10-418a-811c-56cfe5669676 under account Demo Account as user demouser...

inbound
ID                                     Name                                                          Action   IPv*   Protocol   Source      Destination   Created
0738-e2b30627-1a1d-447b-859f-ac9431986b6f   allow-all-inbound-rule-2d86bc3f-58e4-436a-8c1a-9b0a710556d6   allow    ipv4   all        0.0.0.0/0   0.0.0.0/0     2 months ago

outbound
ID                                     Name                                                         Action   IPv*   Protocol   Source      Destination   Created
0738-173a3492-0544-472e-91c0-7828cbcb62d4   allow-all-outbound-rule-2d86bc3f-58e4-436a-8c1a-9b0a710556d6   allow    ipv4   all        0.0.0.0/0   0.0.0.0/0     2 months ago

Enregistrez les ID des deux règles de liste de contrôle d'accès en tant que variables afin que vous puissiez utiliser les valeurs dans les commandes ultérieures. Ainsi, vous pouvez enregistrer les ID dans les variables inrule et outrule :

inrule="0738-e2b30627-1a1d-447b-859f-ac9431986b6f"
outrule="0738-173a3492-0544-472e-91c0-7828cbcb62d4"

Étape 3. Ajouter de nouvelles règles ACL comme décrit

Dans cet exemple, ajoutez d'abord des règles entrantes puis ajoutez des règles sortantes.

Insérez les nouvelles règles entrantes avant la règle entrante par défaut.

ibmcloud is network-acl-rule-add my_web_acl_rule200 $webacl deny inbound any 0.0.0.0/0 0.0.0.0/0 \
--before-rule-id $in-rule

A chaque étape, enregistrez l'ID de la règle de liste de contrôle d'accès dans une variable afin qu'il puisse être utilisé dans les commandes ultérieures. Ainsi, vous pouvez utiliser la variable acl200:

acl200="0738-90930627-1a1d-447b-859f-ac9431986b6f"

Ajoutez maintenant la règle à acl200:

ibmcloud is network-acl-rule-add my_web_acl_rule100 $webacl allow inbound any 10.10.20.0/24 0.0.0.0/0 \
--before-rule-id $acl200

Ajoutez des règles supplémentaires jusqu'à ce que la configuration de votre liste de contrôle d'accès soit terminée, en sauvegardant chaque ID sous forme de variable.

acl100="0738-78340627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule20 $webacl allow inbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-min 443 --source-port-max 443 --before-rule-id $acl100
acl20="32450627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule10 $webacl allow inbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 80 --source-port-min 80 --before-rule-id $acl20

Insérez les nouvelles règles sortantes avant la règle sortante par défaut.

ibmcloud is network-acl-rule-add my_web_acl_rule200e $webacl deny outbound any 0.0.0.0/0 0.0.0.0/0 \
--before-rule-id $outrule
acl200e="11110627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule100e $webacl allow outbound any 0.0.0.0/0 10.10.20.0/24 \
--before-rule-id $acl200e
acl100e="22220627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule20e $webacl allow outbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 443 --source-port-min 443 --before-rule-id $acl100e
acl20e="33330627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule10e $webacl allow outbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 80 --source-port-min 80 --before-rule-id $acl20e

Étape 4. Créer les deux sous-réseaux avec la liste de contrôle d'accès (ACL) nouvellement créée

Créez deux sous-réseaux afin que chacune de vos listes de contrôle d'accès soit associée à l'un d'eux.

ibmcloud is subnet-create my-web-subnet $vpc_id $zone --ipv4_cidr_block 10.10.10.0/24 \
 --network-acl-id $webacl
ibmcloud is subnet-create my-backend-subnet$vpc_id $zone --ipv4_cidr_block 10.10.20.0/24 \
--network-acl-id $bkacl

Aide-mémoire de la liste de commandes

Pour afficher la liste complète des commandes d'interface de ligne de commande du VPC disponibles pour les listes de contrôle d'accès :

ibmcloud is network-acls

Pour afficher votre liste de contrôle d'accès et ses métadonnées, y compris les règles :

ibmcloud is network-acl $webacl

Pour répertorier toutes les règles ACL :

ibmcloud is network-acl-rules $webacl

Exemple de règle ping entrante

Pour ajouter une règle liste de contrôle d'accès, voici un exemple de commande permettant d'ajouter une règle entrante ping avant la règle entrante par défaut :

Syntaxe :

ibmcloud is network-acl-rule-add ACL ACTION DIRECTION PROTOCOL SOURCE DESTINATION [--name NAME] [--icmp-type ICMP_TYPE] [--icmp-code ICMP_CODE] [--source-port-min PORT_MIN] [--source-port-max PORT_MAX] [--destination-port-min PORT_MIN] [--destination-port-max PORT_MAX] [--before-rule-id RULE_ID] [--output JSON] [-q, --quiet]

Exemple :

ibmcloud is network-acl-rule-add 72b27b5c-f4b0-48bb-b954-5becc7c1dcb3 allow inbound icmp 10.2.2.2 10.2.2.3 --icmp-type 8 --icmp-code 0