Introduction Un VPN, ou Virtual Private Network (pour réseau privé virtuel) vous permet de créer une connexion sécurisée entre votre ordinateur et le serveur VPN. Cette connexion étant cryptée, vous allez pouvoir naviguer sur Internet par exemple en utilisant le serveur VPN comme relai via un serveur proxy appartenant au réseau privé. Cette connexion sécurisé permet d'accèder à certaines données appartement au réseau de l'entreprise exemple: serveur de bases de données, serveur de fichiers... Cette sécurité, ce cryptage est valable pour une connexion filaire ou Wifi et empêche toute malveillance ou surveillance. Installation Serveur OpenVPN est un logiciel libre permettant de créer un réseau privé virtuel. OpenVPN est un VPN SSL qui va créer un tunnel IP (UDP ou TCP au choix) authentifié et chiffré avec la bibliothèque OpenSSL. L'installation se réaliser sur un serveur debian apt-get install openvpn Installation 1
mkdir /etc/openvpn/easy-rsa/ cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ chown -R $USER /etc/openvpn/easy-rsa/ Configuration Dans le dossier /etc/openvpn/easy-rsa/, il faut editer le fichier vars qui rassemble l'ensemble des variables d'environnement: vim /etc/openvpn/easy-rsa/vars export KEY_COUNTRY="FR" export KEY_PROVINCE="77" export KEY_CITY="Mitry" export KEY_ORG="toto.fr" export KEY_EMAIL="an@nyme.fr" Par la suite il faudra génèrer les différentes clés et certificats nécessaires pour le cryptage des données: cd /etc/openvpn/easy-rsa/ source vars./clean-all./build-dh./pkitool --initca./pkitool --server server openvpn --genkey --secret keys/ta.key Une fois les clés et les certificats générés, on va les rendre disponibles pour le serveur en les copiant dans le répertoire /etc/openvpn/ cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn/ && mkdi Note: Les répertoires /etc/openvpn/jail est utilsé pour chrooter le processus d?openvpn. De plus /etc/openvpn/clientconf (qui contiendra les configurations des clients) vim /etc/openvpn/server.conf # Serveur TCP/443 mode server proto tcp port 443 --> https dev tun0 --> carte reseau virtuel # client1 et certificats ca ca.crt ------------------ cert server.crt key server.key dh dh1024.pem --> client1 et certificats tls-auth ta.key 0 cipher AES-256-CBC # Reseau server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 4.4.4.4" push "dhcp-option DNS 8.8.8.8" keepalive 10 120 # Securite Configuration 2
user nobody group nogroup chroot /etc/openvpn/jail persist-key persist-tun comp-lzo # Log verb 3 mute 20 status openvpn-status.log ;log-append /var/log/openvpn.log Dans ce fichier de configuration, on voit clairement que l?on va créer un serveur VPN SSL basé sur le port 443 et sur le protocol TCP. Le port 443 étant généralement utilisé par le protocole HTTPS, cela vous permettra de passer aux travers de la plupart des firewalls et autres sécurités. On note également que l?ensemble des clients qui se connecteront au serveur VPN utiliseront obtiendront une ip dans le range 10.8.0.0/24. Carte réseau virtuel La création de la carte réseau est nécessaire afin de permettre le bon fonctionnement de l'openvpn. Via cette interface sera attribuée une adresse ip virtuel (10.8.0.0/24). mkdir -p /dev/net mknod /dev/net/tun0 c 10 200 chmod 600 /dev/net/tun0 firewall Quelles règles iptables sont nécessaires pour permettre les connexions OpenVPN? Vous devez d'abord permettre connexions entrantes et sortantes de votre interface principale en UDP sur le port 1194: iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT iptables -A OUTPUT -o eth0 -p udp --dport 1194 -j ACCEPT Ensuite, vous devez permettre à certains trafics passant par le tunnel Si vous ne voulez pas de restrictions utilisent ensuite: iptables -A INPUT -i tun0 -j ACCEPT iptables -A OUTPUT -o tun0 -j ACCEPT iptables -A FORWARD -o tun0 -j ACCEPT Permettre le routage et l'accès vers le réseau privé: iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE Carte réseau virtuel 3
Tests Vérification: ifconfig && route Si le message?initialization Sequence Completed? apparait c?est que la configuration s?est correctement déroulée. Client Maintenant le serveur OpenVPN est correctement configuré et que le routage est fonctionnel, nous allons créer un compte client pour pouvoir nous connecter dessus et l?utiliser. L?exemple suivant va créer un compte pour l?utilisateur?client1?. cd /etc/openvpn/easy-rsa source vars./build-key client1 3 fichiers ont été générés dans le répertoire /etc/openvpn/easy-rsa/keys: client1.crt: Certificat pour le client client1.csr: Certificat à garder sur le serveur client1.key: Clés pour le client Linux Nous allons copier ces fichiers dans un sous répertoire du dossier /etc/openvpn/clientconf/ puis on se place dans ce dossier: mkdir /etc/openvpn/clientconf/client1/ sudo cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/client1.crt keys/client1.key /etc/openvpn/c cd /etc/openvpn/clientconf/client1/ On créé le fichier client.conf en remplaçant A.B.C.D par l?adresse publique du serveur VPN # Client client dev tun0 proto tcp-client remote A.B.C.D 443 resolv-retry infinite cipher AES-256-CBC # client1 ca ca.crt cert client1.crt key client1.key tls-auth ta.key 1 # Securite nobind persist-key persist-tun comp-lzo verb 3 Client 4
Windows Le client Windows d?openvpn a besoin d?un fichier ayant l?extension.ovpn. On va donc copier le fichier de configuration client.conf vers client.ovpn cp client.conf client.ovpn Il faut zipper le répertoire du client afin de pouvoir le récupérer sur le poste client. zip client1.zip *.* Pour pouvoir vous connecter à votre serveur OpenVPN sous votre ordinateur Windows, vous devez télécharger le client OpenVPN disponible via cet url: http://openvpn.net/index.php/open-source/downloads.html Procédez à son installation puis récupérer le fichier client1.zip que l?on a généré précédemment sur le serveur vpn. Dézippez le contenu du fichier dans le répertoire?config? du dossier d?installation de votre client OpenVPN (chez moi c?est?c:\programmes\openvpn\config?). Il ne vous reste plus qu?à lancer le client?openvpn GUI? puis à vous connecter. En résumé On résume à nouveau : Dans le répertoire /config du serveur, vous avez copié : «ca.crt», «server.crt», «server.key», «dh1024.pem» et «ta.key». Dans le répertoire /config d'un client, on trouve : «ca.crt», «client1.crt», «client1.key», «ta.key», «client.ovpn». remote xx.xx.xx.xx 1194 Spécifiez ici l'adresse (ou le nom NetBIOS) et le port sur lequel joindre le serveur OpenVPN. Vous pouvez spécifier plusieurs adresses de serveur pour répartir la charge automatiquement et proposer une redondance. cert client1.crt key client1.key Pensez à changer ces paramètres en fonctions des fichiers qui sont présents dans le répertoire /config de la machine. ns-cert-type server Dé-commentez cette ligne pour ajouter une vérification du certificat du serveur. Le serveur est préconfiguré correctement avec les fichiers par défaut proposés dans /easy-rsa. Cette protection permet d'éviter une attaque du type «homme dans le milieu». tls-auth ta.key 1<b> Dé-commentez cette ligne si vous utilisez un fichier d'authentification TLS «ta.key» sur les machines. Windows 5