INSTALLATION D'OPENVPN: http://openmaniak.com/fr/openvpn_tutorial.php Suivez le tutorial d'installation d'OpenVPN. ARCHITECTURE CLIENT/SERVER: Parmi les deux boitiers OpenVPN, il est nécessaire d'en déclarer un en tant que serveur et l'autre en tant que client. Dans certains scenarios, chaque boitier peut être déclaré comme serveur ou client, mais dans d'autres, il est obligatoire de choisir spécifiquement un boitier comme serveur et l'autre comme client, regardons quand. Avant d'établir le VPN SSL, le client essaie d'abord de dre le serveur sur un port spécifique, le serveur n'ayant pas besoin d'atteindre le client. Prenons un exemple où vous êtes dans un environnement professionnel et voulez établir un VPN avec un équipement directement connecté à Internet, disons un équipement à votre domicile. Dans ce cas usuel, le client peut atteindre le serveur mais pas le contraire, Ceci est du au fait que le client est situé dans un réseau local et se connecte à Internet via un proxy et un Pare-feu qui vont changer son adresse IP source par leur propre adresse IP ou une autre membre d'un pool. Bien-sûr, quand le tunnel est créé, le trafic en son intérieur est bidirectionnel.
FICHIER DE CONFIGURATION: Créez un fichier où vous stockez votre configuration d'OpenVPN. Dans notre exemple, nous allons appeler ce fichier config.txt and le sauver dans le dossier /home// ou "C:\Program Files\OpenVPN\config\" selon s'il s'agit d'une machine Linux/Unix ou Microsoft. Les paramètres de configuration sont présentés dans les paragraphes suivants.
1
DESIGNATION CLIENT/SERVEUR : SERVEUR # ADRESSE IP DU SERVEUR # L'adresse IP WAN du client n'est pas # requise
CLIENT # ADRESSE IP DU SERVEUR remote 100.0.0.1 #
MODE DE TUNNEL: Vous pouvez choisir entre un tunnel IP (pilote TUN) ou Ethernet (pilote TAP). Le tunneling IP est également appelé mode de routage tandis que le tunneling Ethernet est aussi appelé mode pont (bridging). Préférez le mode tunnel IP (par défaut) à moins que vous n'ayez besoin de faire er du trafic ethernet comme du NetBios dans le tunnel. PORT DU TUNNEL: Le port source et destination de tunneling est par défaut le port UDP 1194. Il est possible qu'il soit nécessaire de le changer pour des raisons d'ouverture de port sur le pare-feu autrement vous pouvez le garder telle quelle. Preferez les ports UDP. L'utilisation de T peut mener à la dégradation des performances. Comme la majorité des applications utilisent T, si un mode de tunnel T est également choisi, vous allez créer un tunnel T sur T (T over T). Ce mode de tunnel n'est pas recommandé parce qu'en cas de retransmissions de paquets à l'intérieur du tunnel, des recalcules vont intervenir dans les deux tunnels, ce qui va mener à de basses performances comme un temps de réponse élevé. Préférez le protocole UDP pour tunneliser vos applications parce que UDP ne fournit pas de mecanisme de vérification d'erreur comme le fait T. Lisez cet article pour obtenir plus de détails à propos du problème des tunnels T sur T. SERVEUR ET
CLIENT
# TUNNEL T OU UDP # T tunnel proto t # Tunnel UDP est recommandé proto udp # Utilisez UDP ou T mais pas les deux # # PORT T OU UDP port 1194
2
PARAMETRAGES DU FIREWALL: Vous devez vérifier que l'adresse IP de votre client OpenVPN peut atteindre l'adresse IP de votre serveur ainsi que le port T/UDP. Voici un exemple d'une règle de sécurité qui peut être implémenté sur le pare-feu du schéma cidessous.
Grâce à la simplicité des configurations d'OpenVPN, les problèmes pour établir une connexion proviennent très souvent de restrictions d'adresses IP ou de ports sur le chemin entre le client et le serveur. TUNNEL ETHERNET/IP: Vous pouvez choisir de construire soit des VPNs Ethernet, soit des VPNs IP avec l'aide respectivement des pilotes TAP et TUN. TAP/TUN sont disponibles sur toutes les plates-formes et sont déjà présent avec les Linux noyau 2.4 et supérieur. Préférez TUN (par défaut) à moins que vous avez besoin de faire er du trafic Ethernet comme du NetBios à l'intérieur du tunnel. Pour vérifier que les pilotes TUN/TAP sont chargés: #lsmod | grep tun tun 12672 1 Notez que le pilote "tun" est aussi le pilote TAP. Si vous n'avez aucune réponse, vous pouvez le module du noyau de la façon suivante: #modprobe tun SERVEUR et CLIENT # TUNNEL ETHERNET OU IP # "dev tun" will create a routed IP tunnel dev tun # "dev tap" will create an Ethernet IP tunnel dev tap # use "dev tun" or "dev tap" but not both
3
ARCHITECTURE OPENVPN de SECURITE: Transparent tunnel: OpenVPN tunnelise juste les données sans authentification, confidentialité ou intégrité. En d'autres termes, il n'y a aucune vérification de sécurité et les données peuvent être vues quand elles transitent dans le tunnel. SERVEUR et CLIENT # Client AND Server configs # Pas d'intégrité (algorithme # de hachage) auth none # Pas de chiffrement (algorithme de chiffrement) cipher none
Clefs partagées: Une combinaison secrète et permanente est partagées entre les deux erelles VPN. Créez d'abord les clefs partagées avec le tutorial de création de clefs partagées. SERVEUR et
CLIENT
# CLEFS PARTAGEES # Système LINUX static /home//openvpn/key.txt # Système Windows static "C:\\Program Files\\OpenVPN\\config\\key.txt" #openvpn /home/teddybear/openvpn/config.txt >openvpn "C:\Program Files\OpenVPN\config\config.txt"
4
SSL/TLS: - Client ou serveur SSL/TLS: SERVEUR # SERVEUR SSL/TLS tls-server - Certificats et clefs publiques:
CLIENT # CLIENT SSL/TLS tls-client
Chaque équipement doit avoir ses propres clefs privée et publique. La clef publique étant incluse dans un certificat. Le certificat de l'autorité de certification (CA) doit aussi être détenu par chaque équipement OpenVPN. Voir le Tutorial sur la PKI pour comprendre l'infrastructure à clés publiques (Public Key Infrastructure) et savoir comment créer des clefs publiques et des certificats. CLIENT SERVEUR # CERTIFICATS ET CLEF PRIVEE # Certificat de l'autorité (clef publique du CA) ca ca.key # Certificat du server (clef publique du serveur) cert server.crt # Clef privée du serveur key server.key - Paramètres Diffie-Hellmann (DH):
# CERTIFICATS AND CLEF PRIVEE # Certificat de l'autorité (clef publique du CA) ca ca.key # Certificat du client (clef publique du serveur) cert client.crt # Clef privée du client key client.key
Une fois que les boitiers OpenVPN sont surs de l'identité de l'autre (authenticité), DH peut être utilisé pour créer un clef secrète partagée pour les algorithmes de fonction de hachage (intégrité) et de chiffrement (confidentialité). En combinant un clef DH privée avec la clef DH public de l'autre boitier OpenVPN, il est possible de calculer une clef partagée secrète que seul les deux machines OpenVPN connaissent. Voir le Tutorial SSL et PKI pour savoir comment créer les paramètres DH. CLIENT
SERVEUR
# Aucun paramètre DH sur le client # Cette clef DH partagée peut être comparée à la clef partagée OpenVPN. Ces clefs partagée seront utilisées par les algorithmes de chiffrement symétrique et fonctions de hachage comme montré dans les deux prochains paragraphes. # Paramètres Diffie-Hellman dh dh1024.pem
5
ALGORITHME DE CHIFFREMENT SERVEUR et CLIENT # ALGORITHME DE CHIFFREMENT cipher AES-256-CBC - La confidentialité est assurée par des algorithmes de chiffrement comme 3DES ou AES pour empêcher la lecture des données. L'algorithme OpenVPN par défaut est le Blowfish (signifiant poisson-lune en français). Pour vérifier les algorithmes disponibles: #openvpn --show-ciphers DES-CBC 64 bit default key (fixed) IDEA-CBC 128 bit default key (fixed) RC2-CBC 128 bit default key (variable) DES-EDE-CBC 128 bit default key (fixed) DES-EDE3-CBC 192 bit default key (fixed) DESX-CBC 192 bit default key (fixed) BF-CBC 128 bit default key (variable) RC2-40-CBC 40 bit default key (variable) CAST5-CBC 128 bit default key (variable) RC5-CBC 128 bit default key (variable) RC2-64-CBC 64 bit default key (variable) AES-128-CBC 128 bit default key (fixed) AES-192-CBC 192 bit default key (fixed) AES-256-CBC 256 bit default key (fixed) CBC pour Cipher Block Chaining (Chiffrement par bloc de données) est un mode opérationel de cryptographie utilisé pour chiffrer les données avec un algorithme de chiffrement par bloc comme CBC utilise de petits segments de données, à la place de processer des blocs entiers en une fois, d'autres modes d'operation cryptographique sont EBF, OFB, CFB. CBC est recommandé.
6
ALGORITHME DE HACHAGE - L'intégrité utilise des fonctions de hachage pour protéger l'altération des données. HMAC est souvent utilisé en addition de SHA1 et MD5. Les fonctions de hachage par défaut de OpenVPN sont HMAC-SHA1. Pour vérifier les algorithmes disponibles: #openvpn --show-digests MD2 128 bit digest size MD5 128 bit digest size RSA-MD2 128 bit digest size RSA-MD5 128 bit digest size SHA 160 bit digest size RSA-SHA 160 bit digest size SHA1 160 bit digest size RSA-SHA1 160 bit digest size DSA-SHA 160 bit digest size DSA-SHA1-old 160 bit digest size MDC2 128 bit digest size RSA-MDC2 128 bit digest size DSA-SHA1 160 bit digest size RSA-SHA1-2 160 bit digest size DSA 160 bit digest size RIPEMD160 160 bit digest size RSA-RIPEMD160 160 bit digest size MD4 128 bit digest size RSA-MD4 128 bit digest size SERVEUR et CLIENT # ALGORITHME DE HACHAGE auth MD5 "openvpn --show-tls" affiche le chiffrement et le code d'authentification du message (MAC) utilisé durant la négociation SSL/TLS. Ils ne doivent pas être confondus avec le chiffrement et le MAC utilisé pour sécuriser le tunnel.
7
ADRESSES IP: Choississez les adresses IP que vous voulez utiliser à l'intérieur du tunnel. Adresses IP statiques: En mode routé, deux adresses IP (locale et distante) à l'intérieur d'un masque de sous-réseau de 30 bits doivent être choisi. En mode pont (bridged), une adresse pour le boitier local OpenVPN et un masque de sous-réseau incluant l'adresse IP du serveur sont choisis. SERVEUR # ADDRESSAGE IP # Exemple mode IP: # Serveur IP: 10.8.0.1 ; Client IP: 10.8.0.2 ifconfig 10.8.0.1 10.8.0.2 # Exemple mode pont # Serveur IP: 10.8.0.1 ifconfig 10.8.0.1 255.255.255.0 # Utilisez le mode IP ou bridge mais # pas les deux # Le client et le serveur doivent utiliser # le même mode de tunnel Adresses IP dynamiques:
CLIENT # ADDRESSAGE IP # IP Tunnel # Serveur IP: 10.8.0.1 ; Client IP: 10.8.0.2 ifconfig 10.8.0.2 10.8.0.1 # Exemple mode pont # Client IP: 10.8.0.2 ifconfig 10.8.0.2 255.255.255.0 # # Utilisez le mode IP ou bridge mais # pas les deux # Le client et le serveur doivent utiliser # le même mode de tunnel
Dans ce cas, le serveur possède une adresse IP statique et fournir des adresses IP aux clients comme un serveur DH. CLIENT
SERVEUR # PARAMETRES DH # Etendue DH # Le serveur s'attribue la première # adresse de l'étendue server 10.8.0.0 255.255.255.0
# LE CLIENT ACCEPTE LES OPTIONS # DU SERVEUR # Le client devrait accepter les options # poussées par le serveur pull
8
PARAMETRES OPTIONELS: OpenVPN offre un très large nombre de paramètres. Référez-vous à la page man OpenVPN pour de l'assistance.
PARAMETRES DE JOURNALISATION: La verbosité du journal (log) est configuré de 0 (minimal) à 15 (complet). Dans une utilisation normale, les niveaux verbeux "2" et "4" vont déjà fournir assez de journaux. # Niveau de verbosité. # 0 -- Erreurs fatales seulement. # 1 -- Très silencieux mais affiche des erreurs non-fatales. # 3 -- Sortie moyenne, idéal pour des opérations moyennes. # 9 -- verbeux, bon pour un dépannage. SERVEUR and CLIENT # VERBOSITE DU JOURNAL # Paramétrage de la verbosité du journal, 0=min 15=max verb 3
9
UTILISATEUR OPENVPN: Pour des raisons de sécurité, c'est toujours mieux de faire tourner un logiciel sans les privilèges root. Vous pouvez réduire les privilèges du démon OpenVPN après initialisation pour opérer en tant qu'utilisateur "nobody". Une autre chose intéressante pour la sécurité est de limiter le droit pour OpenVPN à accéder à des fichiers après initialisation avec "chroot". Ces deux paramètres de sécurité sont disponibles sous des systèmes comme Linux ou Unix mais pas sous Microsoft Windows. Une autre raison de préférer des outils open source comme les systèmes opérationels Linux ... SERVEUR and CLIENT # SECURITE OPENVPN - Linux seulement # Utilisateur OpenVPN nobody # Après initialisation, OpenVPN peut # seulement accéder à un dossier # Le dossier peut être vide # Limitation du processus OpenVPN chroot /etc/openvpn/
10
LANCEMENT D'OPENVPN: Utilisez la syntaxe suivante pour lancer OpenVPN. #openvpn chemin-du-fichier-de-configuration Ci-dessous deux exemples avec Linux et Windows. Le fichier de config est "config.txt": #openvpn /home/teddybear/openvpn/config.txt >openvpn "C:\Program Files\OpenVPN\config\config.txt" VERIFICATION DES JOURNAUX: Le journal devrait se terminer avec la ligne suivante: Initialization Sequence Completed Ceci indique que le tunnel OpenVPN a été créé avec succès.
TESTS DE CONNECTIVITES: Ping est un utilitaire commun pour vérifier les connectivités IP. Les erelles VPN devraient pinger l'adresse IP tunnel de l'autre. Par exemple, dans notre scenario, nous pingons l'adresse IP tunnel du client depuis le serveur: ping 10.8.0.2
11
VERIFICATION DU PROCESSUS OPENVPN: A venir bientôt ... Here are some OpenVPN default values: PARAMETRE: port source et dest: Mode de tunnel: Chiffrement symétrique: Fonctions de hachage: Compression: MTU du tunnel: mode verbeux: Haut de la page
VALEUR: UDP 1194 Tunnel IP (mode tun) Blowfish - CBC (128 bits) HMAC - SHA1 (160 bits) NON 1500 bytes 0
12