Pour simplifier la mise en place d’un serveur OpenVPN, un script d’installation est disponible sur github, nommé openvpn-install.
Ce script permet d’installer et configurer votre propre serveur VPN en moins de 5 Minutes en générant un fichier de configuration au format .ovpn utilisable avec le client OpenVPN, sur tous les systèmes d’exploitation GNU/Linux, MacOS X et Windows.
Ce script par défaut permet :
- Pas de logs
- Utilisation uniquement du protocole TLS 1.2
- Chiffrement AES-256-CBC
- 4096 bits DH (instead of 2048 bits)
- Serveurs DNS de FDN
- Mise en place d’une règle iptables pour le routage de l’interface tun0 vers eth0
Script d’installation automatique d’OpenVPN pour Debian, Ubuntu et CentOS
Ce script, je l’ai testé uniquement sur Debian 8.
- Téléchargement du script :
wget --no-check-certificate https://raw.githubusercontent.com/Angristan/OpenVPN-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
./openvpn-install.sh
Ensuite, il suffit de répondre aux questions :
Une fois terminé, le script génère un fichier de configuration au format .ovpn dans le répertoire /root
. Ce fichier est à transférer sur le poste client.
Rendre le script compatible avec Linux Mint 18
- Éditer le script
openvpn-install.sh
:
sudo nano openvpn-install.sh
;then
:&& [["$VERSION_ID" != 'VERSION_ID="18"']]
Configuration du poste client
Par défaut le fichier généré par le serveur est fonctionnel de suite, mais on va lui apporter quelques petites modifications pour forcer l’utilisation des serveurs DNS défini par le serveur OpenVPN et l’ajout de paramètres pour la gestions des logs.
Installation sur le poste client des paquets nécessaire pour se connecter au serveur OpenVPN
Normalement le paquet resolvconf devrait déjà être installé, dans le doute je l’ai ajouté.
- Arch Linux / Manajaro :
sudo pacman install openvpn resolvconf
sudo apt-get- install openvpn resolvconf
yum install openvpn resolvconf
Utiliser les serveurs DNS définit par le serveur
Sur le poste client installer le paquet openvpn-update-resolv-conf :
- Arch Linux / Manjaro :
yaourt -S openvpn-update-resolv-conf
Pour les autres distributions :
wget --no-check https://github.com/masterkorp/openvpn-update-resolv-conf/blob/master/update-resolv-conf.sh
sudo mv update-resolv-conf.sh /etc/openvpn/
C’est grâce à openvpn-update-resolv-conf , qu’il va être possible de forcer l’utilisation des serveurs DNS définit sur le serveur OpenVPN.
Modification du fichier de configuration client.ovpn pour forcer l’utilisation des serveurs DNS
nano client.ovpn
Ajouter ces lignes :
dhcp-option DNS script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
Activation des logs
L’activation des logs n’est pas obligatoire pour le bon fonctionnement d’OpenVPN, mais dans mon cas j’ai activé les logs pour faire du monitoring avec Munin.
Pour activer les logs, modifier comme suit le fichier de configuration sur le serveur OpenVPN :
nano /etc/openvpn/server.conf
Ajouter :
#log verb 3 mute 20 status /var/log/openvpn-status.log log-append /var/log/openvpn.log
Pour la prise en compte de l’ajout, relancer le serveur OpenVPN :
systemctl restart openvpn
Connexion du poste client sur le serveur OpenVPN
Pour se connecter au serveur OpenVPN, saisir la commande :
sudo openvpn client.ovpn
On peut vérifier l’adresse IP de l’interface tun0
:
ip a | grep tun0
6: tun0: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 inet 10.8.0.3/24 brd 10.8.0.255 scope global tun0
Et vérifier aussi le serveur DNS utlisé :
Ajouter une couche de sécurité avec tls-auth
La directive tls-auth ajoute une signature HMAC supplémentaire pour tous les paquets TLS Handshake pour la vérification de l’intégrité. Tout paquet UDP ne portant pas la signature correcte HMAC peut être supprimé sans autre traitement. Cette directive tls-auth
fournit un niveau supplémentaire de sécurité, qui permet de se protéger de :
- DoS attaques ou le port des inondations sur le port UDP OpenVPN.
- Scan de port pour déterminer quels ports UDP sont en écoute.
- Vulnérabilités de débordement du buffers dans la mise en œuvre de TLS.
- Initiations de machines non autorisées lors du TLS handshake .
Pour mettre en œuvre cette directive, il faut générer une clé secrète qui sera partagée entre le serveur et le client.
- Génération de la clé sur le serveur OpenVPN:
cd /etc/openvpn/
openvpn --genkey --secret ta.key
key-direction 0
et le chemin de la clé :key-direction 1
et la clé :openvpn-install.sh
:nano openvpn-install.sh
Aller à la ligne 41 et modifier comme suit :
systemd restart openvpn
Merci pour les règles iptables :)
PS : j’ai changé le nom du git ^^ les commandes fonctionnent toujours mais on sait jamais
ok, merci pour l’info j’ai mis à jour l’url :-)
« un script a été développé et mis à disposition sur github par Angristan. »
N’aurait-il pas été plus juste de dire » Ce script est un Fork de l’Url https://github.com/Nyr/openvpn-install adapté/modifé par Angristan » ?
Un peu gros tout de même :/
@kero Tout à fait d’accord
Bonjour,
J’ai le problème suivant, sans doute à cause du proxy de l’entreprise :
TLS Error: TLS key negotiation failed
Comment régler le problème svp ?
Merci d’avance ! :)
SI tu es derrière un proxy entreprise, il faut changer le port d’écoute en 443
Je passe par le port 110, ça me fait pareil sur le port 443 :
illoxx@illoxx-PC:~$ sudo openvpn .vpnconnect
Sun Mar 13 22:56:33 2016 OpenVPN 2.3.2 i686-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [eurephia] [MH] [IPv6] built on Dec 1 2014
Sun Mar 13 22:56:33 2016 UDPv4 link local: [undef]
Sun Mar 13 22:56:33 2016 UDPv4 link remote: [AF_INET]ip:443
Sun Mar 13 22:57:33 2016 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Sun Mar 13 22:57:33 2016 TLS Error: TLS handshake failed
Sun Mar 13 22:57:33 2016 SIGUSR1[soft,tls-error] received, process restarting
Sun Mar 13 22:57:35 2016 UDPv4 link local: [undef]
Sun Mar 13 22:57:35 2016 UDPv4 link remote: [AF_INET]ip:443
^CSun Mar 13 22:57:37 2016 event_wait : Interrupted system call (code=4)
Sun Mar 13 22:57:37 2016 SIGINT[hard,] received, process exiting
illoxx@illoxx-PC:~$
Faut s’assurer que le port 443 soit ouvert sur le serveur OpenVPN…
Oui oui, justement, le port 443 était configuré et ouvert :)
Re-Salut !
Je crois que tu t’es un peu emmêle du coup je précise :
tls-cipher concerne le chiffrement du tunnel
cipher et auth concernent juste HMAC.
Concernant Blowfish, il est encore viable étant donné qu’il n’a pas été cassé. Mais AES c’est mieux :D
Merci Angristan pour tes explications !
Bonjour j’utilise linux mint 18 sarah et je n’arrive pas à installé ce script sa me dit not supported, quelqu’un peut m’aider svp.
Salut patoche,
j’ai mis à jour l’article en expliquant comment rendre compatible le script avec Linux Mint 18 :-)
bonjour
j’ai server .ovpn mais pas client.ovpn
sudo openvpn client.ovpn me donne :
Options error: Unrecognized option or missing or extra parameter(s) in client.ovpn:1: dhcp-option (2.4.4)
Use –help for more information.
comment faire?