Bonjour, Habr! Dans ce livre, David Clinton décrit 12 projets réels, y compris l'automatisation des systÚmes de sauvegarde et de restauration, la configuration d'un cloud personnel de type Dropbox et la création de votre propre serveur MediaWiki. à travers des exemples intéressants, vous apprendrez la virtualisation, la récupération aprÚs sinistre, la sécurité, la sauvegarde, l'implémentation de DevOps et le dépannage des systÚmes. Chaque chapitre se termine par un aperçu des meilleures pratiques, un glossaire de nouveaux termes et des exercices.
Extrait «10.1. Création d'un tunnel OpenVPN»
Dans ce livre, j'ai dĂ©jĂ beaucoup parlĂ© du chiffrement. SSH et SCP peuvent sĂ©curiser les donnĂ©es transmises via des connexions distantes (chapitre 3), le chiffrement des fichiers permet de protĂ©ger les donnĂ©es 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 nĂ©cessitent une protection dans un Ă©ventail de connexions plus large. Par exemple, certains membres de votre Ă©quipe peuvent devoir travailler en dĂ©placement en se connectant au rĂ©seau via Wi-Fi Ă des points d'accĂšs publics. Il n'est certainement pas sage de penser que tous ces points d'accĂšs sont sĂ»rs, mais vos collaborateurs ont rĂ©ellement besoin d'un moyen de se connecter aux ressources de l'entreprise â et dans ce cas, un VPN peut aider.
Un tunnel VPN bien conçu assure une connexion directe entre les clients distants et le serveur de maniÚre à cacher les données lors de leur transmission sur un réseau non sécurisé. Et alors? Vous avez déjà vu de nombreux outils capables de le faire avec du chiffrement. La véritable valeur d'un VPN réside dans le fait qu'une fois le tunnel ouvert, vous pouvez connecter des réseaux distants comme s'ils étaient tous locaux. En un sens, vous utilisez une forme de contournement.
Avec un tel rĂ©seau Ă©tendu, les administrateurs peuvent effectuer leur travail sur leurs serveurs depuis n'importe oĂč. Mais plus important encore, une entreprise ayant des ressources rĂ©parties sur plusieurs agences peut les rendre visibles et accessibles Ă tous les groupes qui en ont besoin, oĂč qu'ils se trouvent (fig. 10.1).
Un tunnel Ă lui seul ne garantit pas la sĂ©curitĂ©. Cependant, l'un des standards de cryptage peut ĂȘtre intĂ©grĂ© Ă la structure du rĂ©seau, ce qui augmente considĂ©rablement le niveau de sĂ©curitĂ©. Les tunnels créés avec le paquet OpenVPN Ă code source ouvert utilisent le mĂȘme cryptage TLS/SSL dont vous avez dĂ©jĂ entendu parler. OpenVPN n'est pas la seule option disponible pour le tunneling, mais c'est l'un des plus connus. Il est considĂ©rĂ© comme lĂ©gĂšrement plus rapide et plus sĂ»r que le protocole de tunnel alternatif de niveau 2 utilisant le cryptage IPsec.
Vous souhaitez que votre équipe communique en toute sécurité entre elle, que ce soit en déplacement ou en travaillant dans différents bùtiments ? Pour cela, il est nécessaire de créer un serveur OpenVPN afin de permettre le partage d'applications et l'accÚs à l'environnement réseau local du serveur. Pour que cela fonctionne, il suffit de lancer deux machines virtuelles ou deux conteneurs : un pour jouer le rÎle de serveur/hÎte et l'autre en tant que client. Créer un VPN n'est pas un processus simple, il vaut donc probablement la peine de passer quelques minutes à envisager l'ensemble du processus.

10.1.1. Configuration du serveur OpenVPN
Avant de commencer, je vous donne un conseil utile. Si vous prĂ©voyez de tout faire vous-mĂȘme (et je vous le recommande vivement), vous allez probablement dĂ©couvrir que vous travaillez avec plusieurs fenĂȘtres de terminal ouvertes sur votre bureau, chacune se connectant Ă sa propre machine. Il y a un risque qu'Ă un moment donnĂ©, vous saisissiez une commande dans la mauvaise fenĂȘtre. Pour Ă©viter cela, vous pouvez utiliser la commande hostname pour changer le nom de la machine affichĂ©e dans l'invite de commandes en quelque chose qui vous indiquera clairement oĂč vous vous trouvez. Une fois que vous l'avez fait, vous devrez vous dĂ©connecter du serveur et vous reconnecter afin que les nouveaux paramĂštres prennent effet. Voici Ă quoi cela ressemble :

