Bonjour à tous, dans ce second tuto consacré à OpenVPN nous allons voir quelques astuces utiles pour profiter au mieux de son serveur VPN.
Nous allons donc voir:
- Comment partager la connexion internet du serveur VPN aux clients
- Quelques options supplémentaires dans le fichier de configuration du serveur
- Créer son autorité de certification plus rapidement
- Un script pour créer des certificats supplémentaires aux clients.
- Comment connecter un téléphone/tablette Android au VPN
Comment partager la connexion internet du serveur OpenVPN aux clients
Si vous avez suivis mon précédent tutoriel sur OpenVPN vous avez créer un serveur OpenVPN, vos clients se connectent donc à votre VPN mais ils n’ont pas accès à internet. Voici donc ce qu’il faut faire pour que vos clients aient accès un internet en utilisant la connexion internet de votre serveur OpenVPN.
Tout d’abord il faut activer l’IP forwarding dans le noyau Linux en tapant la commande suivante:
echo 1 > /proc/sys/net/ipv4/ip_forward
Puis il faut créer des règles iptables pour mettre en place le partage de connexion internet
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
Une fois tout cela fait il faut éditer le fichier de configuration d’OpenVPN (/etc/openvpn/server.conf) et rajouter le lignes suivantes:
#On définit le serveur VPN comme passerelle par défaut pour les clients. push "redirect-gateway def1" #On configure des serveur DNS pour que les clients puissent résoudres des noms #Vous pouvez mettre n'importe quels serveur DNS dans cet exemple les DNS de google push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4"
Il ne reste plus qu’a redémarrer le service OpenVPN et tester la configuration avec un client.
service openvpn restart
Voici en prime un script à mettre dans /etc/init.d/ qui va mettre en place au démarrage du serveur les regles iptables et l’ip forwarding.
#!/bin/bash ##Denis ROSENKRANZ ##denisrosenkranz.com start() { echo -n "Application des regles IpTables: " #Suppresion des anciennes rêgles iptables -F iptables -X #Activation de l'IP Forwarding echo 1 > /proc/sys/net/ipv4/ip_forward #Mise en place des regles iptables iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT echo " [termine]" echo } stop() { echo -n "Flush des regles IpTables: " iptables -F iptables -X echo " [termine]" echo } case $1 in start) start ;; stop) stop ;; restart) stop start ;; status) /sbin/iptables -L /sbin/iptables -t nat -L ;; *) echo "Usage: ovpn {start|stop|restart|status}" esac exit
Pour mettre en place ce script créez un fichier ovpn dans /etc/init.d/ et copiez le contenus du script dedans.
Puis tapez les commandes suivantes:
chmod +x /etc/init.d/ovpn update-rc.d ovpn defaults
Le script est en place.
Quelques options suplémentaires dans le le fichier de configuration d’OpenVPN
Voici quelques options à rajouter dans le fichier de configuration d’OpenVPN qui peuvent êtres utiles
Compression des donnés sur le VPN (à mettre aussi dans le fichier de configuration client)
comp-lzo
Mise en place d’un fichier de log pour connaitre les utilisateurs connectés au VPN
status openvpn-status.log verb 3
Cela va créer un fichier /etc/openvpn/openvpn-status.log qui va se mettre à jour dynamiquement avec le liste des clients connectés au VPN voici un exemple:
OpenVPN CLIENT LIST Updated,Tue Feb 5 14:26:56 2013 Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since denis,IP:28570,1237257,7779613,Tue Feb 5 13:50:15 2013 ROUTING TABLE Virtual Address,Common Name,Real Address,Last Ref 192.168.87.6,denis,IP:28570,Tue Feb 5 14:26:40 2013 GLOBAL STATS Max bcast/mcast queue length,0 END
Faire en sorte que plusieurs clients puissent se connecter avec le même certificat:
duplicate-cn
Voila pour les options intéressantes.
Créer plus rapidement une autorité de certification
Dans le tuto précédent sur OpenVPN nous avons créer notre autorité de certifications et les certificats clients et serveur avec les commandes suivantes dans easy-rsa:
./build-ca ./build-key-server ./build-key
Le problème c’est qu’avec ces commandes il faut valider les champs que nous avons déja remplis dans le fichier vars.
Heureusement il y a d’autres commandes dans easy-rsa qui permettent de faire la même choses sans avoir besoins de valider les champs.
Revoici donc les commandes pour créer une autorité de certification de zéro et les certificats clients et serveurs.
source ./vars #On supprime tous les anciens certificats ./clean-all #On créer les paramêtres Diffie-Helman ./build-dh #On créer le CA ./pkitool --initca #On créer le certificat et la clef serveur ./pkitool --server vpn-server #On créer le certificat et la clef pour le client ./pkitool vpn-client
Et voila, comme pour les anciennes commandes les clefs et les certificats seront dans le dossier keys de easy-rsa.
Script pour créer les certificats clients de façon automatique
Voici un script de ma création qui va permettre de créer de façon automatique des certificats clients et le fichier de configuration client ! et en plus de l’envoyer par mail, à vous ou directemet à vos clients.
#!/bin/bash #Script pour creer automatiquement des certificats et des clefs pour les clients OpenVPN #Initialisation des variables echo "Nom du certificat: (ex: client4 ou bob)" read cn #Creation des certificats cd /etc/openvpn/easy-rsa/ source ./vars ./pkitool $cn mkdir $cn #Creation du fichier de configuration ovpn pour les clients Windows echo "client dev tun proto udp remote IP-DE-VOTRE-SERVEUR-OPENVPN 1194 ca ca.crt cert $cn.crt key $cn.key" > $cn/$cn.ovpn #Creation de l'archive avec tous les fichiers cp keys/{ca.crt,$cn.crt,$cn.key} $cn/ zip -r $cn.zip $cn #Decommentez les lignes suivantes si vous souhaitez envoyer les fichiers par mail #echo "Adresse E-mail a qui envoyer les certificats" #read mail #echo "Configuration d'OpenVPN" | mutt -x -s "Zip d'OpenVPN" $mail -a $cn.zip exit 0
Ce script va donc créer dans le dossier /etc/openvpn/easy-rsa un dossier avec le nom du certificat contenant les clefs, les certifcats et le fichier de configuration nécéssaire à la connection du client. Le tout va etre placé dans un fichier ZIP qui se trouvera dans le doossier easy-rsa.
De plus si vous avez un serveur smtp fonctionnel sur votre serveur vous pourrez envoyer directement le zip par mail à l’adresse de votre choix.
N’oubliez pas dans le script de remplacer IP-DE-VOTRE-SERVEUR-OPENVPN par l’IP de votre serveur VPN.
Pour utiliser ce script il vous suffit de créer un fichier sur votre serveur, de coller le contenus du script et de taper les commandes suivantes:
chmod +x nomduscript.sh ./nomduscript.sh
Comment connecter un téléphone ou une tablette Android à OpenVPN?
Pour se connecter à votre serveur OpenVPN avec un appareil sous Android installez depuis Googleplay le logiciel OpenVPN Connect
Puis commencez par envoyer sur votre appareil Android les fichiers de configurations clients, a savoir:
- le fichier ca.crt
- la clef et le certificat client
- le fichier de configuration .ovpn
Une fois ces quatre fichiers sur votre appareil lancez le logiciel OpenVPN Connect
Appuyez en haut à droite de l’écran principal puis choisissez « Import » –> « Import Profile from SD card »
Puis dans l’arborescence allez dans le dossier ou se situe la clef, les certificats et le fichier .ovpn, sélectionnez le fichier ovpn et appuyez sur select.
Votre profile OpenVPN va être importé il ne vous restera plus qu’à appuyer sur « Connect » pour vous connecter à votre serveur OpenVPN.
(6 commentaires)
1 ping
Passer au formulaire de commentaire
Merci pour le tuto, intéressant a lire.
Je voulais ajouter que pour les clients Android, il est plus facile d’intégrer directement les certificats dans le fichier de config du client.
Pour cela, il suffit d’ajouter le contenu du fichier ca (autorité de certification) comme ceci :
—–BEGIN CERTIFICATE—–
(contenu du fichier ca.key)
—–END CERTIFICATE—–
Puis le certificat client avec la balise , puis la clé avec la balise , le fichier Diffie Hellman (dh2048.pem) avec la balise , et si vous avez utilisé tls-auth utiliser les signatures HMAC des packets, la balise permet d’intégrer la clé ta.key.
Normalement le fichier ta.key s’intègre avec un ligne comme ceci dans la config :
tls-auth ta.key 0
avec 0 sur le serveur et 1 sur les clients. Sauf que quand on utilise la balise pour intégrer le certificat, on ne peut pas indiquer de paramètres. Donc, il est possible de le faire en utilisant la balise séparée « key-direction 0 » sur le serveur et « key-direction 1 » sur les clients.
Une fois intégré toutes les clés et certificat, sa ne fait qu’un seul fichier a transférer sur les clients, ce qui est particulièrement pratique pour les périphériques mobiles comme les téléphones et tablettes Android.
A noter que sa fonctionne aussi coté serveur, ce qui peux être pratique pour éviter d’avoir beaucoup de fichiers, surtout dans les configuration un peu complexe ou vous avez plusieurs autorité de certification, une machine faisant office a la fois de client et de serveur, etc, sa permet de garder tout ça organisé en évitant d’avoir une multitude de fichiers différents.
Tout ce qui ressemble a une balise à été supprimé de mon commentaire… du coups, on ne vois pas ce que j’explique sur la façon d’intégrer les fichiers certificats et clé dans le fichier de configuration.
Pour intégrer le certificat, il faut donc utiliser :
signe inférieur à, « ca », signe supérieur à, suivie du contenu du fichier, puis signe inférieur à, « /ca », signe supérieur à.
Les balises a utiliser sont donc : ca, cert, key, dh, tls-auth.
La balise tls-auth est un cas particulier dans le sens où il faut compléter l’entrée par key-direction 0 ou 1 pour indiquer si on est coté serveur (0) ou client (1).
Merci pour ce tuto. Je souhaiterai automatiser la génération des certif dès la réception d’un mail d’un utilisateur, comment pourrais-je procéder stp ?
Alex tu peux m’aider stp?
salut les gars svp comment on fait pour se connecter avec openvpn connecter j’ai l’application mais je sais pas quoi faire.
Cool, merci pour le tuto c’est exactement ce qu’il me manquait.
Maintenant va falloir que je trouve un moyen de résoudre les DNS leaks.. :( casse-pieds ce truc.
[…] Compléments de configurations du même OpenVPN : http://denisrosenkranz.com/… […]