mercredi 6 juillet 2011

Installation et configuration de FreeS/WAN


Introduction
Les VPNs (Virtual Private Networks) sont une solution sécurisée et économique aux lignes louées dédiées et de ce fait très couteuses. Le principe de cette technologie est simple et consiste en la création d'un tunnel
chiffré entre 2 points d'accès utilisant le réseau publique pour support.
Plusieurs topologies existent et sont supportées par FreeS/WAN :
   - Lan to Lan
   - Client to Lan (config Road Warrior)
   - Client to Server (pour utiliser les services d'un serveur par exemple)
Installation de FreeS/WAN
Vous avez 2 options pour l'installation :
   - sources
   - RPM
Installation à partir des sources
Téléchargez le tarball de la version que vous aurez choisi sur le FTP de freeswan.org
En tant que root executer les commandes suivante pour dépacker les sources :
   su
   mv freeswan-2.03.tar.gz /usr/src
   cd /usr/src
   tar -xvf freeswan-2.03.tar.gz

Il faut savoir qu'il existe des patchs pour le support de différentes technologies commes le NAT transversal ou le chiffrement X.509, ces patchs doivent être appliqués à ce moment de l'installation par les sources et uniquement par cette méthode.
...Make
Userland - uniquement pour des kernels 2.6
   cd /usr/src/freeswan-2.03
   make programs
   make install

KLIPS - kernels 2.2 2.4 et 2.6
Pour effectuer une installation modulaire de KLIPS :
    cd /usr/src/freeswan-2.03
    make oldmod
    make minstall

Pour effectuer lier statiquement KLIPS à votre noyau :
    cd /usr/src/freeswan-2.03
    make oldmod
    make minstall

L'installation est terminée
Installation à partir des RPM
Ces instructions s'appliquent à des version récentes de RedHat. Mandrake et Suse produisent aussi des RPMs destinés à leurs distributions.
Téléchargez les rpms déstinés à votre version du noyau :
    ftp://ftp.xs4all.nl/pub/crypto/freeswan/binaries/RedHat-RPMs
Pour les kernels 2.6 n'oubliez pas les rpm Userland comme :
    freeswan-userland-2.03.9-0.i386.rpm
Pour les kernels 2.4 :
- Vous pouvez verifier la version de votre kernel par : uname -r
- Téléchargez la version qui vous correspond comme :
       freeswan-module-2.03_2.4.20_20.9-0.i386.rpm
- Téléchargez la version de userland qui correspond :
       freeswan-userland-2.03_2.4.20_20.9-0.i386.rpm
       note : ces utilitaires ne fonctionneront correctement qu'avec RedHat car très sensibles aux variations du kernel
Pour l'installation executer les commandes suivantes :
su
rpm -ivh freeswan*.rpm
Génération des clés de chiffrement
La commande ipsec newhostkey permet la génération de nouvelles clés d'identification des hôtes.
Plusieurs options permettent de spécifier le mode de génération :
--output : spécifie le chemin et le nom du fichier qui contiendra les cles
 --bits : spécifie le nombre de bits utilisés pour les cles (2192 bits par défaut)
 --hostname : intègre le nom d'hôte dans les cles
Pour de plus amples informations se reporter au man d'IPSEC NEWHOSTKEY.
Configuration Lan to Lan
Nous utiliserons la topologie suivante :
LAN A ]----[gwA]----[routeur]---------[routeur]----[gwB]----[ LAN B
Rassembler les informations suivantes :
  • IPs des gateways
  • Les adresses des réseaux d'extrémité
  • déterminer des noms FQDN pour l'identification des gateways
Récupérez les clés publiques IPSec par les commandes :
sur la première gateway :
ipsec showhostkey --left

sur la seconde (par une connexion SSH ou en direct sur la machine par exemple)
ipsec showhostkey --right
Editez le fichier /etc/ipsec.conf
# configuration générale
config setup
 interfaces="ipsec0=eth0 ipsec1=eth1"
 klipsdebug=none
 plutodebug=none
# eth0 etant l'interface reliée au LAN x et eth1 etant l'interface reliée
  à l'inter-réseau

conn %default
 keyingtries=0
 authby=rsasig

# configuration de la connexion
conn gauche-droite
 left=172.16.0.2   # @ gwB interface sortante
 leftsubnet=192.168.0.0/24  # @ réseau LAN A exp : 192.x.x.x/24
 leftnexthop=172.16.0.1 # @ passerelle par défaut de gwA
 leftid=@gauche.projet.net  # FQDN gwA
 leftrsasigkey=0sAQNyoS+bzNsiLhqm65ZZ... # clé de gwA
 right=172.17.0.2   # @ gwB interface sortante
 rightsubnet=192.168.1.0/24  # @ réseau LAN B
 rightnexthop=172.17.0.1  # @ passerelle par défaut de gwB
 rightid=@right.projet.net  # FQDN gwB
 rightrsasigkey=0sAQN++TysjAizAn29jKP... # clé de gwB
 auto=add    # Autorise mais n'effectue pas le 
    # lancement de la connexion lancement 
Remarque :
    Les fichiers ipsec.conf doivent être identiques sur les 2 gateways
    Remplacer auto=add par auto=start pour monter la connexion au demarrage
Tests de connectivité
Démarrer la connexion
ipsec auto --up gauche-droite
Vous aurez les messages suivants :
104 "gauche-droite" #1: STATE_MAIN_I1: initiate
106 "gauche-droite" #1: STATE_MAIN_I2: sent MI2, expecting MR2
108 "gauche-droite" #1: STATE_MAIN_I3: sent MI3, expecting MR3
004 "gauche-droite" #1: STATE_MAIN_I4: ISAKMP SA established
112 "gauche-droite" #2: STATE_QUICK_I1: initiate
004 "gauche-droite" #2: STATE_QUICK_I2: sent QI2, IPsec SA established
 {ESP=>0xd5631de5 <0xcfcffb92}
Testez la connexion
ipsec verify
Vous aurez les messages suivants :
Version check and ipsec on-path                             [OK]
    Checking for KLIPS support in kernel                        [OK]
    Checking for RSA private key (/etc/ipsec.secrets)           [OK]
    Checking that pluto is running                              [OK]
Testez la connectivité
Un simple ping d'une machine du LAN A vers le LAN B suffit, pour celà :
D:\>ping 192.168.1.2

Envoi d'une requête 'ping' sur 192.168.1.2 avec 32 octets de données :

Réponse de 192.168.1.2 : octets=32 temps=47 ms TTL=126
Réponse de 192.168.1.2 : octets=32 temps=31 ms TTL=126
Réponse de 192.168.1.2 : octets=32 temps=31 ms TTL=126
Réponse de 192.168.1.2 : octets=32 temps=32 ms TTL=126

Statistiques Ping pour 192.168.1.2:
    Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
    minimum = 31ms, maximum = 47ms, moyenne = 35ms
Pour vérifier que le chiffrement des données qui transitent s'effectue correctement on peut effectuer un dump sur l'une des gateway à l'aide de la commande suivante :
    tcpdump -i eth0
Si vous ne disposez pas de TCPDump : http://www.tcpdump.org
Exemple de paquet crypté :
13:25:34.986147 172.16.0.2 > 172.17.0.2: ESP(spi=0xe15ce30a,seq=0x6a9)
(ttl 62, id 39151, len 112)
0x0000   4500 0070 98ef 0000 3e32 8b47 ac10 0002        E..p....>2.G....
0x0010   ac11 0002 e15c e30a 0000 06a9 a8a6 26c0        .....\........&.
0x0020   a732 c5b2 3446 c056 01fe c6a8 6319 1926        .2..4F.V....c..&
0x0030   940b b2e5 6d88 4c8c a989 5722 058b 9e31        ....m.L...W"...1
0x0040   6efb 483a a599 187a 18dd 286e 3453 3e57        n.H:...z..(n4S>W
0x0050   06c3 5362 df7d 4c23 9338 901c 38e4 1154        ..Sb.}L#.8..8..T
0x0060   73be ab06 0628 5302 25b8 c098 4a02 62a5        s....(S.%...J.b.
Conclusion
Cette méthode vous permet d'installer un VPN en un minimum de temps. Il s'agit d'une configuration de base étant donné que la gestion de polices d'accès sont possibles mais ne sont pas abordées dans cet article.

Une dernière remarque : si le routage vers le tunnel ne s'effectue pas correctement assurez vous que l'ip forward est bien activé sur les gateways.

0 commentaires:

Enregistrer un commentaire