En adoptant cette approche et en attribuant des noms appropriĂ©s Ă chacune des machines avec lesquelles vous travaillez, vous pourrez facilement suivre oĂč vous ĂȘtes.
AprÚs avoir utilisé hostname, vous pourriez rencontrer des messages irritants Unable to Resolve Host OpenVPN-Server lors de l'exécution de commandes ultérieures. La mise à jour du fichier /etc/hosts avec le nouveau nom d'hÎte approprié devrait résoudre le problÚme.
Préparation de votre serveur pour OpenVPN
Pour installer OpenVPN sur votre serveur, deux paquets sont nécessaires : openvpn et easy-rsa (pour gérer le processus de génération de la clé de cryptage). Les utilisateurs de CentOS doivent, si nécessaire, d'abord installer le dépÎt epel-release, comme vous l'avez fait au chapitre 2. Pour vérifier l'accÚs à l'application serveur, vous pouvez également installer le serveur web Apache (apache2 pour Ubuntu et httpd sur CentOS).
Pendant que vous configurez le serveur, je vous recommande d'activer le pare-feu qui bloque tous les ports sauf le 22 (SSH) et le 1194 (port par défaut d'OpenVPN). Cet exemple illustre le fonctionnement de ufw sous Ubuntu, mais je suis sûr que vous vous rappelez encore du programme firewalld de CentOS du chapitre 9 :
# ufw enable
# ufw allow 22
# ufw allow 1194Pour autoriser 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 de rediriger les clients distants au besoin aprÚs leur connexion. Pour que ce nouveau paramÚtre prenne effet, exécutez sysctl -p :
# nano /etc/sysctl.conf
# sysctl -pMaintenant que l'environnement serveur est complĂštement configurĂ©, il reste encore quelques Ă©tapes Ă accomplir avant d'ĂȘtre prĂȘt : vous devrez suivre les Ă©tapes suivantes (nous les examinerons en dĂ©tail plus loin).
- Créez sur le serveur un ensemble de clés pour l'infrastructure à clé publique (PKI) à l'aide des scripts fournis avec le paquet easy-rsa. En fait, le serveur OpenVPN agit également comme sa propre autorité de certification (CA).
- Préparez les clés appropriées pour le client
- Configurez le fichier server.conf pour le serveur
- Configurez votre client OpenVPN
- Vérifiez votre VPN
Génération de clés de cryptage
Pour ne pas compliquer la situation, vous pouvez configurer votre infrastructure de clĂ©s sur la mĂȘme machine oĂč fonctionne le serveur OpenVPN. Cependant, les recommandations en matiĂšre de sĂ©curitĂ© indiquent gĂ©nĂ©ralement d'utiliser un serveur CA distinct pour les dĂ©ploiements en environnement de production. Le processus de gĂ©nĂ©ration et de distribution des ressources de la clĂ© de cryptage Ă utiliser dans OpenVPN est illustrĂ© Ă la figure 10.2.

Lors de l'installation d'OpenVPN, un répertoire /etc/openvpn/ a été créé automatiquement, mais il n'y a encore rien dedans. Les paquets openvpn et easy-rsa sont fournis 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 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-rsaLe catalogue easy-rsa contiendra maintenant un bon nombre de scripts. La table 10.1 énumÚre les outils que vous utiliserez pour générer des clés.

Les opérations énumérées nécessitent des droits root, donc vous devez devenir root via sudo su.
Le premier fichier avec lequel vous allez travailler s'appelle vars et contient les variables d'environnement utilisées par easy-rsa 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 (listing 10.1).
Listing 10.1. Extraits principaux 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="info@bootstrap-it.com"
export KEY_OU="IT"L'exĂ©cution du fichier vars permettra de passer ses valeurs dans l'environnement shell, oĂč elles seront incluses dans le contenu de vos nouvelles clĂ©s. Pourquoi la commande sudo Ă elle seule ne fonctionne-t-elle pas ? Parce qu'Ă ce stade, nous modifions le script appelĂ© vars, puis nous l'appliquons. Appliquer signifie que le fichier vars transmet ses valeurs dans l'environnement shell, oĂč elles seront incluses dans le contenu de vos nouvelles clĂ©s.
Assurez-vous d'exécuter le fichier à nouveau en utilisant un nouveau shell pour terminer le processus en attente. Une fois cela fait, le script vous proposera d'exécuter un autre script, clean-all, pour supprimer tout contenu dans le répertoire /etc/openvpn/easy-rsa/keys/:

