Aller au contenu principal
Sommaire de la formation

Réseau et Sécurité avec Incus

coolibra334 vues

5. Réseau et Sécurité avec Incus

  • incus_network : Configuration des réseaux pour les conteneurs
  • incus_network_acl : Gestion des listes de contrôle d’accès
  • incus_network_forward : Redirection de trafic réseau vers les conteneurs

incus_network : Configuration des Réseaux pour les VMs / Conteneurs

incus_network permet la création et la gestion des réseaux virtuels dédiés aux conteneurs et machines virtuelles dans un environnement Incus. Ces réseaux peuvent être configurés pour supporter différents types de communication, tels que les réseaux pontés, routés ou natifs.

Exemple : Créer un réseau ponté

resource "incus_network" "bridge_net" {
  name   = "bridge-net"
  type   = "bridge"

  config = {
    "ipv4.address"        = "10.0.0.1/24"
    "ipv4.nat"            = "true"
    "ipv6.address"        = "none"
  }

  description = "Réseau ponté pour les conteneurs"
}

Explication :

  • type = "bridge" : Spécifie que le réseau est de type pont (bridge), permettant aux conteneurs de partager une interface réseau virtuelle avec l’hôte.
  • ipv4.nat = true : Active le NAT (Network Address Translation) pour permettre aux conteneurs de se connecter à l'extérieur via l'interface du réseau hôte.
  • ipv6.address = "none" : Désactive l'IPv6 pour ce réseau.

 

incus_network_acl : Gestion des Listes de Contrôle d'Accès

incus_network_acl permet de créer des listes de contrôle d'accès (ACL) pour restreindre ou autoriser le trafic réseau vers les conteneurs et machines virtuelles. Cette fonctionnalité est essentielle pour appliquer des politiques de sécurité granulaires.

Exemple : Créer une ACL pour limiter l'accès à un conteneur

resource "incus_network_acl" "restrict_web" {
  name        = "restrict-web"
  description = "ACL pour limiter l'accès au serveur web"

  ingress = [
    {
      action           = "allow"
      source           = "10.0.0.0/24"         # Limite les connexions depuis le réseau local
      destination_port = "80"                  # Autorise uniquement les connexions sur le port 80 (HTTP)
      protocol         = "tcp"                 # Protocole TCP pour les connexions HTTP
      description      = "Autoriser le trafic HTTP entrant sur le réseau local"
      state            = "enabled"
    }
  ]

  egress = [
    {
      action           = "allow"
      destination      = "0.0.0.0/0"           # Permet tout le trafic sortant vers l'extérieur
      destination_port = ""                    # Aucune restriction de port pour le trafic sortant
      protocol         = "tcp"                 # Applique la règle au protocole TCP
      description      = "Permettre le trafic sortant pour tout service"
      state            = "enabled"
    }
  ]
}

Explication des modifications :

  1. ingress :

    • source : Limite le trafic entrant aux adresses IP dans la plage 10.0.0.0/24, qui représente le réseau local.
    • destination_port : Autorise uniquement le port 80 (HTTP), protégeant ainsi les autres ports.
    • protocol : Spécifie que le trafic est uniquement autorisé pour le protocole TCP.
    • state = "enabled" : Active cette règle d'entrée pour qu'elle soit immédiatement appliquée.
  2. egress :

    • destination : Autorise le trafic sortant vers toutes les adresses IP (0.0.0.0/0), ce qui permet une connectivité complète depuis le conteneur.
    • destination_port : En laissant vide, tous les ports sont autorisés pour le trafic sortant.
    • protocol = "tcp" : Limite la règle aux connexions TCP, excluant ainsi les autres types de protocole comme UDP ou ICMP.
  3. Utilisation de l'option description pour documenter les intentions derrière chaque règle, facilitant ainsi la gestion et la maintenance de l'ACL.

incus_network_forward : Redirection de Trafic Réseau

incus_network_forward permet la redirection de trafic réseau, comme le NAT, entre l'extérieur et les conteneurs, afin de faciliter l'accès aux services internes. Cette redirection est particulièrement utile pour exposer des services sur des adresses publiques tout en isolant les conteneurs dans des réseaux privés.

Exemple : Redirection de trafic vers un conteneur

resource "incus_network_forward" "http_forward" {
  network        = incus_network.internal_net.name
  listen_address = "10.0.0.4"

  config = {
    target_address = "10.0.0.5"
  }

  ports = [
    {
      description    = "HTTP Traffic Forward"
      protocol       = "tcp"
      listen_port    = "22"                        # Écoute sur le port 80 (HTTP)
      target_port    = "22"                      # Redirige vers le port 8080
      target_address = "10.0.0.192"                  # Adresse cible pour la redirection
    },
    {
      description    = "HTTPS Traffic Forward"
      protocol       = "tcp"
      listen_port    = "443"                       # Écoute sur le port 443 (HTTPS)
      target_port    = "5443"                      # Redirige vers le port 8443
      target_address = "10.0.0.192"                  # Adresse cible pour la redirection
    }
  ]
}

Details :

  1. Réseau (incus_network) :

    • Le réseau my_network est configuré pour avoir une adresse IPv4 avec NAT activé, ainsi qu'une adresse IPv6. Cela permet de définir un sous-réseau pour les conteneurs ou machines virtuelles.
  2. Redirection réseau (incus_network_forward) :

    • listen_address : C'est l'adresse IP sur laquelle le réseau écoute pour les connexions entrantes à rediriger.
    • target_address : Définit l'adresse de destination pour laquelle le trafic est redirigé.
    • Règles de ports :
      • HTTP : Le port 80 (HTTP) est redirigé vers le port 8080 de l'adresse cible.
      • HTTPS : Le port 443 (HTTPS) est redirigé vers le port 8443 de la même adresse cible.

Commentaires

Connectez-vous pour rejoindre la discussion.

Aucun commentaire pour le moment.