Créer un conteneur Docker serveur OpenVPN
On installe OpenVPN et Easy-RSA qui nous permettront de générer les certificats :
On crée un dossier pour le projet et on s'y rend :
On crée un dossier avec Easy-RSA qu'on appelle easy-rsa et on s'y rend :
On édite le fichier vars afin de configurer Easy-RSA de manière à accroître la sécurité :
On crée une nouvelle autorité de certification (CA) qui est utilisée pour signer et valider les certificats serveur et clients de notre serveur VPN :
On génère une demande de signature de certificat (CSR) pour le serveur VPN, identifié par un nom qu'on donne à ce dernier, sans utiliser de mot de passe :
On signe la CSR avec la CA, créant ainsi un certificat de serveur valide :
On génère des paramètres Diffie-Hellman, utilisés pour sécuriser les échanges de clés entre les clients et le serveur VPN :
On génère une clé partagée secrète pour la fonction de sécurité supplémentaire TLS-Auth d'OpenVPN, qui ajoute une signature aux paquets de données pour vérifier leur source :
On crée une CSR pour un client VPN en déterminant un nom d'identification du client :
On signe la CSR avec la CA en tant que client, ceci indique que le certificat est destiné à être utilisé par un client VPN et permet de l'authentifier auprès du serveur VPN permettant ainsi des connexions sécurisées :
On retourne dans le dossier du projet :
On crée le fichier de configuration client .opvn :
On récupère le fichier de configuration client en se connectant à notre Raspberry par SFTP.
On crée le fichier de configuration du serveur VPN :
On crée un script shell qui s'exécutera au lancement de notre serveur VPN :
La première commande crée une règle de routage qui affecte les paquets marqués avec un identifiant spécifique (fwmark 1) à utiliser une table de routage spécifique (table 100). La deuxième commande définit une route par défaut dans cette table de routage, indiquant que tout le trafic qui y est dirigé doit passer par l'interface eth0 et être envoyé à la passerelle 192.168.1.2. La troisième commande utilise iptables pour marquer tous les paquets UDP entrants qui visent le port 1194 (qui est le port d'écoute de notre serveur VPN) avec ce même identifiant (--set-mark 1), les faisant ainsi passer par la table de routage spéciale que nous avons définie. La quatrième commande configure NAT sur l'interface eth0, permettant à plusieurs appareils sur un réseau local d'accéder à l'Internet en partageant une adresse IP publique. Les deux dernières règles d'iptables permettent le trafic entre l'interface VPN (tun0) et l'interface réseau locale (eth0), en autorisant seulement le trafic déjà établi ou en réponse à des connexions initiées de l'intérieur vers l'extérieur (RELATED,ESTABLISHED) et en acceptant tout trafic entrant de eth0 vers tun0.
On crée un script shell qui s'exécutera à l'interruption de notre serveur VPN :
On supprime les règles crées lors du lancement de notre VPN.
On crée un script shell qui s'exécutera à l'exécution du conteneur :
On crée le Dockerfile qui contient les instructions afin de créer une image de conteneur :
On construit l'image :
On lance un conteneur à partir de l'image créée :
On vérifie que notre conteneur soit en cours d'exécution :
On affiche les journaux (ou logs) générés par le conteneur, particulièrement utile pour le débogage, permettant de comprendre le comportement du conteneur, de suivre son processus d'exécution ou d'identifier des problèmes et des erreurs potentielles :
Commandes utiles
Arrêter le conteneur :
Supprimer le conteneur :
Redémarrer le conteneur :
Dernière mise à jour