Naturellement, la prochaine étape sera d'exécuter le script clean-all, suivi de build-ca, qui utilise le script pkitool pour créer le certificat racine. On vous demandera de confirmer les paramÚtres d'identification fournis par vars :
# ./clean-all
# ./build-ca
Generating a 2048 bit RSA private keyEnsuite, le script build-key-server. Comme il utilise le mĂȘme script pkitool avec le 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 passerez, qui, sauf si vous exĂ©cutez plusieurs VPN sur cet ordinateur, seront gĂ©nĂ©ralement server, 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 UpdatedOpenVPN utilise des paramĂštres gĂ©nĂ©rĂ©s par l'algorithme de Diffie-Hellman (en utilisant build-dh) pour Ă©tablir l'authentification des nouvelles connexions. Le fichier créé ici ne doit pas ĂȘ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 basĂ© sur l'algorithme de Diffie-Hellman :
# ./build-dhVos clés du cÎté du serveur vont maintenant dans le répertoire /etc/openvpn/easy-rsa/keys/, mais OpenVPN ne le sait pas. Par défaut, OpenVPN cherchera les clés dans /etc/openvpn/, donc 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/openvpnPréparation des clés de chiffrement du client
Comme vous l'avez déjà vu, le chiffrement TLS utilise des paires de clés correspondantes : une sur le serveur et l'autre sur le client distant. Cela signifie que vous aurez besoin de clés pour le client. Notre vieil ami pkitool est exactement ce qu'il vous faut. Dans cet exemple, en exécutant le programme dans le répertoire /etc/openvpn/easy-rsa/, nous lui passons l'argument client pour générer les fichiers nommés client.crt et client.key :
# ./pkitool clientLes deux fichiers clients ainsi que le fichier source ca.crt, qui se trouve toujours dans le rĂ©pertoire keys/, doivent maintenant ĂȘtre transfĂ©rĂ©s en toute sĂ©curitĂ© Ă votre client. En raison de leur appartenance et des droits d'accĂšs, cela peut ne pas ĂȘtre une tĂąche facile. L'approche la plus simple consiste Ă copier manuellement le contenu du fichier source (et rien d'autre que ce contenu) dans le terminal exĂ©cutĂ© sur le bureau de votre PC (sĂ©lectionnez le texte, faites un clic droit et choisissez l'option Copier dans le menu). Ensuite, collez cela dans un nouveau fichier avec le mĂȘme nom que celui que vous crĂ©ez dans le deuxiĂšme terminal connectĂ© Ă votre client.
Mais tout le monde peut couper et coller. Pensez plutĂŽt comme un administrateur, car vous n'aurez pas toujours accĂšs Ă une interface graphique oĂč des opĂ©rations de couper/coller sont possibles. Copiez les fichiers dans le rĂ©pertoire personnel de votre utilisateur (afin que l'opĂ©ration distante scp puisse y accĂ©der), puis utilisez chown pour changer le propriĂ©taire des fichiers de root Ă un utilisateur normal sans privilĂšges root, afin de pouvoir rĂ©aliser une opĂ©ration distante scp. Assurez-vous que tous vos fichiers sont pour le moment correctement configurĂ©s et accessibles. Vous les transfĂ©rerez 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.crtAvec un ensemble complet de clĂ©s de chiffrement prĂȘtes Ă l'emploi, vous devez indiquer au serveur comment vous souhaitez Ă©tablir la VPN. Cela se fait via le fichier server.conf.
Réduction du nombre de frappes
Avez-vous trop à taper ? L'extension avec des parenthÚses vous aidera à réduire ces six commandes à deux. Je suis sûr que vous pourrez apprendre ces deux exemples et comprendre ce qui se passe. Encore plus important, vous serez en mesure de comprendre 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 pouvez-vous savoir à quoi doit ressembler le fichier server.conf ? Rappelez-vous le modÚle dans le répertoire easy-rsa que vous avez copié depuis /usr/share/? Lors de l'installation d'OpenVPN, un fichier d'archive de modÚle de configuration a été laissé que vous pouvez copier dans /etc/openvpn/. Je partirai du principe que le modÚle est compressé, et je vais vous présenter un outil utile : zcat.
Vous savez déjà comment afficher le contenu textuel d'un fichier à l'écran avec la commande cat, mais que faire si le fichier est compressé avec gzip ? Vous pouvez toujours décompresser le fichier, et alors cat se fera un plaisir de l'afficher, mais cela prend un ou deux pas de plus que nécessaire. Au lieu de cela, comme vous l'avez probablement deviné, vous pouvez entrer la commande zcat pour charger le texte décompressé en mémoire en une seule étape. Dans l'exemple suivant, au lieu d'afficher le texte à l'écran, vous le redirigerez vers un nouveau fichier nommé server.conf :
# zcat
/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
> /etc/openvpn/server.conf
$ cd /etc/openvpnLaissons de cÎté la documentation extensive et utile fournie avec le fichier, et voyons à quoi il pourrait ressembler lorsque vous avez terminé l'édition. Notez que le point-virgule (;) indique à OpenVPN de ne pas lire et exécuter la ligne suivante (liste 10.2).

