Livre Linux en action

Livre Linux en action Bonjour, résidents de Khabro ! Dans le livre, David Clinton décrit 12 projets réels, notamment l'automatisation de votre système de sauvegarde et de récupération, la configuration d'un cloud de fichiers personnel de style Dropbox et la création de votre propre serveur MediaWiki. Vous explorerez la virtualisation, la reprise après sinistre, la sécurité, la sauvegarde, le DevOps et le dépannage du système à travers des études de cas intéressantes. Chaque chapitre se termine par une revue des meilleures pratiques, un glossaire des nouveaux termes et des exercices.

Extrait « 10.1. Création d'un tunnel OpenVPN"

J'ai déjà beaucoup parlé du chiffrement dans ce livre. SSH et SCP peuvent protéger les données transférées via des connexions distantes (Chapitre 3), le cryptage des fichiers peut protéger les données lorsqu'elles sont stockées sur le serveur (Chapitre 8) et les certificats TLS/SSL peuvent protéger les données transférées entre les sites et les navigateurs clients (Chapitre 9). . Mais parfois, vos données doivent être protégées sur un plus large éventail de connexions. Par exemple, certains membres de votre équipe travaillent peut-être en déplacement tout en se connectant au Wi-Fi via des points d'accès publics. Vous ne devez certainement pas supposer que tous ces points d’accès sont sécurisés, mais vos collaborateurs ont besoin d’un moyen de se connecter aux ressources de l’entreprise – et c’est là qu’un VPN peut être utile.

Un tunnel VPN correctement conçu fournit une connexion directe entre les clients distants et le serveur de manière à masquer les données lorsqu'elles transitent sur un réseau non sécurisé. Et alors? Vous avez déjà vu de nombreux outils capables de le faire avec le cryptage. La véritable valeur d’un VPN est qu’en ouvrant un tunnel, vous pouvez connecter des réseaux distants comme s’ils étaient tous locaux. Dans un sens, vous utilisez un contournement.

Grâce à ce réseau étendu, les administrateurs peuvent effectuer leur travail sur leurs serveurs depuis n'importe où. Mais plus important encore, une entreprise dont les ressources sont réparties sur plusieurs sites peut les rendre toutes visibles et accessibles à tous les groupes qui en ont besoin, où qu'ils se trouvent (Figure 10.1).

Le tunnel lui-même ne garantit pas la sécurité. Mais l'une des normes de cryptage peut être incluse dans la structure du réseau, ce qui augmente considérablement le niveau de sécurité. Les tunnels créés à l'aide du package open source OpenVPN utilisent le même cryptage TLS/SSL que vous avez déjà lu. OpenVPN n'est pas la seule option de tunneling disponible, mais c'est l'une des plus connues. Il est considéré comme légèrement plus rapide et plus sécurisé que le protocole alternatif de tunnel de couche 2 qui utilise le cryptage IPsec.

Souhaitez-vous que tous les membres de votre équipe communiquent en toute sécurité entre eux lorsqu'ils sont en déplacement ou qu'ils travaillent dans différents bâtiments ? Pour ce faire, vous devez créer un serveur OpenVPN pour permettre le partage d'applications et l'accès à l'environnement réseau local du serveur. Pour que cela fonctionne, il vous suffit d’exécuter deux machines virtuelles ou deux conteneurs : un pour faire office de serveur/hôte et un pour faire office de client. Construire un VPN n’est pas un processus simple, cela vaut donc probablement la peine de prendre quelques minutes pour avoir une vue d’ensemble.

Livre Linux en action

10.1.1. Configuration du serveur OpenVPN

