Configurer un serveur OpenVPN

Tu as lu le billet sur la sécurité VPN ? tu veux pouvoir te connecter à ton réseau distant en toute sécurité ? Tu es curieux ? Tu as du temps à perdre ?

Tu es donc au bon endroit ! Fais toi un café, installe toi confortablement et amuse toi bien !

La configuration a été faite sur Debian 8.8, la configuration peut-être différente selon la version de debian ou le système d’exploitation (Red Hat, ArchLinux)

Configuration Serveur

Rappelons qu’il existe deux modes de fonctionnement, le « routé » et le « bridgé »

Routé => Connecter un appareil à un réseau distant
Bridgé => Relier deux sous-réseaux entre eux

Nous utiliserons le mode Routé pour se connecter à un réseau distant sécurisé

Installer les paquets nécessaires

apt-get update && apt-get install openvpn 

Copier les fichiers de configurations

mkdir /etc/openvpn/easy-rsa/ 
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Éditez le fichier vars, Modifiez les lignes suivantes

$vi /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"

Il s’agit des informations contenus dans le certificat, modifiez les selon vos préférences

On génère les certificats (.crt) et les clés (.key)

cd /etc/openvpn/easy-rsa
source vars
./clean-all
./build-dh
./pkitool --initca
./pkitool --server *server.my.domain*
openvpn --genkey --secret keys/ta.key

server.my.domain : Le nom DNS de votre serveur

les clefs et certificats sont présentes dans présentes dans /etc/openvpn/easy-rsa/keys

Copier les fichiers .crt .key .pem dans /etc/openvpn

cd /etc/openvpn/easy-rsa/keys
cp -a *.crt /etc/openvpn
cp -a *.key /etc/openvpn
cp -a *.pem /etc/openvpn

La création des certificats serveurs est terminée

Vous pouvez chrooter le processus Openvpn pour éviter les dégâts en cas de failles. D’un point de vue sécurité, l’utilisateur sera comme « enfermés » dans ce répertoire et ne pourra en théorie pas en sortir.

mkdir /etc/openvpn/jail
mkdir /etc/openvpn/jail/tmp

Créer le fichier de configuration principale du serveur

$vi /etc/openvpn/server.conf

#Conf Server
mode server 
dev tun 
proto udp
port 1194

#Clef & Certificats
ca ca.crt 
cert server.my.domain.crt
key server.my.domain.key
dh dh2048.pem
tls-auth ta.key 0 
cipher AES-256-CBC

#Reseau 
server 172.16.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp" 
push "dhcp-option DNS 8.8.8.8" 
push "dhcp-option DNS 8.8.4.4" 
keepalive 10 120

#Securite 
user nobody 
group nogroup 
chroot /etc/openvpn/jail 
persist-key
persist-tun 
comp-lzo

# Log 
verb 3 
mute 20 
status /var/log/openvpn-status.log  
log-append /var/log/openvpn.log

Ce fichier est à adapter selon votre configuration

server.my.domain.crt : fichier certificat du serveur
server.my.domain.key : fichier clef du serveur
172.16.0.0 255.255.255.0 : sous-réseau du VPN

Tester la configuration

openvpn server.conf

Si il n’y a pas d’erreur, redémarrez

reboot

Il faut maintenant router le sous-réseau VPN entre les interfaces pour que le serveur joue le rôle de routeur entre tun0 et l’interface physique (eth0 pour ma part)

Autoriser le forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward

Activer la configuration au redémarrage

sysctl -w net.ipv4.ip_forward=1

Ouvrir le NAT entre les interfaces

iptables -t nat -A POSTROUTING -s reseauVPN/Masque -o eth0 -j MASQUERADE

Rendre la configuration active au redémarrage

iptables-save > /etc/iptables.rules

Configuration client

Créer la clef pour l’utilisateur

cd /etc/openvpn/easy-rsa
source vars
./build-key K-lfa

Utilisez l’option – -pass pour chiffrer la clef privée

./build-key –-pass K-lfa

Le script a généré trois fichiers dans /etc/openvpn/easy-rsa/keys/ :
· K-lfa.crt : certificat pour le client
· K-fa.key : clé pour le client
· K-lfa.csr : certificat à garder sur le serveur

Déplacer les fichiers dans le dossier de configuration client

mkdir /etc/openvpn/clientconf/
mkdir /etc/openvpn/clientconf/K-lfa
cp /etc/openvpn/ca.crt /etc/openvpn/clientconf/K-lfa
cp /etc/openvpn/ta.key /etc/openvpn/clientconf/K-lfa
cp /etc/openvpn/easy-rsa/keys/K-lfa.crt /etc/openvpn/clientconf/K-lfa
cp /etc/openvpn/easu-rsa/keys/K-lfa.key /etc/openvpn/clientconf/K-lfa

Créer le fichier de configuration client

$vi /etc/openvpn/clientconf/K-lfa/client.conf

#Client
client
dev tun
proto udp
remote Adresse 88.44.22.11:1194 #Votre IPpublique:Port
resolv-retry infinite
cipher AES-256-CBC

# Clefs
ca ca.crt
cert K-lfa.crt
key K-lfa.key
tls-auth ta.key 1

#Securite
nobind
persist-key
persist-tun
comp-lzo
verb 3

Créer le fichier pour la compatibilité client Windows

cp /etc/openvpn/clientconf/K-lfa/client.conf /etc/openvpn/clientconf/K-lfa/client.ovpn

Si vous passez par un proxy, il suffit d’ajouter cette ligne au client.conf

http-proxy adresse_ip_proxy port_proxy passwd.txt basic

passwd.txt (à ajouter dans le dossier contenant client.conf sur le client) contient en première ligne le login de connexion au proxy et en deuxième ligne le mot de passe

Quelques commandes utiles :

openvpn --show-ciphers : Afficher les algorithmes de chiffrement disponibles
openvpn --show-digest : Afficher les algorithmes de hashage de disponibles
openvpn --show-tls : Afficher l’état du chiffrement
openvpn --test-crypto : Lancer un test de crypto (A utiliser pour le debugging)
openvpn --show-gateway : Afficher les infos de la passerelle par défault