Projet / SemaineTech / 2012 / Ateliers / OpenVPN / Documentation

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 :

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

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

OpenVPN

Installation

Simple : apt-get install openvpn

Fichiers de configuration :

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

    export KEY_COUNTRY="BJ"
    export KEY_PROVINCE="Ctn"
    export KEY_CITY="COTONOU"
    export KEY_ORG="AUF"
    export KEY_EMAIL="technique@bj.auf.org"

    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 :

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 ...?

Références

Projet/SemaineTech/2012/Ateliers/OpenVPN/Documentation (dernière édition le 2012-08-30 13:14:51 par FranckKouyami)