Avant de commencer, je vais vous donner quelques conseils utiles. Si vous comptez le faire vous-même (et je vous le recommande vivement), vous vous retrouverez probablement à travailler avec plusieurs fenêtres de terminal ouvertes sur votre bureau, chacune connectée à une machine différente. Il existe un risque qu'à un moment donné, vous saisissiez la mauvaise commande dans la fenêtre. Pour éviter cela, vous pouvez utiliser la commande hostname pour modifier le nom de la machine affiché sur la ligne de commande en quelque chose qui vous indique clairement où vous vous trouvez. Une fois cela fait, vous devrez vous déconnecter du serveur et vous reconnecter pour que les nouveaux paramètres prennent effet. Voici à quoi cela ressemble :

Livre Linux en action
En suivant cette approche et en donnant des noms appropriés à chacune des machines avec lesquelles vous travaillez, vous pouvez facilement savoir où vous vous trouvez.

Après avoir utilisé le nom d'hôte, vous pouvez rencontrer des messages ennuyeux Impossible de résoudre l'hôte OpenVPN-Server lors de l'exécution des commandes suivantes. La mise à jour du fichier /etc/hosts avec le nouveau nom d'hôte approprié devrait résoudre le problème.

Préparer votre serveur pour OpenVPN

Pour installer OpenVPN sur votre serveur, vous avez besoin de deux packages : openvpn et easy-rsa (pour gérer le processus de génération de clé de chiffrement). Les utilisateurs CentOS doivent d'abord installer le référentiel epel-release si nécessaire, comme vous l'avez fait au chapitre 2. Pour pouvoir tester l'accès à l'application serveur, vous pouvez également installer le serveur Web Apache (apache2 sur Ubuntu et httpd sur CentOS).

Pendant que vous configurez votre serveur, je vous recommande d'activer un pare-feu qui bloque tous les ports sauf 22 (SSH) et 1194 (port par défaut d'OpenVPN). Cet exemple illustre comment ufw fonctionnerait sur Ubuntu, mais je suis sûr que vous vous souvenez encore du programme CentOS firewalld du chapitre 9 :

# ufw enable
# ufw allow 22
# ufw allow 1194

Pour activer le routage interne entre les interfaces réseau sur le serveur, vous devez décommenter une ligne (net.ipv4.ip_forward = 1) dans le fichier /etc/sysctl.conf. Cela permettra aux clients distants d'être redirigés selon les besoins une fois connectés. Pour faire fonctionner la nouvelle option, exécutez sysctl -p :

# nano /etc/sysctl.conf
# sysctl -p

Votre environnement serveur est maintenant entièrement configuré, mais il vous reste encore une chose à faire avant d'être prêt : vous devrez suivre les étapes suivantes (nous les aborderons en détail ensuite).

  1. Créez un ensemble de clés de chiffrement d'infrastructure à clé publique (PKI) sur le serveur à l'aide des scripts fournis avec le package easy-rsa. Essentiellement, le serveur OpenVPN agit également comme sa propre autorité de certification (CA).
  2. Préparer les clés appropriées pour le client
  3. Configurez le fichier server.conf pour le serveur
  4. Configurez votre client OpenVPN
  5. Vérifiez votre VPN

Générer des clés de chiffrement

Pour simplifier les choses, vous pouvez configurer votre infrastructure clé sur la même machine sur laquelle le serveur OpenVPN est exécuté. Toutefois, les meilleures pratiques en matière de sécurité suggèrent généralement d'utiliser un serveur d'autorité de certification distinct pour les déploiements de production. Le processus de génération et de distribution des ressources de clé de chiffrement à utiliser dans OpenVPN est illustré sur la Fig. 10.2.

Livre Linux en action
Lorsque vous avez installé OpenVPN, le répertoire /etc/openvpn/ a été automatiquement créé, mais il ne contient encore rien. Les packages openvpn et easy-rsa sont livrés avec des exemples de fichiers modèles que vous pouvez utiliser comme base pour votre configuration. Pour démarrer le processus de certification, copiez le répertoire du modèle easy-rsa de /usr/share/ vers /etc/openvpn et accédez au répertoire easy-rsa/ :

