====== OPENVPN Serveur et Client ====== * Objet : du tuto Configuration d'un serveur openvpn * Niveau requis : {{tag>avisé}} * Commentaires : //serveur, nat.. // * Suivi : * Création par [[user>kawer]] 18/12/2018 * Testé par kawer le 18/12/2018 * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=15701 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) ===== Présentation ===== Cette technique permet la création d'une liaison chiffrée entre votre machine et un serveur hébergé sur Internet (par exemple chez un fournisseur d’accès se trouvant en France ou à l'étranger). \\ Tous vos accès à Internet seront alors vus à partir de l'adresse IP de ce serveur VPN et non plus par celle de votre machine. OpenVPN n'est pas un VPN IPSec. C'est un VPN SSL se basant sur la création d'un tunnel IP (UDP ou TCP au choix) authentifié et chiffré avec la bibliothèque OpenSSL. Quelques avantages des tunnels VPN SSL : * Facilité pour passer les réseaux NATés (pas de configuration à faire) * Logiciel clients disponibles sur **GNU/Linux, BSD, Windows et Mac OS X** ===== Partie Serveur ====== === Installation Sur le Serveur === === On commence par installer OpenVPN à partir des dépôts officiels : === apt-get update && apt-get install openvpn easy-rsa === On se prépare à installer les certificats === cd /etc/openvpn make-cadir nom_du_serveur cd /etc/openvpn/nom_du_serveur ln -s openssl-1.0.0.cnf openssl.cnf nano /etc/openvpn/nom_du_serveur/vars Ce qui donne par exemple : export KEY_SIZE=4096 # Une clef de 4096 est le minimum actuellement pour un chiffrement correct export KEY_COUNTRY="EU" export KEY_PROVINCE="FR" export KEY_CITY="Paris" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@debian-facile.org" export KEY_OU="MyOrganizationalUnit" export KEY_NAME="nom_du_serveur_vpn" # Choisissez un nom dont vous vous souviendrez ! === Génération des clefs RSA 4096 : === cd /etc/openvpn/nom_du_serveur source ./vars # on applique toutes les variables edité précedement. ./clean-all # Faite gaffe en utilisant cette commande, elle efface toutes les cléfs si vous en avez déjà créée. ./build-ca # Création du certificat d'authorité du serveur ./build-key-server nom_du_serveur Ce qui donne par exemple à la fin : A challenge password []:votre_mot_de_passe Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y openvpn --genkey --secret /etc/openvpn/nom_du_serveur/keys/ta.key cd /etc/openvpn/nom_du_serveur openssl dhparam 4096 > keys/dh-4096.pem === Configuration de base côté serveur : === gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/nom_du_serveur.conf nano /etc/openvpn/nom_du_serveur.conf #Attention, les ';' sont là pour désactiver les options En plus des informations déjà présente, et celle si comprise, vous devez modifier/ajouter les lignes suivantes, à adapter selon votre cas : port 7777 proto tcp ;proto udp ca /etc/openvpn/nom_du_serveur/keys/ca.crt cert /etc/openvpn/nom_du_serveur/keys/nom_du_serveur.crt key /etc/openvpn/nom_du_serveur/keys/nom_du_serveur.key # This file should be kept secret dh /etc/openvpn/nom_du_serveur/keys/dh-4096.pem tls-auth /etc/openvpn/nom_du_serveur/keys/ta.key 0 # This file is secret cipher AES-256-CBC auth SHA512 TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA comp-lzo user openvpn group nogroup ;explicit-exit-notify 1 === Création de l'utilisateur openvpn : === adduser --system --shell /usr/sbin/nologin --no-create-home openvpn === Test et Démarrage du serveur : === openvpn /etc/openvpn/nom_du_serveur.conf Si vous obtenez "Initialization Sequence Completed" en dernière ligne alors passez à la commande suivante, sinon ouvrez un post dans la rubrique réseau du forum. systemctl start openvpn systemctl start openvpn@nom_du_serveur systemctl enable openvpn systemctl enable openvpn@nom_du_serveur === Génération des clients sur le serveur : === cd /etc/openvpn/nom_du_serveur source ./vars ./build-key nom_du_client A la fin des options à saisir : A challenge password []:votre_mot_de_passe_précédement_créée Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y ===== Configuration reseau ===== === Activation de l'ip forwarding pour le NAT : === echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/NAT.conf **Activez le nouveau jeux de règle :** sysctl -p /etc/sysctl.d/NAT.conf Quelques explications concernant la configuration du NAT sur le [[https://debian-facile.org/viewtopic.php?pid=232793#p232793|forum ici]] merci à raleur pour ces explications :) == Ajouts des règles dans iptables : == **se référer ici :** [[doc:reseau:iptables|tuto Reseau iptable]] iptables -t filter -P FORWARD ACCEPT iptables -t filter -A INPUT -p tcp --dport 7777 -j ACCEPT iptables -t nat -A POSTROUTING -o ethx(nom de votre interface) -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ethx(nom de votre interface) -j MASQUERADE Pour rendre ces règles persistantes après un reboot de votre serveur, il faut commencer par créer un script de chargement de règles de Firewall (ou utiliser un script existant) : iptables-save > /etc/iptables.rules ===== Instalation Sur le Client ===== ==On installe openvpn :== sudo apt-get update sudo apt-get install openvpn === Configuration d'openvpn : === mkdir -p /etc/openvpn/nom_du_serveur/clients cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/nom_du_serveur/clients/nom_du_client.ovpn nano /etc/openvpn/nom_du_serveur/clients/nom_du_client.ovpn Doit y être ajouté et ou modifié les lignes suivantes : proto tcp ;proto udp remote ip_du_serveur 7777 user nobody group nogroup ca ca.crt cert nom_du_client.crt key nom_du_client.key tls-auth ta.key 1 cipher AES-256-CBC auth SHA512 TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA comp-lzo === On récupère les certificats sur le serveur : === ** Rappatriez ca.crt nom_du_client.crt nom_du_client.key et ta.key de /etc/openvpn/nom_du_serveur/keys sur votre client dans /etc/openvpn/nom_du_serveur/nom_du_client/** [[doc:reseau:scp|scp : transfert de fichiers sécurisé entre machines]] Déconseillé d'utiliser la connexion via le compte root à travers internet!! Pour bien faire il faut mettre tout ça dans un répertoire, le compresser via targz, lui donner les droits d'un user qui est sur le client et enfin récupérer cette archive à partir du client via le user avec scp... === Tester la configuration : === cd /etc/openvpn/nom_du_server/nom_du_client openvpn nom_du_client.ovpn #Vous devriez obtenir 'Initialization Sequence Completed' dans le cas contraire ouvrez un post dans la rubrique reseau Il vous reste plus qu'a enable et start openvpn et openvpn@nom_du_client de la même façon que sur le serveur.