Installation et configuration d’un serveur OpenVPN sur UBUNTU (partie 1/2)

On va faire l’installation et configuration d’OpenVPN sur le serveur Ubuntu 16.04 en 2 étapes.

Dans le premier étape on va installer et configurer OpenVPN serveur, créer 1 client en utilisant un script et utiliser le première client pour se connecter à VPN sur l’ordinateur avec Windows.

Dans le deuxième étape on va créer le deuxième et le troisième clients manuellement. Le deuxième client on va utiliser pour connecter téléphone portable a la réseau VPN et le troisième client on va utiliser pour connecter l’ordinateur avec Linux dans le réseau VPN en utilisant linge de commande. Après, parce que les 2 ordinateurs (Windows et Linux) vont être dans le même réseau virtuel on va utiliser l’ordinateur Windows pour accéder à l’ordinateur Linux en ssh.

Aujourd’hui je vais faire le première étape.

Tout d’abord, je vais installer le serveur OpenVPN sur VPS avec 1 GB RAM, 1 CPU et 10 GB HDD et seulement 10 Mbit réseau qui coûte juste 1$ par mois. Je vais créer 3 utilisateur VPN. Parce que c’est seulement projet pour test, je vais faire login comme root.

L’installation des logiciels :

Il faut installer:

  • openvpn
  • openssl
  • easy-rsa iptables
  • bash-completion

Il faut exécuter la commande suivante:

apt-get install openvpn openssl easy-rsa iptables bash-completion -y

Préparation des  variables pour génération des clés:

Premièrement il faut configurer CA Directory: créer ~/openvpn-ca et copier easy-rsa dans ce dossier en utilisant:

make-cadir ~/openvpn-ca

Après on va aller dans ce dossier:

cd ~/openvpn-ca

On va verifier le contenu ~/openvpn-ca

ls -l

 

On commence la rédaction du fichier vars. Il faut ouvrir vars:

vim vars

On va remplir les champs suivants:

 

Génération des certificats et clés du serveur:

Après il faut exécuter:

source vars

Et puis il faut supprimer tous les anciens certificats:

./clean-all

On va commencer a crée les nouveaux certificats. Premièrement on va creer build-ca:

./build-ca

Il faut confirmer tout, parce que toutes les infos on a déjà écrit dans le vars.

Après on va créer key-server:

./build-key-server server

Générez un certificat client et une paire de clés (toujours no password):

./build-key client1
./build-key client2
./build-key client3

Pour generer keys il faut exécuter:

./build-dh

Le serveur a également besoin d’un fichier de paramètres DH. Cela peut être créé en utilisant OpenSSL:

openssl dhparam -out dh2048.pem 2048

Configurez le service OpenVPN.

Il faut copier les fichiers dans /etc/openvpn en exécutant:

cd ~/openvpn-ca/keys

cp ca.crt server.crt server.key ta.key dh2048.pem /etc/openvpn
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Configurer la configuration OpenVPN

On va ouvrir server.conf:

vim /etc/openvpn/server.conf

Il faut supprimer  “;” pour activer la ligne tls-auth:

tls-auth ta.key 0
cipher AES-128-CBC
user nobody
group nogroup

Sous “cipher AES-128-CBC” il faut ajouter:

auth SHA256

 

Aussi il faut supprimer “;” pour décommenter la ligne:

push “redirect-gateway def1 bypass-dhcp”

il faut supprimer “;” pour décommenter les lignes:

push “dhcp-option DNS 208.67.222.222”
push “dhcp-option DNS 208.67.220.220”

Vous pouvez le modifier et utiliser CloudFlare (1.1.1.1), Google (8.8.8.8) ou tout autre serveur DNS de votre choix.

Configurer la réseau de votre serveur OpenVPN

Premièrement, on va configurer le transfert IP en redaction:

vim /etc/sysctl.conf

Il faut activer: net.ipv4.ip_forward=1

Pour appliquer le changement il faut exécuter:

sudo sysctl -p

Pour activer forwarding il faut exécuter:

echo 1 » /proc/sys/net/ipv4/conf/all/forwarding

Configurer les règles UFW pour masquer les connexions client

Premièrement, on va vérifier la carte réseau de notre serveur:

ip route | grep default

On va ouvrir before.rules:

vim /etc/ufw/before.rules

Et on va ajouter les lignes suivantes:

# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to ens3 -A POSTROUTING -s 10.8.0.0/24 -o ens3 -j MASQUERADE COMMIT # END OPENVPN RULES

