Bering, IPSec avec secrêts prépartagés

Créer des tunnels IPSec à l'aide de phrases secrêtes prépartagées...

Voici une méthode peu commode si l'on utilise des adresses IP publiques dynamiques, mais simple à mettre en oeuvre, au moins pour des premiers essais rapides.

Voyez la page web "IPSec pour Windows" si vous souhaitez configurer un PC "client" sous IPSec.

                        ipsec configuration files

        1) IPSEC Main Configuration File
        2) Pluto Shared Secrets

  q) quit
  ----------------------------------------------------------------------------
        Selection:

J'ai laissé dans le fichier /etc/ipsec.cnf appelé par la première ligne du menu IPSec des tunnels existants - que j'utilise - pour exemple.

Comment ça marche ?

# basic configuration
config setup
        # THIS SETTING MUST BE CORRECT or almost nothing will work;
        # %defaultroute is okay for most simple cases.
        #interfaces=%defaultroute
        interfaces="%defaultroute ipsec1=wlan0 ipsec2=wlan1"

Cette première partie permet de définir quelles interfaces vont utiliser IPSec.
Si vous n'avez IPSec que sur l'interface qui reçoit l'ADSL, pour relier les diverses passerelles similaires du réseau, la déclaration suivante se débrouillera toute seule :

interfaces="%defaultroute"

%defaultroute correspond à une variable interne qui reprend l'adresse IP attribuée par votre fournisseur Internet, ainsi que la gateway, et le masque réseau de votre ISP.
Cette variable remplace une déclaration qui aurait dû être :

interfaces="ipsec0=ppp0"

ipsec0 est la première interface virtuelle IPSec. ppp0 est la première interface qui utilise le protocole PPPoE. C'est tout de même une interface virtuelle, qui pointe vers une interface physique eth0 (aspirine en prime).

Il est possible d'utiliser jusqu'à quatre interfaces virtuelles IPSec, ce qui signifie quatre "tuyaux" physiques différents ! Dans mon cas, wlan0 et wlan1 sont des interfaces wireless PCMCIA embarquées dans ma Soekris net4521. Ca pourrait être des cartes PCI Ethernet...

Il est possible de créer autant de tunnels VPN IPSec que nécessaire dans chacune des quatre interfaces IPSec de ipsec0 à ipsec3. Je n'ai jamais dépassé trois interfaces IPSec... Le nombre de tunnels en service simultanément dépend de la puissance CPU de la machine utilisée pour faire tourner Bering ainsi que de la densité de trafic de chaque tunnel lui même. Le chiffrement/déchiffrement en temps réel consomme des ressources. J'utilise des CPU type 133 MHz la plupart du temps. Cependant, si plus de quatre ou cinq tunnels sont en service, il vaudra mieux passer à du CPU plus rapide. Il conviendra de vérifier ce point d'après les utilisateurs présents sur les listes de diffusions relatives à FreeSWan, SuperFreeSWan, ou OpenSWan.

Voici un exemple de tunnel :

conn F8KDXtoF6HQZ
        authby=secret
        left=%defaultroute
        leftsubnet=44.151.177.64/27
        leftfirewall=yes
        right=80.13.8.11
        rightsubnet=44.151.177.32/27
        rightfirewall=yes
        esp=3des-md5-96
        auto=start

Le nom de la connexion est F8KDXtoF6HQZ. Il est totalement arbitraire et n'est présent que pour référence (pour vos yeux). IPSec ne l'utilise pas.

"authby=secret" signifie que le correspondant est identifié par une phrase secrète prépartagée.
Elle est enregistrée dans un autre fichier /etc/ipsec.secrets.

"left" et "right" correspondent au extrémités gauche et droit du tunnel.
C'est, là aussi, totalement arbitraire et réversible. FreeSWan se débrouille grâce aux déclarations des réseaux locaux pour "comprendre" de quel côté on parle.
J'ai pour habitude de considérer le côté gauche comme local et le droit comme distant.

