linux_strongswan

Ceci est une ancienne révision du document !


Installation d'un VPN site à site avec StrongSwan

Le recours à un VPN est très utile dans différents cas. Les plus importants sont :

  • Simplification de l'utilisation de ressources distantes.
  • Sécurisation des transfert de données entre deux sites.

Sous linux, il existe plusieurs possibilités pour établir un tunnel VPN. Les plus courantes seront OpenVPN, intéressant dans le cadre d'un poste itinérant, et StrongSwan, pour les tunnel IPSec site à site.

<note important>Ce tutoriel a été réalisé sur deux debian stretch (version 9.4 et 9.7) et en tant que root.</note>

  • On commence par mettre à jour notre base de paquets.
apt-get update
  • On installe le paquet nécessaire.
apt-get install strongswan
  • La partie "Installation" est terminée. Cette étape doit être réalisée sur chacune des deux têtes de pont de notre tunnel VPN, à savoir les deux postes.

La configuration diffère légèrement entre les deux têtes de pont. Avant toute chose, il faut se mettre d'accord sur plusieurs points (dans ce tutoriel, mes choix sont en Gras) :

  • Commun aux deux têtes de pont pour la 1ère phase (ISAKMP):
    • Le protocole d'échange de clé IKE (Internet Key Exchange) : IKEv1 ou IKEv2.
    • Le type d'authentification : par certificat ou par clé secrète partagée (PSK).
    • La complexité de la clé de chiffrement pour l'AH (Authentication Header) : il existe de nombreux choix possible. Dans mon cas, j'ai choisi un couple AES256 et SHA256.
    • Le groupe Diffie-Hellman pour l'échange de clé durant le AH : là aussi de nombreux choix, j'ai opté pour pour le Groupe 14 correspondant à un modulo de 2048.
    • La durée de vie de la connexion avant renégociation : C'est arbitraire. Il faut qu'elle soit ni trop courte ni trop longue. Pour ma part j'ai choisi un paramétrage standard avec la durée de 28800s correspondant à 8h.
  • Commun aux deux têtes de pont pour la 2ème phase (IPSec):
    • La complexité de la clé de chiffrement pour l'ESP (Encapsulating Security Payload) : il existe de nombreux choix possible. Dans mon cas, j'ai choisi un couple AES256 et SHA256. On est pas obligé de mettre la même chose que pour l'AH.
    • Le groupe Diffie-Hellman pour l'échange de clé durant l'ESP : là aussi de nombreux choix, j'ai opté pour pour le Groupe 14 correspondant à un modulo de 2048 et comme précédement, on est pas obligé de prendre les mêmes paramètres que pour l'AH.
    • La durée de vie de la phase 2 avant renégociation : J'ai choisi une durée plus courte que pour la phase 1, à savoir 1h.
  • Différent pour chaque tête de pont :
    • L'adresse IP publique de la tête locale (qui correspondra aussi à l'adresse IP publique distante pour la tête distante).
    • L'adresse IP privée de la tête locale (uniquement si la tête est derrière un NAT et ignorée de la tête distante).
    • L'adresse IP publique de la tête distante (qui correspondra aussi à l'adresse IP publique locale pour la tête distante).
    • La plage d'adressage à utiliser pour attribuer une adresse IP locale aux postes distants (on peut aussi une adresse unique si une seule machine (la tête de pont donc) doit se connecter).

<note warning>Attention aux plages d'adressage. Un VPN ne pourra jamais fonctionner correctement si une plage d'adressage (par exemple : 192.168.0.0/24) existe des deux côtés du tunnel. En effet, les routeurs chercherons toujours à utiliser les routes les plus courtes et si une plage correspond aussi bien à du local qu'à du distant, la route locale sera toujours plus courte.</note>

Voici donc mon tableau récapitulatif :

Paramètres Tête de pont A Tête de pont B
IP publique locale 78.79.1.2 89.90.3.4
IP publique distante 89.90.3.4 78.79.1.2
IP privée (si NAT) - 192.168.0.1
Plage 10.0.1.0/24 10.0.2.1/32
Type d'authentification PSK
Version IKE IKEv2
Cryptage AH AES256-SHA256
Diffie-Hellman AH Groupe 14 (MODP2048)
Durée de vie IKE 28800s
Cryptage ESP AES256-SHA256
Diffie-Hellman ESP Groupe 14 (MODP2048)
Durée de vie IPSec 1h