Pour changer les règles Firewall il faut corriger: /etc/default/ufw

vim /etc/default/ufw

Il faut changer:

DEFAULT_FORWARD_POLICY=”DROP” to
DEFAULT_FORWARD_POLICY=”ACCEPT”

On va ouvrir les ports 1194/udp et OpenSSH (je vais utiliser le port par défaut)

ufw allow 1194/udp && ufw allow OpenSSH

Pour appliquer les changement il faut redémarrer FW:

ufw disable && ufw enable

Pour verifier le status de firewall il faut exécuter:

ufw status

Pour verifier NAT il faut exécuter:

iptables -L -t nat

Activer le service OpenVPN

Si la vérification passe bien on va démarrer openVPN en exécutant:

systemctl start openvpn@server

Pour vérifier s’il démarre bien il faut exécuter:

systemctl status openvpn@server

 

Pour vérification disponibilité de tun0 dans l’interface OpenVPN il faut faire:

 ip addr show tun0

 

Si OpenVPN ne marche pas, essayez de faire restart d’OpenVPN ou faire restart du serveur au complet.

service openvpn restart

S’il y a le problème il faut regarder le log:

tail -f /var/log/syslog

Si tout fonctionne bien, passe à l’étape suivante 🙂

Créer une configuration de client

Premièrement on va créer un dossier ccd/files pour clients:

mkdir -p ~/ccd/files

Apres on va changer permissions:

chmod 700 ~/ccd/files

Il faut copier example file dans dossier de client:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/ccd/base.conf

 

Après on va changer base.conf en exécutant:

vim ~/ccd/base.conf

Il faut taper IP publique de votre serveur et port (comme pendant configuration serveur):

On utilise protocol UDP. Pour activer ce protocol il faut supprimer “;”:

Pour le client Windows on active user nobody et group nogroup (il faut supprimer “;”), mais si vous utiliser comme client OpenVPN Linux, il faut laisser cela inactive:

 

Il faut désactiver prochaines lignes (ajouter “;”):

Aussi on va ajouter les lignes prochaines:

Aussi il faut ajouter la key-direction 1 (parce que c’est un client, pour serveur on a utilisé 0):

Pour faire la configuration du client on peut utiliser un script ou faire un fichier manuellement. Je vais montrer deux possibilités 🙂

Pour la configuration du client avec le script vous devez suivre ces étapes:

1. Création d’un script de génération de configuration.

Vous pouvez soit télécharger ce script d’ici, soit le créer manuellement. Commencer par:

vim ~/ccd/make_config.sh

À l’intérieur, collez le script suivant:

#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/ccd/files
BASE_CONFIG=~/ccd/base.conf
cat ${BASE_CONFIG} \
<(echo -e ‘<ca>’) \
${KEY_DIR}/ca.crt \
<(echo -e ‘</ca>\n<cert>’) \
${KEY_DIR}/${1}.crt \
<(echo -e ‘</cert>\n<key>’) \
./make_config.sh client
<(echo -e ‘</key>\n<tls-auth>’) \
${KEY_DIR}/ta.key \
<(echo -e ‘</tls-auth>’) \
> ${OUTPUT_DIR}/${1}.ovpn

2. Changer la permission du fichier:
chmod 700 ~/ccd/make_config.sh

3. Générer un fichier de configuration client
cd ~/ccd
./make_config.sh client1

On verifie si le fichier est crée:

ls ~/ccd/files

Il faut aussi vérifier ce file, il faut ajouter remote avant l’adresse IP:

Après on copie ce file sur l’ordinateur de client. Sur l’ordinateur avec Windows il faut installer OpenVPN et ajouter nouveau client. Aussi il faut exécuter OpenVPN comme administrateur (“run as admin”). S’il la connection est bloqué, c’est un bonne idée de lire le logfile 🙂

Et voilà, on a connecté. Je mesure la vitesse d’internet avec speedtest. Le ping est grand et vitesse 10 Mbps upload et download, mais c’est correct, parce que le serveur a ses restrictions.

 

Mes sources d’inspiration:

OpenVPN. 2x HOW TO

How To Set Up an OpenVPN Server on Ubuntu 16.04

Setting up your own Certificate Authority (CA)

Generate an OpenVPN profile for client user to import

Mettre en place un client OpenVPN sur Raspberry Pi

VIDEO:

https://www.youtube.com/watch?v=fLJWPLSRwdg

https://www.youtube.com/watch?v=S358miThwdg&t=36s