|
Table des matières
OpenVPNOpenVPN permet la création de réseau privé virtuel VPN (Virtual Private Network). Il permet à des pairs de s’authentifier entre eux à l’aide d’une clé privée partagée à l’avance, de certificats ou de couples de noms d’utilisateur/mot de passe. Il utilise OpenSSL (Secure Sockets Layer) pour l’authentification. Logiciel libre, il existe sous Linux, Mac OS X et Windows. L’architecture comprend d’un côté un client et de l’autre un serveur. Procédure d'installationInstaller d’abord les paquets apt://openvpn,openssh-server,openssl. Au préalable, activer si besoin le dépôt Universe. Infrastructure des Clés PubliquesUne ICP fonctionne grâce à :
OpenVPN supporte une authentification bidirectionnelle basée sur les certificats, donc le client doit authentifier le certificat du serveur et le serveur doit authentifier le certificat du client avant qu’une confiance mutuelle puisse être établie. Les fichiers clésLe tableau suivant récapitule les clés et les certificats fraichement générés dans le dossier keys. Suit une explication de ce que contiennent les fichiers du dossier keys.
Création du certificat de l’autorité de certification (CA)La mise en place d’un serveur OpenVPN nécessite la génération des clés et des certificats. Plusieurs scripts sont disponibles pour générer plus facilement les clés et les certificats pour OpenSSL. Ces scripts sont enregistrés dans le dossier easy-rsa : cd /usr/share/doc/openvpn/examples/easy-rsa/ Avant d’utiliser les scripts, il faut éditer le fichier vars pour initialiser les variables par défaut indiquées à la fin du fichier. Par exemple : - export KEY_COUNTRY=FR - export KEY_PROVINCE=France - export KEY_CITY=Toulon - export KEY_ORG="AssoXYZ" - export KEY_EMAIL="contact@AssoXYZ.fr" Une fois le fichier modifié, la ligne suivante permet d’initialiser les variables pour les scripts: . ./vars Le script suivant permet de créer ou de réinitialiser le sous-dossier keys: ./clean-all # pour nettoyer toutes les clés et certificats existants Le script suivant permet de créer dans keys le certificat principal du serveur ca.crt et la clé correspondante ca.key : ./build-ca Création du certificat et da la clé du serveurLe script suivant permet de créer dans keys le certificat ubserv.crt et la clé ubserv.key pour le serveur VPN nommé par exemple ubserv: # ./build-key-server ubserv # ./build-key-server ubserv Generating a 1024 bit RSA private key ...........++++++ ................................................++++++ writing new private key to 'ubserv.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) [FR]: State or Province Name (full name) [France]: Locality Name (eg, city) [Toulon]: Organization Name (eg, company) [USERV]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [userv]: # à remplir impérativement Email Address [...@free.fr]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'FR' stateOrProvinceName :PRINTABLE:'France' localityName :PRINTABLE:'Toulon' organizationName :PRINTABLE:'UBSERV' commonName :PRINTABLE:'ubserv' # à remplir impérativement emailAddress :IA5STRING:'...@free.fr' Certificate is to be certified until Apr 21 17:17:18 2019 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated Création du certificat et de la clé pour un client OpenVPNLe script suivant permet de créer dans keys le certificat Client01.crt et la clé Client01.key pour le client VPN nommé par exemple Client01 : # cd /usr/share/doc/openvpn/examples/easy-rsa/ # . ./vars # ./build-key Client01 Ce script doit afficher à l’écran quelque chose comme: # ./build-key Client01 Generating a 1024 bit RSA private key ..++++++ ....................++++++ writing new private key to 'Client01.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. ----- ----- 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated Création du paramètre Diffie HellmanLe script build-dh permet de créer le fichier dh1024.pem ./build-dh Mise en place des certificats et des clésDéplacer maintenant les certificats et clés dans le répertoire openvpn: cp ./keys/ca.crt /etc/openvpn/ cp ./keys/ca.key /etc/openvpn/ cp ./keys/userv.crt /etc/openvpn/ cp ./keys/userv.key /etc/openvpn/ cp ./keys/dh1024.pem /etc/openvpn/ Création d’un utilisateur avec des droits limités pour OpenVPNPour limiter les risques d’attaques sur OpenVPN, il est important que le processus d’OpenVPN fonctionne sur un utilisateur n’ayant aucun droit sur le système. Souvent, l’utilisateur nobody est utilisé par défaut, mais il est encore plus sécurisant de faire tourner chaque processus avec un utilisateur différent. Donc, pour le processus OpenVPN, créer plutôt l’utilisateur openvpn: # groupadd openvpn # useradd -d /dev/null -g openvpn -s /bin/false openvpn Configuration d’OpenVPNPar défaut OpenVPN est fourni avec plusieurs fichiers d’exemples enregistrés dans le dossier /usr/share/doc/openvpn/examples/sample-config-files/ Le port 22 est normalement attribué au SSH, les bons ports pour OpenVPN sont : - openvpn 1194/tcp OpenVPN - openvpn 1194/udp OpenVPN Pour configurer le serveur, partir du fichier d’exemple server.conf.gz à décompresser et à mettre dans /etc/openvpn: # cd /usr/share/doc/openvpn/examples/sample-config-files/ # gunzip server.conf.gz # cp server.conf /etc/openvpn/ Il suffit ensuite d’adapter ce fichier en fonction des besoins. Voici un exemple de fichier de configuration: ;Port en écoute utilisé pour la connexion VPN ;port 1194 ;Protocole utilisé (Le protocole udp est plus sécurisé que le tcp) proto udp ;Type d'interface réseau virtuel créé dev tun ;Nom des fichiers servant à l'authentification des clients via OpenSSL ca ca.crt cert LeServeurVPN.crt # selon serveur key LeServeurVPN.key # selon serveur dh dh1024.pem ;Adresse du réseau virtuel (Le serveur aura l'adresse 10.8.0.1) server 10.8.0.0 255.255.255.0 ;Cette ligne ajoute sur le client la route du réseau du serveur push "route 192.168.0.0 255.255.255.0" # selon adresse réseau ;Ces lignes indiquent aux clients l'adresse des serveur DNS et WINS push "dhcp-option DNS 192.168.0.2" # selon IP DNS push "dhcp-option DOMAIN MonDomaine.com" # selon Domaine push "dhcp-option WINS 192.168.0.3" # selon IP WINS # Cette ligne permet aux clients de voire les autres clients ;client-to-client keepalive 10 120 ;Cette ligne active la compression comp-lzo ;Ces lignes indiquent un user et un group particulier pour le processus user openvpn group openvpn ;Ces lignes permettent de rendre persistante la connexion persist-key persist-tun status openvpn-status.log ;Cette ligne permet d'indiquer le niveau de log souhaité (de 1 à 9) verb 1 echo 1 > /proc/sys/net/ipv4/ip_forward Vérifier la redirection 1194 sur le routeur Ajouter une route statique openvpn en 10.8.0 vers le serveur |