Passons en revue certains de ces paramĂštres.
- Par défaut, OpenVPN fonctionne sur le port 1194. Vous pouvez changer cela, par exemple, pour dissimuler davantage vos actions ou éviter les conflits avec d'autres tunnels actifs. Puisque 1194 nécessite une coordination minimale avec les clients, c'est la meilleure option.
- OpenVPN utilise soit le protocole de contrĂŽle de transmission (TCP), soit le protocole de datagrammes utilisateur (UDP) pour la transmission de donnĂ©es. TCP peut ĂȘtre un peu plus lent, mais il est plus fiable et plus susceptible d'ĂȘtre compris par les applications fonctionnant Ă chaque extrĂ©mitĂ© du tunnel.
- Vous pouvez spécifier dev tun lorsque vous souhaitez créer un tunnel IP plus simple et efficace qui transmet des données, sans rien d'autre. En revanche, si vous devez connecter plusieurs interfaces réseau (et les réseaux qu'elles représentent) en créant un pont Ethernet, vous devrez choisir dev tap. Si vous ne comprenez pas ce que cela signifie, utilisez l'argument tun.
- Les quatre lignes suivantes transmettent à OpenVPN les noms de trois fichiers d'authentification sur le serveur et le fichier de paramÚtres dh2048 que vous avez créé précédemment.
- La ligne server définit la plage et le masque de sous-réseau qui seront utilisés pour attribuer des adresses IP aux clients lors de leur connexion.
- Le paramĂštre optionnel push « 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, une configuration rĂ©seau doit Ă©galement ĂȘtre effectuĂ©e sur le serveur, afin que le sous-rĂ©seau privĂ© soit au courant du sous-rĂ©seau OpenVPN (10.8.0.0).
- La ligne port-share localhost 80 permet de rediriger le trafic client entrant par le port 1194 vers un serveur web local écoutant sur le port 80. (Cela sera utile si vous souhaitez utiliser un serveur web pour tester votre VPN.) Cela ne fonctionne que lorsque le protocole tcp est sélectionné.
- Les lignes user nobody et group nogroup doivent ĂȘtre actives â pour cela, il faut enlever les points-virgules (;). L'exĂ©cution des clients distants sous nobody et nogroup garantit que les sessions sur le serveur seront non privilĂ©giĂ©es.
- log indique que les enregistrements actuels dans le journal Ă©craseront les anciens enregistrements Ă chaque lancement d'OpenVPN, tandis que log-append ajoute de nouveaux enregistrements dans le fichier journal existant. Le fichier openvpn.log lui-mĂȘme est enregistrĂ© dans le rĂ©pertoire /etc/openvpn/.
De plus, la valeur client-to-client est souvent Ă©galement ajoutĂ©e au fichier de configuration, afin que plusieurs clients puissent se voir mutuellement en plus du serveur OpenVPN. Si vous ĂȘtes satisfait de votre configuration, vous pouvez dĂ©marrer le serveur OpenVPN :
# systemctl start openvpnEn raison de la nature changeante des relations entre OpenVPN et systemd, il peut parfois ĂȘtre nĂ©cessaire d'utiliser une syntaxe telle que : systemctl start openvpn@server pour dĂ©marrer le service.
Le lancement de ip addr pour afficher la liste des interfaces réseau de votre serveur devrait maintenant afficher une référence à une nouvelle interface appelée tun0. OpenVPN la créera pour gérer 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 foreverIl se peut que vous ayez besoin de redémarrer le serveur avant que tout fonctionne correctement. La prochaine étape est l'ordinateur client.
10.1.2. Configuration du client OpenVPN
Traditionnellement, les tunnels sont construits avec au moins deux points de sortie (sinon nous les appellerions des cavernes). Un OpenVPN correctement configuré sur le serveur dirige le trafic vers et depuis le tunnel d'un cÎté. Mais vous aurez également besoin d'un logiciel fonctionnant cÎté client, c'est-à -dire à l'autre extrémité du tunnel.
Dans cette section, je vais me concentrer sur la configuration manuelle d'un ordinateur Linux de type particulier pour fonctionner en tant que client OpenVPN. Mais ce n'est pas la seule façon d'accéder à cette fonctionnalité. OpenVPN prend en charge des applications clientes que l'on peut installer et utiliser sur des ordinateurs de bureau et des ordinateurs portables sous Windows ou macOS, ainsi que sur des smartphones et tablettes sous Android et iOS. Pour plus de détails, voir openvpn.net.
Le paquet OpenVPN devra ĂȘtre installĂ© sur l'ordinateur client, comme il a Ă©tĂ© installĂ© sur le serveur, bien qu'il n'y ait pas besoin de easy-rsa, car les clĂ©s que vous utilisez existent dĂ©jĂ . Vous devez copier le fichier template client.conf dans le rĂ©pertoire /etc/openvpn/, qui vient d'ĂȘtre créé. Cette fois, le fichier ne sera pas compressĂ©, donc la commande cp fonctionnera parfaitement pour cette tĂąche :
# apt install openvpn
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf
/etc/openvpn/La plupart des paramÚtres dans votre fichier client.conf seront assez clairs : ils doivent correspondre aux valeurs sur le serveur. Comme on peut le voir dans l'exemple suivant de fichier, le paramÚtre unique est remote 192.168.1.23 1194, qui indique au client l'adresse IP du serveur. Encore une fois, assurez-vous que c'est l'adresse de votre serveur. Vous devez également faire en sorte que l'ordinateur client vérifie l'authenticité du certificat du serveur afin d'éviter une éventuelle attaque de type « homme du milieu ». L'un des moyens d'y parvenir est d'ajouter la ligne remote-cert-tls server (listing 10.3).

