LAMP : 4ème Etape - SSH, VPN [DEBIAN]

DEBIANLINUXSSHVPNCERTIFICATSCLIENT WINDOWS

OPENSSH Server Installation

Il faut pouvoir se connecter en mode sécurisé (console à distance), aussi le choix est arrêté sur OpenSSH Server.

Pour l’installer :

aptitude install openssh-server

openvpn

OPENVPN : installation

Lien duquel cet article a été construit

Pour lancer l’installation :

aptitude install openvpn

OPENVPN : Création autorité certification

Il faut générer la clé de cryptage :

 1- se placer dans le répertoire suivant :
cd /usr/share/doc/openvpn/examples/easy-rsa

 2- modifier le fichier vars :
nano vars

 3- Une fois le fichier modifié, la ligne suivante à lancer permet d’initialiser les variables pour les scripts :

. ./vars (attention, les deux points ne se suivent pas..)

 4- Ensuite la ligne suivante initialise le dossier keys (efface les clés présentes)

./clean-all

 5- Le dossier « easy-rsa » contient un fichier de configuration par défaut d’OpenSSL, qu’il faut décompresser, pour qu’il soit utilisable pour faire fonctionner la génération des clés et des certificats :

gunzip openssl.cnf.gz

(il se peut qu’openssl.cnf soit déjà dézippé).

 Le script suivant permet de créer dans « keys » le certificat principal du serveur « ca.crt » et la clé correspondante « ca.key » :

./build-ca

Initiales du Pays :

Country Name (2 letter code) [AU] :

Réponse : FR

State or Province Name (full name) [Some-state] :

Réponse : Rhône-Alpes

Locality Name (eg. city) [] :

Réponse : MaVille .. attention, ne pas mettre d’accent ...

Organization Name (eg, Company) [Internet Widgits Pty Ltd]

Réponse : MonEntreprise ... attention les accents....

Organizational Unit Name (eg, section) [] :

Réponse : MonService

Common Name (eg, YOUR name) [] :

Réponse : MonNom

Email-Adress [] :

Réponse : MonAdresseEmail

ASTUCE : Les champs peuvent apparaître pré-remplis du fait qu’on a renseigné vars au préalable, dans ce cas, les valeurs apparaissent entre crochets et il suffit de faire entrée pour valider.


OPENVPN : Création certificat et clé du serveur

Le script suivant permet de créer dans « keys » le certificat « ServeurLAMP.crt » et la clé « ServeurLAMP.key » pour le serveur VPN nommé par exemple « ServeurLAMP » :

./build-key-server ServeurLAMP

Jeu de questions/réponses (préremplies...), avec les questions supplémentaires suivantes :

ATTENTION : Pour les questions, tous les champs sont renseignés par défaut sauf le « Common Name » qu’il faut renseigner manuellement. Exemple « serveurlamp ». Personnellement, je n’ai pas renseigné le champ « password »

OPENVPN : Création certificat et clé du client

Création du certificat et de la clé pour un client OpenVPN

On va supposer qu’un utilisateur VPN s’appelle Client01.

Le script suivant permet de créer dans « keys » le certificat « Client01.crt » et la clé « Client01.key » pour le client VPN nommé par exemple « Client01 » :

cd /usr/share/doc/openvpn/examples/easy-rsa/

. ./vars

./build-key Client01

Ce script doit afficher à l’écran quelque chose qui ressemble à ça :

ATTENTION : Il faudra renouveler cette opération pour chaque client. Pour les questions, tous les champs sont renseignés par défaut sauf le « Common Name » qu’il faut renseigner manuellement.

Exemple « Client01 ». Chaque « Common Name » de chaque client doit être différent.

Personnellement, je n’ai pas renseigné le champ « password »

OPEN VPN : Création du paramètre Diffie Hellman

Le script suivant permet de créer dans « keys » le fichier « dh1024.pem » , la commande suivant va encoder et crypter la clé :

./build-dh

Ce script doit afficher à l’écran quelque chose qui ressemble à ça :

