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