OPENVPN – Installation et configuration

Installation des paquets suivants sur le serveur et le client:

apt install openssl

apt install openvpn

CONSTRUCTION D’UN TUNNEL

Taper les commandes suivantes

Au niveau du serveur:

openvpn –dev tun0 –verb 5 –ifconfig 10.0.1.1 10.0.1.2

# 10.0.1.1 étant l’adresse IP de l’interface virtuelle du serveur et 10.0.1.2 l’interface virtuelle du client

Au niveau du client:

openvpn –dev tun0 –verb 5 –ifconfig 10.0.1.2 10.0.1.1 –remote 172.16.2.3

# 172.16.2.3 étant l’@IP du serveur vpn

Test

Nous allons par la suite ouvrir un deuxième terminal depuis le client et essayer de pinguer l’interface virtuelle du serveur vpn depuis l’interface eth0, et capturer par la même occasion la trame:

NB : afin de faire des tests nous mettrons au départ les deux machines dans le VLAN 10

Nous ferons de même au niveau de l’interface tun0

CRÉATION DE CERTIFICAT AVEC OPENSSL

Pour créer des certificats, nous allons commencer par construire un tunnel chiffré avec des certificats. Pour cela nous allons mettre en place les certificats de l’autorité de certification du client et du serveur.

Nous commençons par créer les répertoires suivants:

/apps/openvpn/keys

 /apps/openvpn/log

 /apps/openvpn/conffiles

 /apps/easy-rsa

Ex: mkdir -p /app/easy-rsa

Par la suite nous allons copier le répertoire /usr/share/easy-rsa dans le dossier /apps/easy-rsa, à l’aide de la commande suivante: cp -R /usr/share/easy-rsa /apps/easy-rsa

nous allons modifier les variables suivantes dans le fichier /apps/easy-rsa/vars

Par la suite nous allons exporter les variables créées en appliquant ces valeurs à l’aide de la commande: “source vars » (commande à taper en étant dans le répertoire /apps/esy-rsa)

Nous allons par la suite créer 3 groupe de certificat/clés privées: pour l’autorité, le serveur et le client (chaque nouveau client devra en avoir un).

CRÉATION DU CERTIFICAT DE L’AUTORITÉ

Maintenant nous allons créer un certificat d’autorité de certification et avec sa clé privée à l’aide du script “./build-ca“. Le certificat sera enregistré dans un fichier nommé” ca.cr”t et la clé dans un fichier nommé “ca.key”, tous deux dans le dossier /apps/easy-rsa/    

Dans le répertoire /apps/easy-rsa nous lançons le script «. /build-ca“, c’est ce certificat qui validera tous les autres excepté celui du serveur. Nous répondrons aux questions pour lesquelles nous n’avons pas donné les valeurs par défauts.

GÉNÉRER DES CERTIFICATS

  • Pour le serveur OpenVPN

Comme nous avons vu plus haut, le serveur aura son propre certificat, signé par la CA que nous venons de créer. Pour cela nous allons utiliser le script build-key-server. Le certificat sera enregistré dans un fichier nommé “server.crt” et la clé dans un fichier nommé” server.key“, tous deux dans le dossier /apps/easy-rsa/:

Exécuter le script ./build-key-server srv-vpn (lancer à chaque fois le script source vars pour charger le fichier où se trouve les scripts)

Nous allons laisser les valeurs par défauts aux paramètres qui nous sont demandés ( paramètres qui ont été modifiés au départ dans le fichier /apps/easy-rsa/vars)

Pour le client

Pour générer le certificat du client, nous utiliserons le script build-key. Le certificat sera enregistré dans un fichier, du nom de votre choix, en .crt et la clé dans un fichier, du nom de votre choix, en .key, tous deux dans le dossier /apps/easy-rsa/.  Le certificat et la clé doivent être uniques pour chaque client.

Exécutez le script ./build-key Deb-client

CRÉATION DE LA CLÉ DE SESSION DE DIFFIE-HELLMAN

Diffie-Hellman: est un protocole de cryptographie utilisé dans les échanges de clés. Cette clé sera utilisée par le serveur et le client pour communiquer en utilisant la cryptographie symétrique. Nous allons utiliser le script build-db prévu à cet effet, qui va générer une clé de chiffrement de 2048 bits dans le fichier dh2048.pem  dans le dossier /apps/easy-rsa.

Exécutez le script ./build-db :

RÉCAPITULATIF DES FICHIERS CRÉÉS

FichierUtile àUtilitéPrivée?
Ca.crtServeur et clientsCertificat du CANon
Ca.keyCAClé privée du CAOui
dh2048.pemServeurClé de chiffrement  symétriqueNon
Server.crtServeurCertificat serveurNon
Server.keyServeurClé privée du serveurOui
Client.crtClientCertificat du clientNon
Client.keyClientClé privée du clientoui

MISE EN PLACE DU TUNNEL OPENVPN

  • Configuration du serveur vpn

Afin de démarrer une instance de serveur VPN, le service openvpn vient chercher dans le répertoire /etc/openvpn un fichier nommé “server.conf” qui lui permettra de savoir avec quelles options lancer le tunnel.