OPENVPN : Mise en place des certificats et des clés

Concernant le serveur OpenVPN/ OpenSSL, le plus simple est de copier les 4 fichiers dans le dossier /etc/openvpn

cp ./keys/ca.crt /etc/openvpn/

cp ./keys/ca.key /etc/openvpn/

cp ./keys/serveurlamp.crt /etc/openvpn/

cp ./keys/serveurlamp.key /etc/openvpn/

cp ./keys/dh1024.pem /etc/openvpn/

Pour le client, il faudra copier ses deux fichiers une fois que celui-ci sera installé.

cp ./keys/Client01.* /etc/openvpn/

OPENVPN :Création d’un utilisateur avec des droits limités pour OpenVPN

Pour limiter les risques d’attaques sur OpenVPN, il est important que le processus d’OpenVPN fonctionne sur un utilisateur n’ayant aucun droit sur le système.

Souvent, l’utilisateur « nobody » est utilisé par défaut, mais il est encore plus sécurisant de faire tourner chaque processus avec un utilisateur différent. Donc, pour le processus OpenVPN, nous allons créer l’utilisateur « openvpn », cet utilisateur (système) va lancer dans un processus indépendant le démon openvpn quand il sera sollicité par une demande de connection vpn extérieure :

groupadd openvpn
useradd -d /dev/null -g openvpn -s /bin/false openvpn


OPENVPN : Configuration

Par défaut OpenVPN est fourni avec plusieurs fichiers d’exemples enregistrés dans le dossier :

 /usr/share/doc/openvpn/examples/sample-config-files/

Pour configurer le serveur, je suis parti du fichier d’exemple « server.conf.gz », qu’il faut donc décompresser et mettre en place dans « /etc/openvpn » :

cd /usr/share/doc/openvpn/examples/sample-config-files/
gunzip server.conf.gz
cp server.conf /etc/openvpn/

Il suffit ensuite d’adapter ce fichier en fonction des besoins.

Voici par exemple le fichier de configuration que j’utilise :

ATTENTION : Il est évident, après ce script, d’ouvrir le port 1194 (port openvpn) sur le firewall.

OPEN VPN : Démarrage du serveur OpenVPN

La commande suivante permet de démarrer ou redémarrer le serveur :

/etc/init.d/openvpn restart

Ne pas hésiter à regarder dans les logs que tout c’est bien passé :

tail -100 /var/log/syslog

Bien vérifier également que le processus tourne sous l’utilisateur « openvpn »

ps aux | grep openvpn

Pour finir, si tout c’est bien passé l’interface « tun0 » doit apparaître dans la configuration du réseau :

Et il doit être possible de la pinguer :

# ping 10.8.0.1

OPENVPN : Logiciel client

Avec OpenVPN, la notion de client et de serveur n’existe pas étant donné que c’est le même logiciel qui peut faire office de client ou de serveur.

Pour Windows, il existe une version d’OpenVPN avec une installation simplifiée qui est disponible sur
http://openvpn.se/download.html
http://openvpn.se/files/install_packages/openvpn-2.0.5-gui-1.0.3-install.exe

Lors de l’installation de ce programme, la carte réseau virtuelle « TAP-Win32 Adapter V8 » est installée. Une fois le programme installé, il est lancé automatiquement et à chaque démarrage de Windows. Une icône pour le configurer est disponible à coté de l’heure.

Ensuite, il est possible de franciser OpenVPN en remplaçant le binaire enregistré dans « C :\Program Files\OpenVPN\bin\openvpn-gui.exe » par le binaire téléchargeable à l’adresse ci-dessous (Attention : Il faut le renommer après l’avoir téléchargé) :
http://openvpn.se/files/localized/binary/1.0.3/openvpn-gui-1.0.3-fr.exe

OPENVPN : Configuration du client Windows

La première chose à faire est de copier dans le dossier « C :\Program Files\OpenVPN\config » les fichiers servant à l’authentification du client via OpenSSL créés dans les chapitres précédents :
ca.crt, Client01.crt et Client01.key

