Sommaire
Généralités
Un VPN c'est quoi..?
Un VPN permet d'étendre la zone de sécurité du système d'information interne à travers un réseau non sécurisé (de type Internet). Cela permet à un poste non physiquement connecté sur le réseau local d'être considéré comme une machine branchée directement au sein de celui-ci.
Fonctionnement
La connexion à un VPN se déroule comme suit :
- Lancement d'une application de connexion sur l'ordinateur se trouvant en dehors du réseau du SI.
- L'application se connecte au serveur gérant les accès aux VPN : pendant cette phase, l'application et le serveur échangent les informations nécessaires à vérifier l'identité du client et son droit ou non droit à se connecter au réseau VPN.
- Une fois l'authentification effectuée, le serveur et l'application mettent en place une connexion point à point entre eux, dans laquelle l'ensemble des données circulant sont cryptées.
- L'ordinateur externe peut alors accéder à l'ensemble des données de l'entreprises dont le contenu est accessible via les règles mises en place par l'administrateur de la sécurité.
Différentes technologies existent pour pouvoir se connecter à distance via un VPN. Ces techniques s'appuient sur l'un des protocoles de tunnelisation existant (IPSec, PPTP, SecuRemote, ssh...)
Pré-requis
- Une adresse IP joignable du réseau du client
- Un port d'écoute non filtré [Attention aux FW]
- Une méthode permettant de générer des certificats SSL (souvent fournit avec openvpn)
Un tunnel VPN simple et TEMPORAIRE avec SSH
Sur le serveur ssh
Sur le serveur sshd (enfin la machine avec laquelle vous voulez établire un tunnel ssh), dans la fichier " /etc/ssh/sshd_config" il faut activer ses deux options :
PermitRootLogin yes PermitTunnel yes
et redémarrer le service sshd
/etc/init.d/ssh restart
Sur le client
ssh -f -w 0:1 ip_serv true
Cette commande va initialiser une interface sur chaque machine : tun0 sur le client et tun1 sur le serveur ssh. Les numéros sont tout à fait arbitraires et n'on aucune significations réelle.
Sur les deux machines
ip addr show tun0 #pour voir que l'interface existe bien
Cette commande va permettre de vérifier qu'une unterface tunX a été bien créer
Configurer l'interface client
ifconfig tun0 192.168.1.1 pointopoint 192.168.1.2 netmask 255.255.255.252 # ou ip addr add 192.168.1.1/32 peer 192.168.1.2 dev tun0
Configurer l'interface serveur
ifconfig tun1 192.168.1.2 pointopoint 192.168.1.1 netmask 255.255.255.252 # ou ip addr add 192.168.1.2/32 peer 192.168.1.1 dev tun1
- Sur une machine et pinguer l'autre pour voir... ca devrait marcher.
- Ensuite, vous pouvez rajouter des des options de routages pour donner accès aux sous réseaux connecter aux 2 machines ..
OpenVPN
Installation
Simple : apt-get install openvpn
Fichiers de configuration :
- /etc/openvpn
- /etc/default/openvpn
- /etc/init.d/openvpn
Quelques choses préalables
Il faut avant de lancer le serveurs générer les pairs de clés nécessaires pour la certification des clés du client, la sécurisation de la connexion etc. Sous débian, les outils nécessaires sont installés dans "/usr/share/doc/openvpn/examples/easy-rsa/2.0". Donc je recommande de faire une copie de ce répertoire dans /root :
cp -av /usr/share/doc/openvpn/examples/easy-rsa/2.0 /root/
Variables
- Adaptez le contenu du fichier "vars" dans le répertoire "easy-rsa" qui est dans root à vos données locales en modifiant les lignes suivantes :
export KEY_COUNTRY="BJ" export KEY_PROVINCE="Ctn" export KEY_CITY="COTONOU" export KEY_ORG="AUF" export KEY_EMAIL="technique@bj.auf.org"
- Rendre le fichier excécutable et remplir les variables de session
chmod +x vars ./vars
Procéder au grand nettoyage
./clean-all #Attention car le script supprime le contenu du répertoire keys qui se trouve dans le répertoire courant
Création du CA
./build-ca
et ça doit donner un truc comme cela
Generating a 1024 bit RSA private key ...++++++ ................++++++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [BJ]: State or Province Name (full name) [Ctn]: Locality Name (eg, city) [COTONOU]: Organization Name (eg, company) [AUF]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [TEST CA]: RTL Name []: Email Address [technique@bj.refer.org]:
On obtient une clé "ca.key" Uniquement accessible à root et une demande de signature pour le certificat de l'autorité de certification
Génération du Diffie-Hellman
./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 |
Génération des clés
Voila, à cette étape, on est prêt à signer des clés. On va commencer par le serveur lui même
Serveur
./build-key-server server # Qui va vous générer le clé, une demande der certification et signer la clé rien que pour vous
Il Faut répondre oui aux 2 dernières questions
Clients
Ensuite on va générer des clés pour les clients pour X de 1 à n
./build-key client_X
Les cles se trouvent dans le répertoirte "keys"
Configuration du serveur
Cela se passe dans "/etc/openvpn/openvpn.con". Voici un exemple type avec quelques commentaires pour expliquer ce que chaque chose fait :
#local XXX.XXX.XXX.XXX # Adresse IP d'écoute Commenter pour une écoute sur toutes les interfaces port 1194 # Port d'écoute #nobind # Permet de dire au serveur de en pas écouter sur un port spécifique A ne pas utiliser avec l'option "port " proto udp # Protocol utilisé (TCP ou UDP) dev tun # Permet de créer des tunnels IP routés alors que "tap" permet de créer des tunnels ethernet ??? ca /root/easy-rsa/keys/ca.crt cert /root/keys/easy-rsa/test.crt key /root/keys/easy-rsa/test.key # Fichier à concerver secret dh /root/keys/easy-rsa/dh1024.pem # Localisation des paramètres Diffie-Hellman server 10.25.2.0 255.255.255.0 # Le sous réseau de notre VPN #ifconfig-pool-persist ipp.txt # Enregistres les associations entre les clients VPN et les adresses IP reçues. En cas de redémarrage après un crash, il permet aux clients de retrouver leurs adresses IP précédentes user nobody group nobody #push "redirect-gateway" # Change la route par défaut des clients via le VPN. #push "dhcp-option DNS 10.25.1.1" # Une option très intéressante qui permet de changer le serveur DNS vers un serveur accessible du VPN #duplicate-cn # décommenter pour permettre à plusieurs client de présenter le même certificat keepalive 10 30 # Ping toute les 10 sec et considère la liaison morte si aucune réponse n'est recue au bout de 30 sec comp-lzo # Active la compression LZO sur la liaison VPN max-clients 20 # Nombre maximum de clients log openvpn.log verb 4 # up /etc/openvpn/cmd/up.sh # Lors de la connexion, ce script est excécuté #ccd-exclusive # Permet d'imposer des conditions particulières aux xlients. #client-config-dir /etc/openvpn/ccd #persist-key #persist-tun #status /var/state/openvpn.status
Tout ce qui est commenté n'est pas encore utile. Allez on va lancer en regardant ce que le serveur nous dit : /etc/init.d/openvpn start et ensuite un netstat -laput . Notez qu'il y a un serveur qui écoute sur le port 1194. Regarder aussi les logs..
Configuration du client
Installation pure de openvpn sur debian like
apt-get install openvpn
Alors ici ce qui est bien c'est que vous pouvez configurer openvpn pour se connecter à plusieurs réseaux vpn.. Chacun avec sa configuration dé"fini dans un fichier dans "/etc/openvpn/EXAMPLE_CONFIG1.conf" :
cd /etc/openvpn; touch mon_vpn1.conf vi mon_vpn1.conf
Dedans rajouter les informations concernant le VPN auquel vous voulez vous connecter :
client # fonctionnement en mode client remote XXX.XXX.XXX.XXX # adresse ip du serveur VPN port 1194 #Port d'écoute du serveur VON #nobind # a utiliser si l'option nobind a été activer sur le serveurr dev tun # conformément à la configuration du serveur comp-lzo # conformément à la configuration du serveur # SSL Configuration ca /home/toto/keys/ca.crt cert /home/toto/keys/client.crt key /home/toto/keys/client.key # Logging configuration log /var/log/openvpn.log verb 4
Bon vous aurez notez que on a vraiment besoin de trois fichiers pour cela :
- ca.crt qui est récupérer du serveur
- client.crt qui le certificat du client signé par le serveur
- client.keys qui est la clé du client
Bon il y a une longue littérature sur comment transmettre ces informations de façon sécurisé pour les préserver de toutes agressions. Moi, je suggère ssh, mais il y a d'autre façons ... A vous de voir
Ensuite dans "/etc/default/openvpn" il est important de faire :
AUTOSTART="none"
et ...
/etc/init.d/openvpn start mon_vpn
Installation pure de openvpn windows/mac
Who cares ...?