Créer un réseau privé virtuel (VPN) avec OpenVPN

Critères requis :

OpenVPN est un logiciel libre permettant de créer un réseau privé virtuel (VPN).
Cela permet basiquement d'encrypter le trafic entre deux hôtes distants.

Ce tutoriel est basé sur Ubuntu 14.04

Installation

Sur le serveur et les clients Linux

apt-get install openvpn easy-rsa

Sur un client Windows

Vous pouvez télécharger la version qui correspond à votre ordinateur directement via ce lien : https://openvpn.net/index.php/open-source/downloads.html

Si votre PC est récent, cette version est généralement celle qu'il vous faut : Installer (64-bit), Windows Vista and later

Côté Serveur

Génération des fichiers

On commence par copier les exemples de configuration :

cp -R /usr/share/easy-rsa/ /etc/openvpn/easy-rsa/

Puis, on se rend dans le dossier pour éditer les fichiers concernés :

cd /etc/openvpn/easy-rsa/
nano 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"

# X509 Subject Field
export KEY_NAME="EasyRSA"

Modifiez ces lignes en fonction de vos besoins, puis, enregistrez & fermez nano.

Nous allons maintenant générer les fichiers nécessaire au fonctionnement de notre serveur et de notre client :

source ./vars
./clean-all
./build-dh
./pkitool --initca
./pkitool --server server
./build-key client1

La dernière ligne avec “client1” est à répéter autant de fois qu'il y aura de clients connectés au VPN.

Nous générons la clé pour le TLS-Auth :

openvpn --genkey --secret keys/ta.key

Et on copie les fichiers dans le dossier racine d'OpenVPN :

cd keys/ && cp ca.crt dh2048.pem server.crt server.key ta.key ../../

Configuration

Nous commençons par éditer le fichier de configuration serveur :

nano /etc/openvpn/server.conf
port 1194
proto udp
dev tun
topology subnet
ca ca.crt
cert server.crt
key server.key # A ne pas diffuser
dh dh2048.pem
server 172.31.42.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
ifconfig-pool-persist ipp.txt
client-to-client
keepalive 10 120
tls-auth ta.key 0 # A ne pas diffuser
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

Et nous redémarrons le serveur OpenVPN : sudo service openvpn restart

Maintenant nous allons nous attaquer à la configuration du pare-feu.
En effet, en l'état, nous attribuons une IP d'un réseau privé à notre client.
Il faudra donc autoriser cette IP à naviguer sur le NET depuis le serveur.

Commencez par ajouter ou décommenter la ligne suivante dans le fichier /etc/sysctl.conf :

net.ipv4.ip_forward = 1

Puis nous prenons en compte les modifications : sysctl -p

Nous allons maintenant installer le paquet iptables-persistent pour charger les règles à chaque démarrage.

apt-get install iptables-persistent

Il vous demandera si vous souhaitez enregistrer les règles existantes. À vous de voir si vous en avez déjà de mises en place, et, le cas échéant, de les sauvegarder.

Et maintenant, nous mettons en place les règles :

nano /etc/iptables/rules.v4
# Règles de Translation d'adresses
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -s 172.31.42.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 172.31.42.2/24 -o eth0 -j MASQUERADE

COMMIT

# Règles de filtrage
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A FORWARD -i tun0 -o eth0 -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT
-A FORWARD -o tun0 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT

COMMIT

Redémarrez maintenant le daemon pour recharger les règles : sudo service iptables-persistent restart

Ces règles sont très basiques. Elles sont bien évidemment à adapter en fonction de vos besoins.

Côté client

Il vous faut maintenant récupérer les fichiers sur votre poste client. Avec SCP par exemple. Les fichiers concernés sont :

  • ca.crt
  • clientX.crt
  • clientX.key
  • ta.key

En adaptant bien évidemment les noms de fichiers, en remplaçant “X” par le numéro du client.

Nous éditons le fichier de configuration Client : nano /etc/openvpn/client.conf

client
dev tun
proto udp
remote ip.du.ser.veur
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key # A ne pas diffuser
ns-cert-type server
tls-auth ta.key 1 # A ne pas diffuser
comp-lzo
verb 3

N'oubliez pas de personnaliser la configuration avec l'adresse IP de votre serveur.


Vous avez maintenant une configuration OpenVPN fonctionnelle.