Une fois les paramètres déterminés, nous pouvons configurer chaque têtes de pont. Commençons donc par la première.

  • On édite le fichier de configuration.
nano /etc/ipsec.conf
  • On écris la configuration choisie dans le fichier :
## On commence par la configuration générale du deamon ipsec
config setup
    # Cette ligne sert à l'établissement des logs
    charondebug="cfg 2, dmn 2, ike 2, net 2"
 
## Ce bloc correspond aux paramètres de notre tunnel VPN, nommé pour l'occasion test-vpn
conn test-vpn
    # On indique le mode de démarrage du tunnel
    auto=start
    # On indique le type de tunnel
    type=tunnel
    # On indique la version du protocole IKE
    keyexchange=ikev2
    ## Les lignes suivantes sont optionnelles mais utiles. Elles permettent de vérifier si la connexion est toujours active.
    # C'est le DPD (Dead Peer Detection) 
    closeaction=hold
    dpdaction=hold
    dpddelay=30s
    dpdtimeout=150s
    ## Les lignes suivantes sont optionnelles mais utiles. Elles permettent de relancer la connexion en cas d'échec.
    rekey=yes
    keyingtries=5
 
    ## Le bloc "left" correspond à la partie locale de la tête de pont
    # "left" correspond à l'adresse IP locale du poste si il est derrière un NAT ou son adresse IP publique, le cas échéant
    left= 78.79.1.2
    # "leftid" correspond toujours à son adresse IP publique
    leftid= 78.79.1.2
    # "leftsubnet" correspond à la plage distribuée pour les postes distants 
    leftsubnet=10.0.1.0/24
    # La ligne suivante indique la présence d'un pare-feu
    leftfirewall=yes
 
    ## Le bloc "right" correspond à la partie distante de la tête de pont
    # "right" et "rightid" indique l'adresse IP publique de l'autre tête de pont 
    right= 89.90.3.4
    rightid= 89.90.3.4
    # "rightsubnet" correspond à la plage distribuée par le poste distant pour les postes locaux
    rightsubnet= 10.0.2.1/32 
 
    ## Ici, on commence les paramétrages de la phase 1 (ISAKMP)
    # On indique le type d'authentification choisie
    authby=secret
    # On indique nos choix de chiffrement et le groupe Diffie-Hellman 
    ike=aes256-sha256-modp2048
    # On indique la durée de vie de la phase 1
    ikelifetime=28800s
 
    ## Ici, on commence les paramétrage de la phase 2 (IPSEC)
    # On indique nos choix de chiffrement et le groupe Diffie-Hellman
    esp=aes256-sha256-modp2048
    # On indique la durée de vie de la phase 1
    lifetime=1h
    # On indique notre souhait de forcer l'encapsulation des données (pour plus de sécurité)
    forceencaps=yes
    # Cette ligne permet d'indiquer au deamon ipsec, son comportement en cas de perte de connexion
    # pull pour attendre l'établissement d'une connexion de la part de l'autre tête de pont
    # push pour établir cette connexion
    modeconfig=push
  • Une fois ce fichier de configuration enregistrée, il faut éditer le fichier qui contiendra le PSK :
nano /etc/ipsec.secrets
  • Dans ce fichier, on indique notre PSK (J'ai choisi "Azerty123" pour l'exemple) en le précédant de l'adresse IP publique locale puis l'adresse IP publique distante, ce qui aura pour effet d'associer ce PSK à la connexion que nous avons paramétrée.
# PSK pour test-vpn
78.79.1.2 89.90.3.4 : PSK "Azerty123"

Notre première tête de pont est paramétrée. Passons à la seconde.

Pour la seconde tête de pont, le cheminement de la configuration est similaire, à l'exception du croisement des données au niveau des adresses IP.

Entrer votre commentaire. La syntaxe wiki est autorisée:
 
  • linux_strongswan.1557998063.txt.gz
  • Dernière modification : 2019/05/16 07:14
  • (modification externe)