"left=%defaultroute" est autorisé car déclaré plus haut dans le fichier (rappelez vous : correspond à l'interface ppp0 qui pointe vers eth0, vers votre ISP). Cela évite de connaitre sa propre adresse IP publique Internet (left) et celle du "peer", la gateway du provider Internet (nexthop) qu'il faudrait déclarer ici sur deux lignes de cette façon :

left=212.180.113.45
leftnexthop=212.180.0.144

"leftsubnet" correspond au réseau que vous voulez partager et rendre accessible via ce tunnel.
Il faut le considérer comme une sorte de filtre. Vous pouvez déclarer une seule machine, un sous-réseau de n'importe quelle classe, voire tout Internet en y déclarant 0.0.0.0 !

"leftsubnet=192.168.1.0/24"
signifierait que nous laissons accès à notre réseau local entier (une classe C), "/24" signifie un masque de sous-réseau de 24 bits, soit 255.255.255.0. La variation de la longueur du masque permettrait de limiter cet accès à un ensemble plus restreint de machines.

ATTENTION :
La passerelle elle-même n'est pas accessible
par un tunnel qui définit l'accès à un réseau local. Il faudrait, si nécessaire, créer un tunnel spécifique qui "tomberait" sur la passerelle elle-même. Ce n'est pas recommandé pour des raisons évidentes de sécurité, et DNAT permet quelques fantaisies. Voyez Shorewall, la partie firewall, pour cela.

"leftfirewall=yes" indique que le PC qui sert de passerelle de sécurité est un firewall avec fonction de translation d'adresse (NAT). Un PC terminal utilisateur (aucun réseau derrière lui) aurait la déclaration  "leftfirewall=no".

Les déclarations côté "right" fonctionnent de la même façon, mais correspondent à l'autre extrémité du tunnel. Il faut impérativement se mettre d'accord avec l'administrateur de la machine "d'en face" sinon le tunnel ne marchera pas, de la même manière que si vous aviez une phrase secrète prépartagée erronée.

"right=80.13.8.11"
Voici le problême délicat à résoudre pour des adresses IP publiques dynamiques !
Le tunnel ne marchera pas si tous les paramêtres sont corrects des deux côtés.
Donc, il est facile et immédiat de monter un tunnel IPSec vers un correspondant fixe, mais il faut ruser un peu pour une adresse dynamique :

"right=mon.url.com"
Ainsi, en s'inscrivant dans un serveur DNS dynamique, il est possible de pointer depuis une URL vers une adresse IP dynamique en déclarant l'URL en lieu et place de l'adresse IP publique.

"right=%any"
permet de tester un tunnel "vite fait", en acceptant n'importe quelle adresse façon joker. Attention, la sécurité est assez minable dans ce cas, car nous autorisons n'importe qui à renter. Bien sûr, il reste encore le secrêt partagé et la description complète du tunnel qui bloque le verrou.

"esp=3des-md5-96" indique le mode d'authentification et de chiffrement du tunnel. Plusieurs méthodes existent. Celle-ci est compatible à la sécurité IPSec présente dans les windows pro récents (WIN2K, XP-pro).

"auto=start" fait monter le tunnel au démarrage d'IPSec (au boot du PC ou au redémarrage automatique via le script "checkip.dat" ou manuel). "auto=add" crérait le tunnel sans le démarrer. Le premier ping ou la première trame IP vers l'extrémité du tunnel déclencherait la montée de celui-ci.

Les phrases secrètes prépartagées sont dans le deuxième item du menu IPSec.

# This file holds shared secrets or RSA private keys for inter-Pluto
# authentication.  See ipsec_pluto(8) manpage, and HTML documentation.

80.13.8.11 212.180.113.45 : PSK "phrasesupersecreteprepartagee"
%any 44.151.177.94 : PSK "grossecretlepluslongpossible"

Vous devez entrer ici les deux adresses IP des machines aux extrémité du tunnel, la votre et celle d'en face. La phrase secrète doit correspondre à celle de votre correspondant.

"%any" est une variable "joker" qui accepte n'importe quelle adresse IP. Souvent appelé "RoadWarrior" le PC qui se connecte ainsi est souvent une machine dont on ignore à l'avance l'adresse IP publique sur Internet. A éviter sauf pour des tests et pour une seule machine, pas un groupe. Un secret partagé "à plusieurs" n'est plus un secret ;-)

Le mode "opportunistic" éviterait toutes ces déclarations (pensez à la maintenance d'une centaine de tunnels) :

conn me-to-anyone
        left=%defaultroute
        right=%opportunistic

Mais c'est une autre histoire... La prochaine probablement, si nous montons plusieurs microcellules wireless à usage exclusif radioamateurs de ce type...

A suivre...

Attention : n'oubliez pas de sauver votre package IPSec après modification !




Retour au Menu précédent

Home

73, de F6HQZ François BERGERET f6hqz-m@hamwlan.net


Dernière modif le : 08/27/06