Sous windows, il faut copier le fichier "Client" du répertoire Sample-config dans le répertoire config.

Ensuite, il faut modifier le fichier de configuration pour l’adapter à votre cas. Pour éditer le fichier, il est possible de faire un clic droit sur l’icône « OpenVPN » situé à gauche de l’heure et de choisir l’option « Éditer la configuration ».

Normalement, vous n’aurez qu’à changer :
 L’adresse IP du serveur OpenVPN sur la ligne « remote »
 Le nom des fichiers : ca.crt, Client01.crt et Client01.key

OPENVPN : Lancement du client Windows

Pour lancer la connexion, il suffit de faire un clic droit sur l’icône « OpenVPN » situé à gauche de l’heure et de choisir l’option « Connecter ».

Si tout se passe bien, une fenêtre affichant les logs doit s’afficher et une fois la connexion effectuée, le réseau est opérationnel.

En cas de problème, et pour trouver l’origine de celui-ci il faut augmenter le niveau des logs en changeant le paramètre « verb » du fichier de configuration :
 verb 3 -> Suffisamment de logs dans la plupart des cas.
 verb 9 -> Énormément de logs.

Une fois la connexion établie, il doit être possible de pinguer le serveur soit sur son adresse virtuelle (ex : 10.8.0.1 dans notre cas) soit sur son adresse réelle (ex : 192.168.0.1)

Remarque : Depuis le serveur, pour connaître les clients connecté, il faut consulter le fichier :
/etc/openvpn/openvpn-status.log

Vous pouvez aussi exploiter en live le log des connections en cours avec tail -f /etc/openvpn/openvpn-status.log

OPENVPN Permettre aux clients VPN d’accéder à l’ensemble du réseau distants

Avec la configuration précédente, les clients peuvent accéder au serveur OpenVPN, mais ils ne peuvent pas accéder au reste du réseau sur lequel est connecté le serveur OpenVPN.

Pour permettre aux clients d’accéder au reste du réseau, il faut effectuer deux opérations :

1 - Autoriser le serveur Linux à transmettre les paquets au reste du réseau

Pour cela, il faut activer le forwarding avec la commande suivante :

echo 1 > /proc/sys/net/ipv4/ip_forward

La commande suivante, permet de vérifier que le forwarding est bien activé :
cat /proc/sys/net/ipv4/ip_forward

Remarque : ici, nous utilisons une redirection d’écran sur le fichier ip_forward, qui contiendra seulement la valeur 1.
Ip_forward = 1 (forward activé)
ip_forward = 0 ..ou vide (forward désactivé).
Nous aurions pu aussi bien éditer le fichier ip_forward pour lui donner la valeur 1.

2 - Indiquer aux autres postes du réseau la route vers le serveur OpenVPN

Puisque le serveur VPN est sur l’adresse 192.22.1.1, il faut ajouter une route manuellement sur les postes clients VPN avec la commande suivante sous Windows :

C :>route add 10.8.0.0 mask 255.255.255.0 192.22.1.1

La commande suivante, permet d’avoir la liste des routes :

C :>route print

La commande suivante permet de supprimer une route :

C :>route delete 10.8.0.0 mask 255.255.255.0 192.22.1.1

OPENVPN : Adressage IP

Dernière étape, il faut que la carte virtuelle TAP-Win32, installée pour l’utilitaire windows ait une adresse et une passerelle compatible avec la connection vpn.

Pour cela, on peut par exemple paramétrer nous même l’adresse IP de la carte virtuelle TAP-win32, avec une adresse ip/masque/passerelle/dns disponible dans le réseau de destination (ex : 192.22.1.69/24 passerelle 10.8.0.1 + dns qui va bien).

Par contre, il existe des procédures beaucoup plus fines, ne nécessitant pas l’intervention ci-dessus, par le biais du paramétrage du fichier /etc/openvpn/server.conf.

Dès que nous aurons validé une procédure qui fonctionne, nous complèterons cet article.

OUF !, C’est terminé pour le VPN....

Portfolio

Documents joints