Le but de cet article est de vous montrer comment sécuriser un Access Point Wireless. Le filtrage d'adresse MAC et le WEP étant inefficaces, il faut utiliser un VPN. Notre choix se porte sur Super-Freeswan qui est une version déjà patchée de Freeswan.
L'Access Point est une Redhat 8 sur un pentium 200 MMX avec une carte PCI Netgear MA311, le driver hostap et les wireless-tools. Ce n'est pas un vrai Access Point mais plutôt une carte client transformée en AP. Un article chez Wlanfr.net explique comment faire cette transformation. L'Access Point est connecté à Internet en DHCP et s'occupe de partager la connexion (masquerading) avec tous les clients wireless authentifiés. Si les bruits du ventilo de l'alimentation et du processeur vous gênent, vous pouvez essayer de les brancher sur les câbles 3.3 volts de votre carte mère. Ne le faites pas avec un PC rapide; la carte mère risquerait de fondre ou l'alimentation de prendre feu.
Si vous avez un Access Point standard, ce n'est pas un problème mais il vous faudra quand même une machine reliée à l'AP pour faire tourner le serveur Freeswan.
Si vous faites votre propre Access Point avec la MA311 assurez-vous que tout fonctionne correctement avant de commencer l'installation de Freeswan.
Admettons que l'on ait un serveur Linux qui partage une connexion Internet. Son interface eth0 est relié à Internet tandis que wlan0 est connecté au réseau interne. Sans VPN, les paquets à destination d'Internet arrivent sur wlan0 et ressortent par eth0. Avec FreeSwan, une interface virtuelle ipsec0 est créée. Tous les paquets à destination d'Internet sont envoyés au serveur sur wlan0, ils sont encryptés et authentifiés. Freeswan les "attrape", les décrypte et les contrôle. S'il n'y a pas de problème il les fait ressortir du manière décryptée (comme du trafic normal) par ipsec0. Depuis ipsec0, ils passent par eth0 pour rejoindre Internet. Pour ne laisser employer notre AP que par des personnes authorisées, on va laisser passer seulement les paquets qui arrivent par ipsec0. Le trafic qui veut atteindre Internet en passant de wlan0 à eth0 (donc le trafic qui n'utilise pas le VPN) sera bloqué (2 lignes d'iptables). Avec cette stratégie, seul les utilisateurs authorisés du VPN pourront surfer de manière totalement sécurisée.
Configurer iptables sur le serveur pour bloquer le trafic indésirable
Prérequis
Le serveur VPN choisit est Super-FreeSwan 1.99 qui est une version patchée de FreeSwan supportant entre autre les certificats x509 et différents algorithmes d'encryption/authentification.
L'installation est réalisée sur une Redhat 8. Je suppose que vous savez configurer et installer un nouveau noyau, que vous comprenez les bases d'Iptables/Netfilter et que vous savez installer des programmes depuis leur source. Sinon inutile d'aller plus loin. Pensez également à installer la dernière version d'OpenSSL avant de commencer.
Installation du VPN sur le serveur et sur les clients Linux
Récupérez le tarball de Super-FreesSwan depuis www.freeswan.ca
cd /usr/tmp
wget http://download.freeswan.ca/super-freeswan/super-freeswan-1.99.7.tar.gz
tar xzpf super-freeswan-1.99.7.tar.gz
Récupérez le tarball du dernier kernel disponible sur un mirror proche de chez vous
cd /usr/src
wget ftp://sunsite.cnlab-switch.ch/mirror/kernel/linux/kernel/v2.4/linux-2.4.20.tar.bz2
tar xjpf linux-2.4.20.tar.bz2
ln -sf linux-2.4.20/ linux
Configurez le noyau et sauvez en quittant
cd linux
make mrproper
make menuconfig
Configurez, compilez et installez Super-FreeSwan
cd /usr/tmp/super-freeswan-1.99.7
make insert; make programs; make install
Terminez la configuration, la compilation et l'installation du noyau
cd /usr/src/linux
make menuconfig
sous Networking options --->
En plus des éléments IPSEC déjà sélectionnés, rajoutez ces éléments :
* AES encryption algorithm (ne pas compiler en module)
M BLOWFISH encryption algorithm (NEW)
* TWOFISH encryption algorithm (ne pas compiler en module)
* SERPENT encryption algorithm (ne pas compiler en module)
Pensez aussi à installez tous les modules nécessaires pour Netfilter :
[*] Network packet filtering (replaces ipchains)
IP: Netfilter Configuration ---> et sélectionner tout
Quitter en sauvant. Puis
make dep; make clean, make bzImage; make modules; make modules_install
Copier le nouveau noyau et configurer votre chargeur de démarrage
cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.20
cp System.map /boot/System.map-2.4.20
Faites les modifications nécessaires à grub ou lilo puis rebootez.
Après avoir redémarré, stoppez Freeswan :
service ipsec stop
ou
/etc/init.d/freeswan stop
Création des clés et du certifcat d'authorité avec OpenSSL
Créer un répertoire pour vos clés et certificat. N'oubliez pas d'installer préalablement la dernière version d'OpenSSL
cd /usr/tmp
mkdir demoCA
mkdir demoCA/private
mkdir demoCA/certs
mkdir demoCA/crl
mkdir demoCA/newcerts
touch demoCA/index.txt
touch demoCA/serial
echo 00 > demoCA/serial
Copier et Editer openssl.cnf
cp /usr/ssl/openssl.cnf .
vi openssl.cnf
vous devez avoir ces lignes :
[ CA_default ]
dir = ./demoCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem# The private key
RANDFILE = $dir/private/.rand # private random number file
Créer votre certificat d'authorité
openssl req -config openssl.cnf -new -x509 -nodes -newkey rsa:1024
-keyout demoCA/private/cakey.pem -out demoCA/cacert.pem -days 3650
Vous devrez remplir les champs suivants (n'employez pas d'accent et ne laissez pas de champ vide) :
Country Name (2 letter code) [CH]: (mettez les initiales de votre pays)
State or Province Name (full name) [Valais]: (votre canton ou département)
A State Name [Sierre]: (une ville)
Organization Name (eg, company) [MA311]: (un nom d'organisation)
Organizational Unit Name (eg, section) []: (encore un autre nom)
Common Name (eg, your name or your server's hostname) []: (quelque chose comme MA311 ROOT CA)
Email Address []: (une adresse email)
Créez une clé pour le serveur
openssl req -config openssl.cnf -newkey rsa:1024 -nodes -keyout demoCA/newreq.pem
-out demoCA/newreq.pem
Répondez de nouveau aux questions avec des réponses sensées :
Common Name (eg, your name or your server's hostname) []:serveur.ma311.ch
Email Address []:serveur@ma311.ch
n'entrez rien pour :
- A challenge password []:
- An optional company name []:
Signez la clé du serveur avec votre certificat d'authorité
openssl ca -config openssl.cnf -policy policy_anything -out demoCA/signed-key.pem
-infiles demoCA/newreq.pem
Si tout se passe bien vous aurez :
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Préparez la clé du serveur
Editez demoCA/newreq.pem (vi demoCA/newreq.pem) et effacez tout depuis
-----BEGIN CERTIFICATE REQUEST-----
il doit vous rester uniquement
-----BEGIN RSA PRIVATE KEY-----
.....
-----END RSA PRIVATE KEY-----
mv demoCA/newreq.pem demoCA/serveur.key
Editez demoCA/signed-key.pem et ne gardez que
-----BEGIN CERTIFICATE-----
.....
-----END CERTIFICATE-----
mv demoCA/signed-key.pem demoCA/serveur.pem
Créez une clé pour un client
openssl req -config openssl.cnf -newkey rsa:1024 -nodes -keyout demoCA/newreq.pem
-out demoCA/newreq.pem
répondez de nouveau aux questions avec des réponses sensées :
Common Name (eg, your name or your server's hostname) []:client1.ma311.ch
Email Address []:client1@ma311.ch
n'entrez rien pour :
- A challenge password []:
- An optional company name []:
Signez la clé du client avec votre certificat d'authorité
openssl ca -config openssl.cnf -policy policy_anything -out demoCA/signed-key.pem
-infiles demoCA/newreq.pem
Si tout se passe bien vous aurez :
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Préparez la clé du client
Editez demoCA/newreq.pem (vi demoCA/newreq.pem) et effacez tout depuis
-----BEGIN CERTIFICATE REQUEST-----
il doit vous rester uniquement
-----BEGIN RSA PRIVATE KEY-----
.....
-----END RSA PRIVATE KEY-----
mv demoCA/newreq.pem demoCA/client1.key
Editez demoCA/signed-key.pem et ne gardez que
-----BEGIN CERTIFICATE-----
.....
-----END CERTIFICATE-----
mv demoCA/signed-key.pem demoCA/client1.pem
Pour ceux qui n'ont pas compris ce qu'on a fait, voilà un petit résumé. Avec le système RSA, il faut à chaque fois une clé publique et une clé privée pour encrypter et décrypter des données. Dans notre cas, serveur.pem est la clé publique du serveur et serveur.key la clé privée. Une propriété de math dit : Tout ce qui a été encrypté par une clé publique ne peut être décrypté qu'avec la clé privée correspondante. Quand un client veut envoyer des données encryptées au serveur, le client lui demande sa clé publique. Une fois reçue la clé publique du serveur, le client fait des opérations mathématiques avec et il obtient la forme encryptée des données qu'il voulait transmettre. Le client envoie les données et le serveur reçoit les données chiffrées et, avec sa clé privée (serveur.key) qu'il garde jalousement pour lui, le serveur et seulement lui peut déchiffrer les données chiffrées envoyée par le client.
Le certificat d'authorité sert à signer les clés publiques. De nouveau une propriété de math dit : Tout ce qui a été signé par une clé privée peut être vérifié que par la clé publique correspondante. Dans notre cas, ça sert à deux choses; Eviter les attaques Man In The Middle (trop compliqué à expliquer) et contrôler l'accès au serveur VPN. En effet, pour qu'un client puisse employer notre VPN, il faut que sa clé publique soit signée par la clé privée de notre certificat d'authorité. Donc même si un client se génère un paire de clé publique/privée il ne pourra rien faire d'intéressant car il n'a pas la clé privée de notre certificat d'authorité pour la signer. Pour faire les choses correctement on devrait protéger la clé privée de notre certificat d'authorité avec un mot de passe et gérer une list de revocation des clés. Lisez la doc d'OpenSSL ou les howto sur The Linux Documentation Project
Configurer Freeswan
Partie serveur
sur le serveur, éditer /etc/ipsec.conf, effacez tout et copier ces paramètres
config setup
interfaces="ipsec0=wlan0"
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
uniqueids=yes
conn %default
keyingtries=1
disablearrivalcheck=no
authby=rsasig
keyexchange=ike
ikelifetime=240m
keylife=60m
auth=esp
esp=aes128!,aes192!,aes256!
ike=aes128!,aes192!,aes256!
compress=no
rightrsasigkey=%cert
leftrsasigkey=%cert
left=192.168.0.1
leftcert=serveur.pem
auto=add
pfs=yes
conn roadwarrior
type=tunnel
right=%any
leftsubnet=0.0.0.0/0
conn dhcp
type=tunnel
rekey=no
ikelifetime=60s
keylife=20s
rekeymargin=10s
right=%any
leftsubnet=0.0.0.0/0
leftprotoport=udp/bootps
rightprotoport=udp/bootpc
Dans ipsec.conf, interfaces doit correspondre à l'interface qui reçoit les connexions du réseau interne wireless. Si c'est eth1, mettez interfaces="ipsec0=eth1" . left doit correspondre à l'adresse ip de l'interface du réseau interne.
il faut copier la clé publique du serveur dans le répertoire /etc/ipsec.d/
cp demoCA/serveur.pem /etc/ipsec.d
et sa clé privée dans private
cp demoCA/serveur.key /etc/ipsec.d/private
chmod 700 /etc/ipsec.d/private/serveur.key
puis le certificat d'authorité
cp demoCA/cacert.pem /etc/ipsec.d/cacerts
Editez /etc/ipsec.secret effacez tout et copiez ces paramètres :
: RSA serveur.key
il faut supprimer rp_filter sur l'interface ipsec :
echo 0 > /proc/sys/net/ipv4/conf/wlan0/rp_filter
Démarrez ipsec :
service ipsec start
ou
/etc/init.d/ipsec start
faites un tail -n 30 /var/log/secure :
Starting Pluto (FreeS/WAN Version super-freeswan-1.99.7)
including X.509 patch with traffic selectors (Version 0.9.28)
including NAT-Traversal patch (Version 0.5a) [disabled]
ike_alg_register_enc(): Activating OAKLEY_AES_CBC: Ok (ret=0)
ike_alg_register_enc(): Activating OAKLEY_BLOWFISH_CBC: Ok (ret=0)
ike_alg_register_enc(): Activating OAKLEY_CAST_CBC: Ok (ret=0)
ike_alg_register_enc(): Activating OAKLEY_SERPENT_CBC: Ok (ret=0)
ike_alg_register_hash(): Activating OAKLEY_SHA2_256: Ok (ret=0)
ike_alg_register_hash(): Activating OAKLEY_SHA2_512: Ok (ret=0)
ike_alg_register_enc(): Activating OAKLEY_TWOFISH_CBC: Ok (ret=0)
ike_alg_register_enc(): Activating OAKLEY_SSH_PRIVATE_65289: Ok (ret=0)
Changing to directory '/etc/ipsec.d/cacerts'
loaded cacert file 'cacert.pem' (1619 bytes)
Changing to directory '/etc/ipsec.d/crls'
Warning: empty directory
OpenPGP certificate file '/etc/pgpcert.pgp' not found
| from whack: got --esp=serpent-sha1!, twofish256-sha1!,aes128-sha1!;modp1024
| from whack: got --ike=serpent-sha!, twofish256-sha!, aes128-sha!
loaded host cert file '/etc/ipsec.d/k2.pem' (1484 bytes)
added connection description "dhcp"
| from whack: got --esp=serpent-sha1!, twofish256-sha1!,aes128-sha1!;modp1024
| from whack: got --ike=serpent-sha!, twofish256-sha!, aes128-sha!
loaded host cert file '/etc/ipsec.d/serveur.pem' (1484 bytes)
added connection description "roadwarrior"
listening for IKE messages
adding interface ipsec0/wlan0 192.168.0.1
loading secrets from "/etc/ipsec.secrets"
loaded private key file '/etc/ipsec.d/private/serveur.key' (887 bytes)
Si tout a fonctionné, voilà à peu près ce que vous devriez avoir vu. Contrôlez avec lsof que le daemon pluto fonctionne :
lsof -i -n | grep pluto
Le résultat doit être :
pluto 26707 root 10u IPv4 46763 UDP 192.168.0.1:isakmp
Partie client
Sur le client, éditez /etc/ipsec.conf, effacez tout et copier ces paramètres
config setup
interfaces="ipsec0=wlan0"
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
uniqueids=yes
conn %default
auth=esp
esp=aes128!,aes192!,aes256!
ike=aes128!,aes192!,aes256!
keyingtries=0
compress=no
disablearrivalcheck=no
authby=rsasig
leftrsasigkey=%cert
rightrsasigkey=%cert
conn rw
left=192.168.0.1
leftcert=serveur.pem
leftsubnet=0.0.0.0/0
right=192.168.0.200
rightcert=client1.pem
auto=add
pfs=yes
Dans ipsec.conf, interfaces doit correspondre à l'interface qui sert à se connecter au serveur. Si c'est eth1, mettez interfaces="ipsec0=eth1" . left doit correspondre à l'adresse ip du serveur VPN. right correspond à votre adresse ip (si vous êtes sur dhcp faudra la mettre à jour et relancer ipsec à chaque fois !).
Il faut copier la clé publique du client dans le répertoire /etc/ipsec.d/ du poste client
cp demoCA/client1.pem /etc/ipsec.d
et sa clé privée dans private
cp demoCA/client1.key /etc/ipsec.d/private
chmod 700 /etc/ipsec.d/private/client1.key
Il faut également copier le clé publique du serveur dans le répertoire /etc/ipsec.d/
cp demoCA/serveur.pem /etc/ipsec.d
puis le certificat d'authorité
cp demoCA/cacert.pem /etc/ipsec.d/cacerts
Editez /etc/ipsec.secret effacez tout et copiez ces paramètres :
: RSA client1.key
Il faut supprimer rp_filter sur l'interface ipsec :
echo 1 > /proc/sys/net/ipv4/conf/wlan0/rp_filter
Démarrez ipsec :
service ipsec start
ou
/etc/init.d/ipsec start
faites un tail -n 30 /var/log/secure :
Starting Pluto (FreeS/WAN Version super-freeswan-1.99.7)
including X.509 patch with traffic selectors (Version 0.9.28)
including NAT-Traversal patch (Version 0.5a) [disabled]
ike_alg_register_enc(): Activating OAKLEY_AES_CBC: Ok (ret=0)
ike_alg_register_enc(): Activating OAKLEY_BLOWFISH_CBC: Ok (ret=0)
ike_alg_register_enc(): Activating OAKLEY_CAST_CBC: Ok (ret=0)
ike_alg_register_enc(): Activating OAKLEY_SERPENT_CBC: Ok (ret=0)
ike_alg_register_hash(): Activating OAKLEY_SHA2_256: Ok (ret=0)
ike_alg_register_hash(): Activating OAKLEY_SHA2_512: Ok (ret=0)
ike_alg_register_enc(): Activating OAKLEY_TWOFISH_CBC: Ok (ret=0)
ike_alg_register_enc(): Activating OAKLEY_SSH_PRIVATE_65289: Ok (ret=0)
Changing to directory '/etc/ipsec.d/cacerts'
loaded cacert file 'cacert.pem' (1619 bytes)
Changing to directory '/etc/ipsec.d/crls'
Warning: empty directory
OpenPGP certificate file '/etc/pgpcert.pgp' not found
| from whack: got --esp=serpent-sha1!, aes256-sha1!, twofish256-sha1!
| from whack: got --ike=serpent-sha!, aes256-sha!, twofish255-sha!
loaded host cert file '/etc/ipsec.d/serveur.pem' (1484 bytes)
loaded host cert file '/etc/ipsec.d/client1.pem' (1484 bytes)
added connection description "rw"
listening for IKE messages
adding interface ipsec0/wlan0 192.168.0.200
loading secrets from "/etc/ipsec.secrets"
loaded private key file '/etc/ipsec.d/private/client1.key' (887 bytes)
Si tout a fonctionné, voilà à peu près ce que vous devez avoir vu. Contrôlez avec lsof que le daemon pluto fonctionne :
lsof -i -n | grep pluto
Le résultat doit être :
pluto 22507 root 10u IPv4 46763 UDP 192.168.0.200:isakmp
et contrôlez avec ifconfig vos interfaces :
ipsec0 Lien encap:Ethernet HWaddr 00:09:5B:2F:BD:C6
inet adr:192.168.0.200 Masque:255.255.254.0
UP RUNNING NOARP MTU:16260 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:10
RX bytes:328 (328.0 b) TX bytes:0 (0.0 b)
lo Lien encap:Boucle locale
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:15 errors:0 dropped:0 overruns:0 frame:0
TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:4920 (4.8 Kb) TX bytes:4920 (4.8 Kb)
wlan0 Lien encap:Ethernet HWaddr 00:09:5B:2F:BD:C6
inet adr:192.168.0.200 Bcast:192.168.1.255 Masque:255.255.254.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:424 errors:0 dropped:0 overruns:0 frame:0
TX packets:604 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:100
RX bytes:59429 (58.0 Kb) TX bytes:82602 (80.6 Kb)
Interruption:5 Mémoire:d087d000-d087e000
Configurer iptables sur le serveur
Je vous donne juste une config minimale d'iptables. Elle bloque le trafic en transit qui ne passe pas par le vpn et laisse l'interface connectée à Internet et celle connectée au réseau interne complètement ouverte sur votre serveur. A vous d'apporter les modifications nécessaires pour garantir votre propre sécurité.
Stoppez iptables sur le serveur :
service iptables stop
ou
/etc/init.d/iptables stop
Copiez ce script dans un fichier, adaptez les variables à votre config, rendez-le exécutable et lancez-le
#!/bin/bash
IPTABLES="/sbin/iptables"
EXTIF="eth0"
INTIF="wlan0"
IPSECIF="ipsec0"
#---------------------------------------------#
#-- on laisse pratiquement tout faire --#
#---------------------------------------------#
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
#-----------------------------------------------------#
#-- on bloque et log ce qui ne passe pas par le vpn --#
#-----------------------------------------------------#
$IPTABLES -A INPUT -i $IPSECIF -j ACCEPT
$IPTABLES -A OUTPUT -o $IPSECIF -j ACCEPT
$IPTABLES -A FORWARD -i $IPSECIF -o $INTIF -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -o $IPSECIF -j ACCEPT
$IPTABLES -A FORWARD -i $IPSECIF -o $EXTIF -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -o $IPSECIF -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m limit \
--limit 4/minute --limit-burst 7 -j LOG --log-prefix \
"BAD FWD eth0 wlan0: "
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -j REJECT
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -m limit \
--limit 4/minute --limit-burst 7 -j LOG --log-prefix \
"BAD FWD wlan0 eth0: "
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j REJECT
$IPTABLES -t nat -I POSTROUTING -o $EXTIF -j MASQUERADE
En fait, vous devez laisser passer les paquets udp qui arrivent sur le port 500 et tous les paquets dont le protocole est de type 50 (ESP) pour que le VPN fonctionne et cela aussi bien sur le serveur que le client. Sur le serveur, on laisse tout passer; ce n'est donc pas un problème. Sur le client, il faut au moins avoir ces lignes pour ceux qui emploient iptables :
iptables -i wlan0 -p udp --dport 500 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -i wlan0 -p 50 -j ACCEPT
Démarrer le tunnel VPN
Quand vous aurez configuré FreeSwan et Iptables correctement, il ne vous restera plus qu'à démarrer le tunnel VPN depuis le client. Tapez juste sur le client :
ipsec auto --up rw
Si votre configuration fonctionne, voilà ce qui va s'afficher :
104 "rw" #3: STATE_MAIN_I1: initiate
106 "rw" #3: STATE_MAIN_I2: sent MI2, expecting MR2
108 "rw" #3: STATE_MAIN_I3: sent MI3, expecting MR3
004 "rw" #3: STATE_MAIN_I4: ISAKMP SA established
117 "rw" #4: STATE_QUICK_I1: initiate
004 "rw" #4: STATE_QUICK_I2: sent QI2, IPsec SA established
Pour arrêter le tunnel, faites ipsec auto --down rw . "rw" correspond au nom de la connection que vous avez mis dans votre /etc/ipsec.conf Si vous avez des erreurs, regardez dans /vag/log/secure et /var/log/message les messages d'information.
Liens utiles
Ma311 et HostAP : http://www.wlanfr.net/contenus.php?id=16
Super-Freeswan : www.freeswan.ca
Freeswan : www.freeswan.org
OpenSSL : www.openssl.org
Kernel 2.4.20 : www.kernel.org
Iptables/Netfilter : www.netfilter.org
[retour au début] version 1.1 dernière mise à jour : 05.06.2003