# cp -r /usr/share/easy-rsa/ /etc/openvpn
$ cd /etc/openvpn/easy-rsa

Le répertoire easy-rsa contiendra désormais un certain nombre de scripts. Dans le tableau 10.1 répertorie les outils que vous utiliserez pour créer des clés.

Livre Linux en action

Les opérations ci-dessus nécessitent les privilèges root, vous devez donc devenir root via sudo su.

Le premier fichier avec lequel vous travaillerez s'appelle vars et contient les variables d'environnement qu'easy-rsa utilise lors de la génération des clés. Vous devez modifier le fichier pour utiliser vos propres valeurs au lieu des valeurs par défaut déjà présentes. Voici à quoi ressemblera mon fichier (extrait 10.1).

Inscription 10.1. Principaux fragments du fichier /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="CA"
export KEY_PROVINCE="ON"
export KEY_CITY="Toronto"
export KEY_ORG="Bootstrap IT"
export KEY_EMAIL="[email protected]"
export KEY_OU="IT"

L'exécution du fichier vars transmettra ses valeurs à l'environnement shell, où elles seront incluses dans le contenu de vos nouvelles clés. Pourquoi la commande sudo ne fonctionne-t-elle pas seule ? Parce que dans la première étape, nous éditons le script nommé vars puis l'appliquons. Appliquer et signifie que le fichier vars transmet ses valeurs à l'environnement shell, où elles seront incluses dans le contenu de vos nouvelles clés.

Assurez-vous de réexécuter le fichier en utilisant un nouveau shell pour terminer le processus inachevé. Une fois cela fait, le script vous invitera à exécuter un autre script, clean-all, pour supprimer tout contenu du répertoire /etc/openvpn/easy-rsa/keys/ :

Livre Linux en action
Naturellement, l'étape suivante consiste à exécuter le script clean-all, suivi de build-ca, qui utilise le script pkitool pour créer le certificat racine. Il vous sera demandé de confirmer les paramètres d'identité fournis par vars :

# ./clean-all
# ./build-ca
Generating a 2048 bit RSA private key

Vient ensuite le script build-key-server. Puisqu'il utilise le même script pkitool avec un nouveau certificat racine, vous verrez les mêmes questions pour confirmer la création de la paire de clés. Les clés seront nommées en fonction des arguments que vous transmettez, qui, à moins que vous n'exécutiez plusieurs VPN sur cette machine, seront généralement serveur, comme dans l'exemple :

# ./build-key-server server
[...]
Certificate is to be certified until Aug 15 23:52:34 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

OpenVPN utilise des paramètres générés par l'algorithme Diffie-Hellman (en utilisant build-dh) pour négocier l'authentification des nouvelles connexions. Le fichier créé ici n'a pas besoin d'être secret, mais doit être généré à l'aide du script build-dh pour les clés RSA actuellement actives. Si vous créez de nouvelles clés RSA à l'avenir, vous devrez également mettre à jour le fichier Diffie-Hellman :

# ./build-dh

Vos clés côté serveur se retrouveront désormais dans le répertoire /etc/openvpn/easy-rsa/keys/, mais OpenVPN ne le sait pas. Par défaut, OpenVPN recherchera les clés dans /etc/openvpn/, alors copiez-les :

# cp /etc/openvpn/easy-rsa/keys/server* /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/dh2048.pem /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn

Préparation des clés de chiffrement client

Comme vous l'avez déjà vu, le chiffrement TLS utilise des paires de clés correspondantes : une installée sur le serveur et une installée sur le client distant. Cela signifie que vous aurez besoin de clés client. Notre vieil ami pkitool est exactement ce dont vous avez besoin pour cela. Dans cet exemple, lorsque nous exécutons le programme dans le répertoire /etc/openvpn/easy-rsa/, nous lui passons l'argument client pour générer des fichiers appelés client.crt et client.key :

# ./pkitool client