Nous allons commencer par créer ce fichier dans le répertoire “/apps/openvpn/conffiles

Après la création nous allons configurer le fichier comme suit:

proto udp

dev tun

ca /apps/openvpn/keys/ca.crt

cert /apps/openvpn/keys/srv-vpn.crt

key /apps/openvpn/keys/srv-vpn.key

dh /apps/openvpn/dh2048.pem

server 192.168.0.0 255.255.255.0

client-to-client   #permet aux clients de se voir entre eux

keepalive 10 120 #règle permettant une persistance de connexion et du cryptage et                        

déterminant la durée de cette persistance

persist-key

persist-tun

#tls-auth ta.key 0 #A décommenter si on souhaite n’autoriser les demandes de                        connexions qu’au possesseur d’une clé de cryptage spécifique. ceci augmente la sécurité et prévient les attaques Dos

cipher AES-128-CBC #algo de cryptage identique sur le client

status openvpn-status.log #règles et lieu d’écriture des logs

log   /apps/openvpn/log/openvpn.log

log-append  /apps/openvpn/log/openvpn.log

verb 5 #mode verbeux pour l’écriture des logs

Afin de tester la bonne configuration de ce fichier nous allons ouvrir 2 terminaux et lancer les commandes suivantes:

openvpn server.conf

tail -f /apps/opnvpn/log/openvpn.log” pour voir les logs, nous devons avoir une “Initailization Sequence Completed” dans les log.

  • Configuration du client

Au niveau du client nous allons créer les mêmes répertoires que sur le serveur du moins celui-ci /apps/openvpn/keys

Nous allons transférer les certificats et les clés privées clients dans /apps/openvpn/keys si le client est une machine linux:

Pour cela j’ai utilisé la commande “scp CheminFichieràEnvoyer utilisateur@IPClient:~/ pour le copier dans mon répertoire personnel.

Par la suite je l’ai copié dans le répertoire/apps/openvpn/keys

Dans le répertoire“/etc/openvpn” nous allons créer le fichier“client.conf

touch client.conf

Après la création du fichier le configurer comme suit:

Nous allons par la suite copier ce fichier dans le répertoire /apps/openvpn/conffiles/

Test

Nous allons redémarrer notre serveur avec la commande “openvpn server.conf

Et sur le client lancer la commande suivante: openvpn client.conf” et nous observons bien “Initialization Sequence Complete

Si nous lançons un ping de l’interface virtuelle du server, nous pouvons voir que le client communique bien avec le server.

MISE EN ROUTE VIA LE PARE-FEU

  • Préparation de serveur VPN

Nous allons placer notre client dans le vlan du Greta qui est le vlan 70

Afin que le client se trouvant dans le WAN puisse avoir accès au réseau interne, le serveur doit posséder la route lui indiquant de rediriger les requêtes vers le réseau concerné. Nous ajoutons les routes (à la fin du fichier) vers notre réseau de destination de la manière suivante      dans le fichier /apps/openvpn/conffiles/server.conf:

push “route 172.16.2.0 255.255.255.0”

push “route 172.19.0.0 255.255.255.128”

LIAISON VPN AVEC LE CLIENT EXTÉRIEUR À NOTRE RÉSEAU

Dans le fichier de configuration du client qui se trouve coté WAN de notre pare-feu, nous allons modifier la configuration comme suit:

Dans ce fichier nous indiquons l’adresse IP du pare-feu côté WAN avec le port associé

CONFIGURATION DU PARE-FEU (PFSENSE)

  • Nating et filtrage

Afin d’activer le routage sur notre serveur VPN, nous éditons le fichier « /etc/sysctl.conf » et nous dé-commettons la ligne suivante : « net. ipv4.ip_forward=1 »

Nous allons créer une règle au niveau du pare-feu, afin que le client soit redirigé vers notre VPN lorsqu’il fait une demande sur le port « 1194 ».

Pour cela aller dans le menu Pare-feu/Nat et remplir les champs comme suit:

NB: ne pas oublier de décocher les cases ci dessous au niveau du pare-feu dans le menu INTERFACE >WAN

car de base l’interface WAN bloque le trafic des adresses IP qui sont réservés au réseaux privées et les boucles locales

CONFIGURATION AU NIVEAU DU ROUTEUR

Il faut renseigner au niveau du routeur, le chemin pour rejoindre notre réseau virtuel avec la commande suivante :

« ip route 192.168.0.0 255.255.255.0 172.16.2.3 »

Test

Nous redémarrons le service Openvpn sur le serveur et le client, puis nous initions une connexion entre les 2 à l’aide des commandes : « openvpn server.conf » coté serveur et « openvpn client.conf » coté client.

Nous pouvons voir au niveau du serveur que pour aller dans les réseaux DATA et Wifi, le client se trouvant dans le WAN va emprunter le réseau virtuel 192.168.0.0 via le 192.168.0.5.

Si nous lançons un ping depuis notre client se trouvant dans le réseau du Greta vers notre réseau LAN, on peut apercevoir qu’il communique bien avec notre réseau DATA.

Leave a Reply