Vous pouvez maintenant accéder au répertoire /etc/openvpn/ et extraire les clés de certification depuis le serveur. Remplacez l'adresse IP du serveur ou le nom de domaine dans l'exemple par vos valeurs :

Rien de palpitant ne se produira probablement tant que vous n'aurez pas lancĂ© OpenVPN sur le client. Comme vous devez passer 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 vous vous connecterez via le chiffrement TLS, tandis que âconfig pointe vers votre fichier de configuration :
# openvpn --tls-client --config /etc/openvpn/client.confLisez attentivement la sortie 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Ă» Ă des incohĂ©rences entre les fichiers de configuration du serveur et du client ou Ă un problĂšme de connexion rĂ©seau/firewall. Voici quelques conseils pour dĂ©panner.
- Lisez attentivement la sortie de l'opĂ©ration OpenVPN sur le client. Elle contient souvent des conseils prĂ©cieux sur ce qui ne peut pas ĂȘtre exĂ©cutĂ© 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 messages liés à OpenVPN dans les journaux systÚme sur le serveur et le client, qui sont chronologiquement appropriés. (journalctl -ce affichera les enregistrements les plus récents.)
- Assurez-vous que vous avez une connexion réseau active entre le serveur et le client (voir plus de détails dans le chapitre 14).
Ă propos de l'auteur
David Clinton â administrateur systĂšme, enseignant et Ă©crivain. Il a administrĂ©, Ă©crit Ă ce sujet et créé du matĂ©riel pĂ©dagogique pour de nombreuses disciplines techniques importantes, y compris les systĂšmes Linux, l'informatique en nuage (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). De nombreux cours vidĂ©o de formation sont disponibles sur Pluralsight.com, et des liens vers d'autres de ses livres (sur l'administration Linux et la virtualisation de serveurs) sont disponibles sur .
» Pour plus de détails sur le livre, vous pouvez consulter
»
»
Pour les membres de Habr, une remise de 25 % avec le code promotionnel â Linux
AprÚs le paiement de la version papier du livre, un livre électronique sera envoyé par e-mail.
Source : habr.com