Les deux fichiers client, ainsi que le fichier ca.crt d'origine qui se trouve toujours dans le répertoire key/, devraient maintenant être transférés en toute sécurité vers votre client. En raison de leur propriété et de leurs droits d’accès, cela n’est peut-être pas si simple. L'approche la plus simple consiste à copier manuellement le contenu du fichier source (et rien d'autre que ce contenu) dans un terminal fonctionnant sur le bureau de votre PC (sélectionnez le texte, faites un clic droit dessus et sélectionnez Copier dans le menu). Collez ensuite ceci dans un nouveau fichier du même nom que vous créez dans un deuxième terminal connecté à votre client.

Mais n’importe qui peut couper et coller. Pensez plutôt comme un administrateur car vous n’aurez pas toujours accès à l’interface graphique où les opérations couper/coller sont possibles. Copiez les fichiers dans le répertoire personnel de votre utilisateur (afin que l'opération scp distante puisse y accéder), puis utilisez chown pour changer la propriété des fichiers de root à un utilisateur non root normal afin que l'action scp distante puisse être effectuée. Assurez-vous que tous vos fichiers sont actuellement installés et accessibles. Vous les déplacerez vers le client un peu plus tard :

# cp /etc/openvpn/easy-rsa/keys/client.key /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/ca.crt /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/client.crt /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/client.key
# chown ubuntu:ubuntu /home/ubuntu/client.crt
# chown ubuntu:ubuntu /home/ubuntu/ca.crt

Avec un ensemble complet de clés de cryptage prêtes à l'emploi, vous devez indiquer au serveur comment vous souhaitez créer le VPN. Cela se fait à l'aide du fichier server.conf.

Réduire le nombre de frappes

Y a-t-il trop de frappe ? L'expansion avec des parenthèses aidera à réduire ces six commandes à deux. Je suis sûr que vous pouvez étudier ces deux exemples et comprendre ce qui se passe. Plus important encore, vous saurez comment appliquer ces principes à des opérations impliquant des dizaines, voire des centaines d'éléments :

# cp /etc/openvpn/easy-rsa/keys/{ca.crt,client.{key,crt}} /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/{ca.crt,client.{key,crt}}

Configuration du fichier server.conf

Comment savoir à quoi devrait ressembler le fichier server.conf ? N'oubliez pas le modèle de répertoire easy-rsa que vous avez copié depuis /usr/share/? Lorsque vous avez installé OpenVPN, vous vous êtes retrouvé avec un fichier de modèle de configuration compressé que vous pouvez copier dans /etc/openvpn/. Je vais m'appuyer sur le fait que le modèle est archivé et vous présenter un outil utile : zcat.

Vous savez déjà comment imprimer le contenu texte d'un fichier à l'écran à l'aide de la commande cat, mais que se passe-t-il si le fichier est compressé à l'aide de gzip ? Vous pouvez toujours décompresser le fichier, puis cat le publiera avec plaisir, mais cela représente une ou deux étapes de plus que nécessaire. Au lieu de cela, comme vous l'avez peut-être deviné, vous pouvez émettre la commande zcat pour charger le texte décompressé en mémoire en une seule étape. Dans l'exemple suivant, au lieu d'imprimer du texte à l'écran, vous le redirigerez vers un nouveau fichier appelé server.conf :

# zcat 
  /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz 
  > /etc/openvpn/server.conf
$ cd /etc/openvpn

Laissons de côté la documentation complète et utile fournie avec le fichier et voyons à quoi il pourrait ressembler une fois l'édition terminée. Notez que le point-virgule (;) indique à OpenVPN de ne pas lire ou exécuter la ligne suivante (extrait 10.2).

Livre Linux en action
Passons en revue certains de ces paramètres.

  • Par défaut, OpenVPN s'exécute sur le port 1194. Vous pouvez modifier cela, par exemple, pour masquer davantage vos activités ou éviter les conflits avec d'autres tunnels actifs. Puisque 1194 nécessite une coordination minimale avec les clients, il est préférable de procéder de cette façon.
  • OpenVPN utilise soit le protocole de contrôle de transmission (TCP), soit le protocole de datagramme utilisateur (UDP) pour transmettre des données. TCP est peut-être un peu plus lent, mais il est plus fiable et plus susceptible d'être compris par les applications exécutées aux deux extrémités du tunnel.
  • Vous pouvez spécifier dev tun lorsque vous souhaitez créer un tunnel IP plus simple et plus efficace qui transporte le contenu des données et rien d'autre. Si, en revanche, vous devez connecter plusieurs interfaces réseau (et les réseaux qu'elles représentent), créant un pont Ethernet, vous devrez choisir dev tap. Si vous ne comprenez pas ce que tout cela signifie, utilisez l'argument tun.
  • Les quatre lignes suivantes donnent à OpenVPN les noms des trois fichiers d'authentification sur le serveur et du fichier d'options dh2048 que vous avez créé précédemment.
  • La ligne du serveur définit la plage et le masque de sous-réseau qui seront utilisés pour attribuer des adresses IP aux clients lors de la connexion.
  • Le paramètre push facultatif « route 10.0.3.0 255.255.255.0 » permet aux clients distants d'accéder aux sous-réseaux privés derrière le serveur. Pour que cela fonctionne, il faut également configurer le réseau sur le serveur lui-même afin que le sous-réseau privé connaisse le sous-réseau OpenVPN (10.8.0.0).
  • La ligne port-share localhost 80 vous permet de rediriger le trafic client arrivant sur le port 1194 vers un serveur Web local écoutant sur le port 80. (Cela sera utile si vous comptez utiliser le serveur Web pour tester votre VPN.) Cela ne fonctionne que puis lorsque le protocole TCP est sélectionné.
  • Les lignes user none et group nogroup doivent être activées en supprimant les points-virgules (;). Forcer les clients distants à s'exécuter en tant que personne et sans groupe garantit que les sessions sur le serveur ne sont pas privilégiées.
  • log spécifie que les entrées du journal actuelles écraseront les anciennes entrées à chaque démarrage d'OpenVPN, tandis que log-append ajoute de nouvelles entrées au fichier journal existant. Le fichier openvpn.log lui-même est écrit dans le répertoire /etc/openvpn/.

De plus, une valeur client à client est également souvent ajoutée au fichier de configuration afin que plusieurs clients puissent se voir en plus du serveur OpenVPN. Si vous êtes satisfait de votre configuration, vous pouvez démarrer le serveur OpenVPN :

# systemctl start openvpn

En raison de la nature changeante de la relation entre OpenVPN et systemd, la syntaxe suivante peut parfois être requise pour démarrer un service : systemctl start openvpn@server.

L'exécution d'ip addr pour répertorier les interfaces réseau de votre serveur devrait maintenant générer un lien vers une nouvelle interface appelée tun0. OpenVPN le créera pour servir les clients entrants :

$ ip addr
[...]
4: tun0: mtu 1500 qdisc [...]
      link/none
      inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
          valid_lft forever preferred_lft forever

Vous devrez peut-être redémarrer le serveur avant que tout ne fonctionne pleinement. Le prochain arrêt est l'ordinateur client.

10.1.2. Configuration du client OpenVPN

Traditionnellement, les tunnels sont construits avec au moins deux sorties (sinon on les appellerait des grottes). Un OpenVPN correctement configuré sur le serveur dirige le trafic entrant et sortant du tunnel d'un côté. Mais vous aurez également besoin de logiciels exécutés côté client, c’est-à-dire à l’autre bout du tunnel.

Dans cette section, je vais me concentrer sur la configuration manuelle d'un type d'ordinateur Linux pour agir en tant que client OpenVPN. Mais ce n’est pas la seule manière d’offrir cette opportunité. OpenVPN prend en charge les applications clientes qui peuvent être installées et utilisées sur les ordinateurs de bureau et portables exécutant Windows ou macOS, ainsi que sur les smartphones et tablettes Android et iOS. Voir openvpn.net pour plus de détails.

Le package OpenVPN devra être installé sur la machine client comme il a été installé sur le serveur, bien qu'il n'y ait pas besoin d'easy-rsa ici puisque les clés que vous utilisez existent déjà. Vous devez copier le fichier modèle client.conf dans le répertoire /etc/openvpn/ que vous venez de créer. Cette fois, le fichier ne sera pas compressé, donc la commande cp normale fera très bien l'affaire :

# apt install openvpn
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf 
  /etc/openvpn/

La plupart des paramètres de votre fichier client.conf seront assez explicites : ils doivent correspondre aux valeurs sur le serveur. Comme vous pouvez le voir dans l'exemple de fichier suivant, le paramètre unique est distant 192.168.1.23 1194, qui indique au client l'adresse IP du serveur. Encore une fois, assurez-vous qu'il s'agit de l'adresse de votre serveur. Vous devez également forcer l'ordinateur client à vérifier l'authenticité du certificat du serveur pour éviter une éventuelle attaque de l'homme du milieu. Une façon de procéder consiste à ajouter la ligne remote-cert-tls server (extrait 10.3).

Livre Linux en action
Vous pouvez maintenant vous rendre dans le répertoire /etc/openvpn/ et extraire les clés de certification du serveur. Remplacez l'adresse IP du serveur ou le nom de domaine dans l'exemple par vos valeurs :

Livre Linux en action
Rien d’excitant ne se produira probablement tant que vous n’exécuterez pas OpenVPN sur le client. Puisque vous devez transmettre quelques arguments, vous le ferez à partir de la ligne de commande. L'argument --tls-client indique à OpenVPN que vous agirez en tant que client et que vous vous connecterez via le cryptage TLS, et --config pointe vers votre fichier de configuration :

# openvpn --tls-client --config /etc/openvpn/client.conf

Lisez attentivement le résultat de la commande pour vous assurer que vous êtes correctement connecté. Si quelque chose ne va pas la première fois, cela peut être dû à une incompatibilité des paramètres entre les fichiers de configuration du serveur et du client ou à un problème de connexion réseau/pare-feu. Voici quelques conseils de dépannage.

  • Lisez attentivement le résultat de l'opération OpenVPN sur le client. Il contient souvent de précieux conseils sur ce qui ne peut pas être fait exactement et pourquoi.
  • Vérifiez les messages d'erreur dans les fichiers openvpn.log et openvpn-status.log dans le répertoire /etc/openvpn/ sur le serveur.
  • Vérifiez les journaux système sur le serveur et le client pour les messages liés à OpenVPN et chronométrés. (journalctl -ce affichera les entrées les plus récentes.)
  • Assurez-vous que vous disposez d'une connexion réseau active entre le serveur et le client (plus d'informations à ce sujet au chapitre 14).

À propos de l'auteur

David Clinton - administrateur système, enseignant et écrivain. Il a administré, écrit et créé du matériel pédagogique pour de nombreuses disciplines techniques importantes, notamment les systèmes Linux, le cloud computing (en particulier AWS) et les technologies de conteneurs telles que Docker. Il a écrit le livre Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Beaucoup de ses cours de formation vidéo sont disponibles sur Pluralsight.com, et des liens vers ses autres livres (sur l'administration Linux et la virtualisation des serveurs) sont disponibles sur bootstrap-it.com.

» Plus de détails sur le livre peuvent être trouvés sur site de l'éditeur
» table des matières
» Extrait

Pour Khabrozhiteley, 25 % de réduction en utilisant le coupon - Linux/Unix
Dès paiement de la version papier du livre, un livre électronique sera envoyé par e-mail.

Source: habr.com

Ajouter un commentaire