Skip to content

OpenVPN

Installation

Prérequis

  • Serveur Linux (debian ou ubuntu)
  • IP public

machine utilisé : Instance sous AWS / ubuntu 16

Paquets

sudo apt update && sudo apt install openvpn easy-rsa

Création des clés serveur

Création d'un dossier pour les clés

sudo mkdir /etc/openvpn/keys

Copy du dossier easy-rsa dans /etc/openvpn

sudo cp -r /usr/share/easy-rsa/ /etc/openvpn

On donne les droits sur easy-rsa

sudo chown -R $USER /etc/openvpn/easy-rsa/

Configuration server

modification des variables pour la création des certificats

editer /etc/openvpn/easy-rsa/vars

#exemple
...
export KEY_COUNTRY="FR"
export KEY_PROVINCE="FR"
export KEY_CITY="FONTAINEBLEAU"
export KEY_ORG="LPASSR"
export KEY_EMAIL="anas.asmi@me.com"
export KEY_OU="195858"
...

Création des .key et .crt

dans /etc/openvpn/easy-rsa/

source vars
./clean-all
./build-dh
./pkitool --initca
./pkitool --server server
openvpn --genkey --secret keys/ta.key

Copie des clés et certs dans le dossier keys

sudo cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh2048.pem /etc/openvpn/keys

Création du dossier client

dossier clientconf pour stocker les config des clients

sudo mkdir /etc/openvpn/clientconf

Configuration du server

Création d'un fichier server.conf

sudo vim /etc/openvpn/server.conf

# Serveur TCP/443
mode server 
proto tcp
port 443
dev tun 

# Clés et certificats
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh2048.pem
tls-auth keys/ta.key 0
cipher AES-256-CBC

# Réseau
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 172.31.0.2"
#push "dhcp-option DNS 8.8.4.4"
keepalive 10 120

# Sécurite
user nobody
group nogroup
persist-key
persist-tun
comp-lzo

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

Création des règles iptables (nat)

Autorise le routage

sudo vim /etc/sysctl.conf
...
net.ipv4.ip_forward = 1
...

Configuration du NAT

#ajouter cette ligne dans iptables ou fichier interfaces
...
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
...

Démarrage du server

sudo systemctl start openvpn@server

Démarrage au boot

sudo systemctl enable openvpn@server.service

Configuration client

Génération des clés

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

Note

Si vous souhaitez protéger l'accès à vos clés par un mot de passe (c'est à dire qu'un mot de passe sera demandé à la montée du tunnel VPN), il faut utiliser la commande **./build-key-pass**en lieu et place de ./buil-key.

copie des des 3 fichier générés (crt csr key)

#création d'un dossier pour l'utilisateur en question
sudo mkdir /etc/openvpn/clientconf/client1/
#copie des certificats ()
/etc/openvpn/easy-rsa$ sudo cp /etc/openvpn/keys/ca.crt /etc/openvpn/keys/ta.key keys/client1.crt keys/client1.key /etc/openvpn/clientconf/client1/

Création du fichier client.conf

sudo vim /etc/openvpn/clientconf/client1/client.conf
# Client
#on signale que c'est une configuration cliente
client
#type d'interface virtuelle qui sera créée
dev tun
#protocole de communication
#tcp pour lié au port 443 et reduction d'erreur mais plus gourmant en bande passante
#et en cpu
proto tcp-client
#IP publique qui redirige vers notre serveur vpn et le port d'écoute du serveur VPN
#nous utilisons le port 443 afin de passer le maximum de pare-feu
remote "ip publique" 443 
#retry de connexion infinie
resolv-retry infinite
#type d'encryptage des données (algorithme de chiffrement/déchiffrement)
cipher AES-256-CBC

# Clés
#master CA
ca ca.crt
#certificat client
cert client1.crt
#clé privée du client
key client1.key
#Clé HMAC
tls-auth ta.key 1

#vérifier les certificats server pour éviter les "man-in-the-middle's attack"
remote-cert-tls server

# Sécurite
nobind
#connexion persistante
persist-key
persist-tun
#activation de la compression
comp-lzo
#niveau de verbosité (1 à 9)
verb 3

Warning

Pour les clients Windows OpenVPN, copier le client.conf en client.ovpn

Création d'une tarball client

/etc/openvpn/clientconf/client1$ sudo tar czfv client.tar.gz *

test de la connexion (linux)

  • installation du client
apt install openvpn
  • copie des fichier de conf et cert clients & untar
sudo cp client.tar.gz /etc/openvpn/client
sudo tar xvzf client.tar.gz
  • lancement de la connexion
sudo openvpn --config /etc/openvpn/client

Note

Sur AWS il faut créer une règle de flux via le groupe de sécurité configuré sur l'instance en question, dans notre cas il faut autorisé le flux entrant (https) 443.

  • résultat si cela fonctionne:
...
Sat Mar 24 11:04:19 2018 /sbin/ip route add "ip publique"/32 via "passerelle"
Sat Mar 24 11:04:19 2018 /sbin/ip route add 0.0.0.0/1 via 10.8.0.5
Sat Mar 24 11:04:19 2018 /sbin/ip route add 128.0.0.0/1 via 10.8.0.5
Sat Mar 24 11:04:19 2018 /sbin/ip route add 10.8.0.1/32 via 10.8.0.5
Sat Mar 24 11:04:19 2018 Initialization Sequence Completed

Configuration du NAT

remote-cert-tls serverAutorisation du forward sur la VM

dans /etc/sysctl.conf on décommente

net.ipv4.ip_forward = 1

Règle de NAT

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Rendre la règle persistante

  • installation de iptables-persistent
sudo apt install iptables-persistent
  • Save des rules
sudo iptables-save
  • check
sudo iptables -t nat -L -v

#result        
...
Chain POSTROUTING (policy ACCEPT 6 packets, 491 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  any    eth0    ip-10-8-0-0.us-west-2.compute.internal/24  anywhere

Commentaires