SERVEUR OPENVPN

SERVEUR OPENVPN

Matériels indispensables

  • une machine Debian 9 pour le serveur VPN
  • une machine cliente Debian 9
  • une machine cliente Windows
  • prévoir Wireshark sur les machines clientes et sur le serveur afin de faire des captures de trames

Installations des paquet sur le serveur VPN et sur le client Debian

"apt-get install openssl"
"apt-get install openvpn"

Construction d’un tunnel

Afin de faire de voir comment une connexion VPN est initiée, nous allons tout d’abord utiliser les commandes suivantes au niveau du serveur et du client.

Ouvrir le terminal en tant que root et 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’adresse IP du serveur VPN.

Test

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

NB: les machines sont dans le VLAN 10

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

Création de certificat avec Openssl

pour crée 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/opensvpn/conffiles
  • /apps/easy-rsa

Ex: mkdir -p /apps/esy-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 exportons les variables créées en appliquant ces valeurs à l’aide de la commande: « source vars » ( commande à taper en étant dans le répertoire /apps/easy-rsa )

Créer 3 groupes 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é

Créer un certificat d’autorité de certification et avec sa clé à l’aide du script « ./build-ca« . Le certificat sera enregistré dans un fichier nommé « ca.crt » 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 le fichier nommé « server.crt » et le la clé dans un fichier nommé « server.key« , tous deux dans le dossier /apps/easy-rsa/:

Exécuté le script « ./build-key-server srv-vpn » (srv-vpn étant le nom du serveur VPN ).

NB: lancer à chaque fois le script « source vars » pour charger le fichier où se trouve les scripts.

Pendant la configuration 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 vient.

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 » qui se trouve dans le dossier /apps/easy-rsa.

Exécutez le script ./bulid-db

Récapitulatif des fichiers crées

Mise en place du tunnel OpenVPN

Configuration du serveur VPN

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

bous 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/keyx/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

#règle permettant une persistance de connexion et du cryptage et déterminant la durée de cette persistance

keepalive 10 120
pesrsist-key
persist-tun

# tls-auth ta.key 0   # à décommenter si on souhate 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   # algorithme de cryptage identique sur le client

# règles et lieu d’écriture des logs

status openvpn-status.log 
log /apps/openvpn/log/openvpn.log
log /apps/openvpn/log/openvpn.log
verb   # 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/openvpn/openvpn.log » pour voir les logs, nous devons avoir une « Initialization Sequence Completed » dans les logs.

Configuration du client Linux

Au niveau du client, 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 générés au niveau du serveur dans le répertoire  /apps/openvpn/keys du client ( Si le client est une machine Linux). Pour cela on va utiliser la commande « scp CheminFichieràEnvoyer utilisateur@IPClient:/ » pour le copier dans le répertoire personnel ensuite dans le bon  répertoire.

Ensuite 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 fichier comme suit:

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

Test

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

Sur le client lancer la commande suivante: « openvpn client.conf« , nous observons bine « Initialization sequence Completed« 

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

Préparation du serveur VPN

Nous allons placer notre client dans le Vlan du Greta qui est le vlan 70 (considéré comme le WAN)

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 rédiriger 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 (Pfense)

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« 

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 joindre 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« côté serveur et « openvpn client.conf » côté client.

Nous pouvons voir au niveau du serveur que pour aller sur 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

admin7498

Laissez votre message