<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sysadmin on Jesuisadmin</title><link>https://jesuisadmin.fr/categories/Sysadmin/</link><description>Recent content in Sysadmin on Jesuisadmin</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Sat, 18 May 2019 12:03:24 +0000</lastBuildDate><atom:link href="https://jesuisadmin.fr/categories/Sysadmin/index.xml" rel="self" type="application/rss+xml"/><item><title>WordOps - Déployer WordPress avec Nginx simplement</title><link>https://jesuisadmin.fr/wordops-deployer-wordpress-nginx-simplement/</link><pubDate>Sat, 18 May 2019 12:03:24 +0000</pubDate><guid>https://jesuisadmin.fr/wordops-deployer-wordpress-nginx-simplement/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2019/05/Sans-titre--1-.png" alt="Featured image of post WordOps - Déployer WordPress avec Nginx simplement" /&gt;&lt;p&gt;Pour automatiser le déploiement de mes serveurs avec Nginx, PHP, MariaDB et pour créer les vhosts Nginx, j&amp;rsquo;utilisais précédemment &lt;a class="link" href="https://easyengine.io/" target="_blank" rel="noopener"&#13;&#10; &gt;EasyEngine v3&lt;/a&gt; - qui avait d&amp;rsquo;ailleurs fait l&amp;rsquo;objet &lt;a class="link" href="https://jesuisadmin.fr/easyengine-nginx-wordpress/" target="_blank" rel="noopener"&#13;&#10; &gt;d&amp;rsquo;un article&lt;/a&gt;. Le problème, c&amp;rsquo;est qu&amp;rsquo;EasyEngine n&amp;rsquo;était plus vraiment à jour. Et pour cause, ses développeurs (rtCamp) travaillaient sur une nouvelle mouture qui a été publiée fin novembre 2018, EasyEngine v4.&lt;/p&gt;&#10;&lt;p&gt;Malheureusement, cette nouvelle version développée en PHP qui utilise WP-CLI et Docker ne réponds pas vraiment à mes besoins, et ne laisse (à l&amp;rsquo;heure actuelle) que très peu de place à la customisation, aussi bien au niveau des configurations Nginx, que des paquets/containers utilisés.&lt;/p&gt;&#10;&lt;p&gt;N&amp;rsquo;y voyez pas un reproche à l&amp;rsquo;encontre de ses créateurs, puisque je comprends tout à fait le choix fait par l&amp;rsquo;équipe de rtCamp, et il me semble tout à fait normal que l&amp;rsquo;outil qu&amp;rsquo;ils développent soit avant tout adapté à leurs besoins. Il me paraît d&amp;rsquo;ailleurs important de souligner qu&amp;rsquo;ils mettent à disposition, gratuitement, avec une simple licence MIT, une application très complète et documentée, et ceux depuis déjà plusieurs années (la première version d&amp;rsquo;EasyEngine a été publiée en 2014).&lt;/p&gt;&#10;&lt;p&gt;Finalement, c&amp;rsquo;est en parcourant les articles du blog d&amp;rsquo;EasyEngine fin Décembre, que j&amp;rsquo;ai découvert qu&amp;rsquo;un fork de la version 3 d&amp;rsquo;EasyEngine baptisé &lt;a class="link" href="https://wordops.net" target="_blank" rel="noopener"&#13;&#10; &gt;WordOps&lt;/a&gt; était actuellement en développement et qu&amp;rsquo;une première pre-release était disponible sur Github.&lt;/p&gt;&#10;&lt;p&gt;Ayant contribué de mon mieux au projet EasyEngine v3 en publiant un certain nombre de scripts ainsi que la majorité de mes configurations Nginx, j&amp;rsquo;ai été contacté par l&amp;rsquo;équipe de WordOps que j&amp;rsquo;ai finalement intégré début Février.&lt;/p&gt;&#10;&lt;p&gt;Nous avons publié la première version &amp;ldquo;stable&amp;rdquo; de l&amp;rsquo;application début Mai et il était donc temps de rédiger un article pour vous présenter WordOps.&lt;/p&gt;&#10;&lt;h3 id="wordops-quest-ce-que-cest-"&gt;WordOps qu&amp;rsquo;est ce que c&amp;rsquo;est ?&#13;&#10;&lt;/h3&gt;&lt;p&gt;C&amp;rsquo;est un outil en ligne de commande qui facilite l&amp;rsquo;administration d&amp;rsquo;un serveur et le déploiement de sites avec Nginx (notamment WordPress) en utilisant des commandes simples - faciles à mémoriser.&lt;/p&gt;&#10;&lt;h3 id="quels-sont-les-pré-requis-pour-installer-wordops-"&gt;Quels sont les pré-requis pour installer WordOps ?&#13;&#10;&lt;/h3&gt;&lt;p&gt;Du côté hardware, il n&amp;rsquo;y a pas vraiment de pré-requis, puisque l&amp;rsquo;application est développée en Python avec le framework Cement et ne nécessite que quelques mégaoctets d&amp;rsquo;espace disque pour le stockage des librairies.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Pour une utilisation en production&lt;/strong&gt;, les services installés et configurés par WordOps tel que Nginx, PHP-FPM ou MariaDB, nécessitent un minimum de ressources pour fonctionner. Ce minimum peut varier en fonction du trafic des sites hébergés. C&amp;rsquo;est pourquoi nous conseillons d&amp;rsquo;installer WordOps sur un serveur disposant d&amp;rsquo;au moins 2Go de RAM et si possible d&amp;rsquo;un processeur multi-core (qu&amp;rsquo;ils soient virtuels ou non) pour garantir le bon fonctionnement des différents services déployés avec WordOps et donc la disponibilité des sites hébergés.&lt;/p&gt;&#10;&lt;p&gt;Par contre, si vous comptez utiliser WordOps pour du développement, il devrait normalement fonctionner sur n&amp;rsquo;importe qu&amp;rsquo;elle machine/VM disposant de 512mo de RAM ou plus.&lt;/p&gt;&#10;&lt;p&gt;Nous avons d&amp;rsquo;ailleurs ajouté depuis peu le support de la distribution Raspbian 9, qui permet donc l&amp;rsquo;installation sur Raspberry Pi (nos tests ont été réalisés sur le modèle 3B+).&lt;/p&gt;&#10;&lt;p&gt;Du côté software, les distributions linux supportées sont :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Ubuntu 16.04 LTS (Xenial)&lt;/li&gt;&#10;&lt;li&gt;Ubuntu 18.04 LTS (Bionic)&lt;/li&gt;&#10;&lt;li&gt;Ubuntu 19.04 (Disco)&lt;/li&gt;&#10;&lt;li&gt;Debian 8 (Jessie)&lt;/li&gt;&#10;&lt;li&gt;Debian 9 (Stretch)&lt;/li&gt;&#10;&lt;li&gt;Raspbian 9 (Stretch)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="quelles-sont-ses-fonctionnalités-"&gt;Quelles sont ses fonctionnalités ?&#13;&#10;&lt;/h3&gt;&lt;p&gt;WordOps réalise non seulement l&amp;rsquo;installation et la configuration des paquets nécessaires au déploiement d&amp;rsquo;un site (Nginx, PHP, MariaDB) mais il s&amp;rsquo;occupe également de la création des vhosts Nginx, de la base de données, d&amp;rsquo;installer WordPress et même d&amp;rsquo;obtenir un certificat SSL Let&amp;rsquo;s Encrypt, le tout réalisable en une seule ligne de commande.&lt;/p&gt;&#10;&lt;p&gt;Dans le cas d&amp;rsquo;un site WordPress, vous disposez de plusieurs solutions de cache (optionelles) : Nginx fastcgi_cache, Redis (full page cache + object cache) ou WP-Super-Cache.&lt;/p&gt;&#10;&lt;p&gt;Enfin WordOps dispose d&amp;rsquo;un tableau de bord (que j&amp;rsquo;ai réalisé depuis un template bootstrap de &lt;a class="link" href="https://www.creative-tim.com/" target="_blank" rel="noopener"&#13;&#10; &gt;Creative Tim&lt;/a&gt; et avec la suite de monitoring Netdata) qui permet à la fois de monitorer le serveur mais également d&amp;rsquo;accéder à des outils tel que PhpMyAdmin, Adminer, eXtplorer, phpRedisAdmin etc.. Une démo est disponible à l&amp;rsquo;adresse suivante : &lt;a class="link" href="https://demo.wordops.eu/" target="_blank" rel="noopener"&#13;&#10; &gt;demo.wordops.eu&lt;/a&gt;.&lt;/p&gt;&#10;&lt;figure&gt;&lt;img src="https://jesuisadmin.fr/images/2019/05/demo.wordops.eu.jpg"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;h3 id="quest-ce-quil-y-a-sous-le-capot-"&gt;Qu&amp;rsquo;est ce qu&amp;rsquo;il y a sous le capot ?&#13;&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Nginx&lt;/strong&gt; stable v1.16.1 (custom) avec le support du HTTP/2 HPACK de Cloudflare, de la compression avec Brotli, et des modules tiers tel que ngx_cache_purge ou ngx_vts&lt;/li&gt;&#10;&lt;li&gt;PHP 7.2 &amp;amp; PHP 7.3&lt;/li&gt;&#10;&lt;li&gt;MariaDB server 10.3&lt;/li&gt;&#10;&lt;li&gt;Redis 5.0&lt;/li&gt;&#10;&lt;li&gt;Netdata pour le monitoring&lt;/li&gt;&#10;&lt;li&gt;Acme.sh pour la gestion des certificats SSL Let&amp;rsquo;s Encrypt&lt;/li&gt;&#10;&lt;li&gt;WP-CLI pour le déploiement des sites WordPress&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Et bien sûr, un ensemble de templates de configuration Nginx, qui ont pour objectif de délivrer les meilleures performances possibles ainsi qu&amp;rsquo;un niveau de sécurité optimale. Pour cela, WordOps utilise par exemple Nginx en tant que load-balancer pour répartir la charge sur les pools php-fpm en utilisant plusieurs unix sockets. On retrouve également un certain nombre de directives limitant l&amp;rsquo;accès et/ou l&amp;rsquo;exécution et le téléchargement de certains fichiers afin de bloquer les tentatives d&amp;rsquo;attaques régulièrement utilisées.&lt;/p&gt;&#10;&lt;h2 id="installer-wordops"&gt;Installer WordOps&#13;&#10;&lt;/h2&gt;&lt;p&gt;Un script pour automatiser l&amp;rsquo;installation de WordOps est bien sûr disponible, il s&amp;rsquo;exécute avec la commande suivante :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -qO wo wops.cc &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo bash wo&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si vous souhaitez installer manuellement WordOps, un guide est disponible dans la &lt;a class="link" href="https://docs.wordops.net/getting-started/installation-guide/" target="_blank" rel="noopener"&#13;&#10; &gt;documentation&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Durant l&amp;rsquo;installation, WordOps vous demandera un nom d&amp;rsquo;utilisateur et une adresse email. Ces informations sont &lt;strong&gt;uniquement utilisées&lt;/strong&gt; pour générer le fichier .gitconfig nécessaire au fonctionnement de git, qui est utilisé pour enregistrer les différentes configurations du serveur.&lt;/p&gt;&#10;&lt;h2 id="commencer-avec-wordops"&gt;Commencer avec WordOps&#13;&#10;&lt;/h2&gt;&lt;p&gt;Après avoir installé WordOps, la première étape est d&amp;rsquo;activer la complétion des commandes, il suffit pour cela d&amp;rsquo;utiliser la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; /etc/bash_completion.d/wo_auto.rc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nous pouvons donc commencer à utiliser les commandes WordOps, dont la structure est la suivante :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wo &amp;lt;commande&amp;gt; &lt;span class="o"&gt;[&lt;/span&gt;options&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous souhaitez obtenir la liste des commandes disponibles ? Rien de plus simple, utilisez la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wo&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez également obtenir des informations sur chacune des sous-commandes en ajoutant les arguments &lt;code&gt;-h&lt;/code&gt; ou &lt;code&gt;--help&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Exemple :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wo site create -h&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="installer-les-services-optionnel"&gt;Installer les services (optionnel)&#13;&#10;&lt;/h3&gt;&lt;p&gt;WordOps peut installer les services Nginx, PHP ou MySQL via la commande &lt;code&gt;wo stack&lt;/code&gt; ou n&amp;rsquo;installer que les services nécessaires lors de la création d&amp;rsquo;un site avec la commande &lt;code&gt;wo site create&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Si vous comptez utiliser WordOps pour héberger vos sites WordPress, il peut être intéressant de commencer par déployqer les services (Nginx, PHP 7.2, MariaDB) ainsi que les outils additionnels (phpMyAdmin, Adminer, OpcacheGui) qui seront disponibles dans le backend accessible via le port 22222 (exemple : https://IP.DU.SERVEUR:22222 ou &lt;a class="link" href="https://serveur.hostname:22222" target="_blank" rel="noopener"&#13;&#10; &gt;https://serveur.hostname:22222&lt;/a&gt;).&lt;/p&gt;&#10;&lt;p&gt;Pour déployer les services, la commande à utiliser est :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wo stack install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="créer-votre-premier-site"&gt;Créer votre premier site&#13;&#10;&lt;/h3&gt;&lt;p&gt;Que vous ayez suivi ou non l&amp;rsquo;étape précédente, vous pouvez créer votre premier site.&#10;La création de site se fait via la commande &lt;code&gt;wo site create&lt;/code&gt; avec la structure suivante :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wo site create &lt;span class="o"&gt;[&lt;/span&gt;&amp;lt;nom_de_domaine&amp;gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;type_de_site&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;options&lt;span class="o"&gt;]&lt;/span&gt; &amp;lt;options&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour vous donner un exemple relativement simple, nous allons créer un site WordPress, configuré avec PHP 7.3 et le système de cache nginx fastcgi_cache, sécurisé avec un certificat SSL Let&amp;rsquo;s Encrypt :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wo site create site.tld --wpfc --php73 --letsencrypt&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="quelques-points-à-retenir"&gt;Quelques points à retenir&#13;&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;par défaut et en l&amp;rsquo;absence de l&amp;rsquo;argument &lt;code&gt;--php73&lt;/code&gt;, WordOps utilisera PHP 7.2&lt;/li&gt;&#10;&lt;li&gt;l&amp;rsquo;argument &lt;code&gt;--wpfc&lt;/code&gt; définit le type de site, ici un site WordPress avec le système de cache Nginx fastcgi_cache. Vous pouvez découvrir tous les autres types de sites dans &lt;a class="link" href="https://docs.wordops.net/commands/site/#site-create" target="_blank" rel="noopener"&#13;&#10; &gt;la documentation&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;l&amp;rsquo;argument &lt;code&gt;--letsencrypt&lt;/code&gt; est optionel et peut être utilisé avec n&amp;rsquo;importe quel type de site. Si le site que vous souhaitez créer est un sous-domaine, utilisez alors l&amp;rsquo;argument &lt;code&gt;--letsencrypt=subdomain&lt;/code&gt; pour que WordOps n&amp;rsquo;essaye pas de générer un certificat SSL pour l&amp;rsquo;alias &lt;code&gt;www.site.tld&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Voici un exemple qui présente le fonctionnement général de WordOps :&lt;/p&gt;&#10;&lt;p&gt;&lt;video align="center" src="https://wordops.net/wp-content/uploads/2019/08/wordops-net-intro.mp4" width="840" autoplay loop &gt;&lt;/video&gt;&lt;/p&gt;&#10;&lt;h2 id="contribuer"&gt;Contribuer&#13;&#10;&lt;/h2&gt;&lt;p&gt;Comme pour la majorité des projets open-source, toute contribution est la bienvenue. Et il n&amp;rsquo;est pas nécessaire d&amp;rsquo;être un développeur ou un administrateur système pour contribuer.&lt;/p&gt;&#10;&lt;p&gt;Le simple fait de faire un signalement détaillé d&amp;rsquo;un bug dans l&amp;rsquo;application est une contribution au projet. Vous pouvez également participer à l&amp;rsquo;amélioration de la documentation de WordOps, qui peut facilement être éditée car elle est rédigée en markdown et hébergée dans un &lt;a class="link" href="https://github.com/WordOps/docs.wordops.net" target="_blank" rel="noopener"&#13;&#10; &gt;dépôt Github&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Si vous souhaitez contribuer directement au développement de WordOps, sachez que la rédaction d&amp;rsquo;un guide est en cours, avec un présentation détaillée des librairies utilisées et les règles à suivre notamment pour le style à appliquer au code (PEP8). Je mettrais à jour cet article dès que le guide sera publié sur le dépôt Github.&lt;/p&gt;&#10;&lt;h2 id="les-liens-utiles"&gt;Les liens utiles&#13;&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;le site du projet : &lt;a class="link" href="https://wordops.net" target="_blank" rel="noopener"&#13;&#10; &gt;https://wordops.net&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;le dépôt Github : &lt;a class="link" href="https://github.com/WordOps/WordOps" target="_blank" rel="noopener"&#13;&#10; &gt;https://github.com/WordOps/WordOps&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;le forum : &lt;a class="link" href="https://community.wordops.net/" target="_blank" rel="noopener"&#13;&#10; &gt;https://community.wordops.net/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;la documentation : &lt;a class="link" href="https://docs.wordops.net/" target="_blank" rel="noopener"&#13;&#10; &gt;https://docs.wordops.net/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;le compte twitter : &lt;a class="link" href="https://twitter.com/WordOps_" target="_blank" rel="noopener"&#13;&#10; &gt;https://twitter.com/WordOps_&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;le compte mastodon : &lt;a class="link" href="https://mastodon.top/@WordOps" target="_blank" rel="noopener"&#13;&#10; &gt;https://mastodon.top/@WordOps&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>Mettre en place un VPN Mesh avec tinc sur Debian/Ubuntu</title><link>https://jesuisadmin.fr/mettre-en-place-un-vpn-mesh-avec-tinc/</link><pubDate>Sat, 02 Mar 2019 15:07:54 +0000</pubDate><guid>https://jesuisadmin.fr/mettre-en-place-un-vpn-mesh-avec-tinc/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/12/Mettre-en-place-un-VPN-mesh-avec-tinc-sur-Debian_Ubuntu---Raspbian.jpg" alt="Featured image of post Mettre en place un VPN Mesh avec tinc sur Debian/Ubuntu" /&gt;&lt;p&gt;Il peut-être intéressant (ou nécessaire) de mettre en place un VPN pour inter-connecter plusieurs serveurs, principalement pour garantir le chiffrement des échanges entre ces derniers. Si des solutions comme OpenVPN sont très populaires car elles proposent des clients sur toutes les plateformes, elles ne sont pas nécessairement les plus pertinentes lorsqu&amp;rsquo;il s&amp;rsquo;agit de créer un réseau privé entre plusieurs serveurs linux. Pour répondre à ce besoin, il existe heureusement d&amp;rsquo;autres solutions, notamment Tinc, le sujet que nous allons aborder aujourd&amp;rsquo;hui.&lt;/p&gt;&#10;&lt;p&gt;Dans ce tutoriel nous allons voir comment installer la dernière version stable de Tinc et comment créer un réseau privé pour connecter 3 serveurs. Cet exemple est basé sur mon utilisation &lt;del&gt;actuelle&lt;/del&gt; précédente de Tinc, à savoir connecter mon raspberry pi (derrière un NAT) et mon cluster de stockage GlusterFS, réparti sur deux serveurs dédiés. Tinc était alors la solution à deux problématiques :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;établir une connexion securisée entre les noeuds GlusterFS (j&amp;rsquo;ai préféré mettre en place un VPN à cause des nombreux problèmes rencontrés avec les connexions SSL/TLS et GlusterFS 4.X)&lt;/li&gt;&#10;&lt;li&gt;accéder aux données d&amp;rsquo;un cluster GlusterFS depuis un client derrière un NAT&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure&gt;&lt;img src="https://jesuisadmin.fr/images/2019/01/Copie-de-Mettre-en-place-un-VPN-mesh-avec-tinc-sur-Debian_Ubuntu---Raspbian-1.jpg"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;Les termes utilisés dans ce tutoriel :&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;une instance Tinc = un réseau privé Tinc&lt;/li&gt;&#10;&lt;li&gt;un noeud = un serveur du réseau&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="installer-tinc"&gt;Installer Tinc&#13;&#10;&lt;/h2&gt;&lt;p&gt;La méthode la plus simple pour installer Tinc est d&amp;rsquo;utiliser les dépôts APT d&amp;rsquo;Ubuntu ou de Debian. Cependant les paquets disponibles ne sont pas vraiment à jour. La version actuelle de Tinc est 1.0.35, mais les dépôts Ubuntu ne propose que la version 1.0.33 et ceux de Debian la version 1.0.31.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Edit du 10/07/2019 : Les mises à jour de sécurité des paquets Debian sont rétro-actives sur les versions précédentes. Il n&amp;rsquo;y a donc pas de danger particulier à utiliser des versions antérieures à 1.0.35 sur Debian.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Il est donc préférable/recommandé de compiler Tinc depuis les sources, notamment lorsqu&amp;rsquo;on sait que la version 1.0.35 est une release de sécurité suite à la découverte de deux failles qui touchent toutes les versions antérieures (CVE-2018-16737, CVE-2018-16738).&lt;/p&gt;&#10;&lt;p&gt;Ajout du 10/07/2019 : Pour simplifer l&amp;rsquo;installation sur Ubuntu 18.04 LTS, j&amp;rsquo;ai réalisé un backport du paquet tinc 1.0.35 depuis les dépôts d&amp;rsquo;Ubuntu 19.04. Le backport est disponible via le service PPA launchpad : &lt;a class="link" href="https://launchpad.net/~virtubox/&amp;#43;archive/ubuntu/tinc" target="_blank" rel="noopener"&#13;&#10; &gt;https://launchpad.net/~virtubox/+archive/ubuntu/tinc&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Cette version n&amp;rsquo;est pas vulnérable aux CVE-2018-16737 et CVE-2018-16738.&#10;Pour l&amp;rsquo;installer rien de plus simple :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo add-apt-repository ppa:virtubox/tinc -u -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install tinc -t bionic-backports&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="compilation"&gt;Compilation&#13;&#10;&lt;/h3&gt;&lt;p&gt;On commence par installer les dépendances permettant de compiler tinc :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install git libssl-dev zlib1g-dev liblzo2-dev &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;build-essential automake autoconf gettext texinfo -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on clone le dépôt Git :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /usr/local/src&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone git://tinc-vpn.org/tinc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; tinc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On réalise la configuration avant de compiler :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;autoreconf -fsi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure --prefix&lt;span class="o"&gt;=&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on lance la compilation :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -j définit le nombre de threads utilisés pour la compilation&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# $(nproc) permet d&amp;#39;obtenir le nombre de threads disponibles sur le CPU&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make -j&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;nproc&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si la compilation se déroule sans erreur, on peut alors installer tinc avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo make install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ajout-des-services-systemd"&gt;Ajout des services systemd&#13;&#10;&lt;/h3&gt;&lt;p&gt;La dernière étape pour terminer l&amp;rsquo;installation est la création des services systemd permettant d&amp;rsquo;exécuter Tinc et ses instances (réseaux privés) dès le démarrage de la machine.&#10;Il faut en effet créer deux services distincts, le premier permettant de gérer l&amp;rsquo;exécution de Tinc, et le second l&amp;rsquo;exécution des instances Tinc (sous le format tinc@nom_du_reseau).&lt;/p&gt;&#10;&lt;h4 id="le-service-tinc"&gt;Le service tinc&#13;&#10;&lt;/h4&gt;&lt;p&gt;Le fichier à créer est &lt;code&gt;/lib/systemd/system/tinc.service&lt;/code&gt; dont le contenu est le suivant :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-service" data-lang="service"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# This is a mostly empty service, but allows commands like stop, start, reload&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# to propagate to all tinc@ service instances.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Unit]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;Tinc VPN&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;network.target&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Service]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;oneshot&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;RemainAfterExit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/bin/true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;ExecReload&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/bin/true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;WorkingDirectory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/etc/tinc&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Install]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;multi-user.target&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut ensuite activer le service via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; tinc.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="le-service-pour-les-instances-tinc"&gt;Le service pour les instances tinc@&#13;&#10;&lt;/h4&gt;&lt;p&gt;Le second service qui permet la gestion des instances Tinc est à créer dans &lt;code&gt;/lib/systemd/system/tinc@.service&lt;/code&gt;, voici son contenu :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-service" data-lang="service"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Unit]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;Tinc net %i&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;PartOf&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;tinc.service&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;ReloadPropagatedFrom&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;tinc.service&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Service]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;simple&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;WorkingDirectory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/etc/tinc/%i&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/usr/sbin/tincd -n %i -D&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;ExecReload&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/usr/sbin/tincd -n %i -kHUP&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;KillMode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;mixed&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;TimeoutStopSec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;5&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;always&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;RestartSec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;60&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Install]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;tinc.service&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il permettra par la suite d&amp;rsquo;activer séparément les réseaux privés (instances) Tinc via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; tinc@nom_du_reseau&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il n&amp;rsquo;est donc pas nécessaire d&amp;rsquo;utiliser cette commande immédiatement, puisqu&amp;rsquo;il faut tout d&amp;rsquo;abord réaliser la configuration de notre réseau privé.&lt;/p&gt;&#10;&lt;h2 id="configurer-tinc"&gt;Configurer Tinc&#13;&#10;&lt;/h2&gt;&lt;h3 id="la-configuration-dune-instance-tinc"&gt;La configuration d&amp;rsquo;une instance Tinc&#13;&#10;&lt;/h3&gt;&lt;p&gt;L&amp;rsquo;ensemble des fichiers de configuration de Tinc sont à placer dans le répertoire &lt;code&gt;/etc/tinc&lt;/code&gt;, dans lequel la configuration de chaque instance se fera dans un répertoire portant le nom de l&amp;rsquo;instance.&lt;/p&gt;&#10;&lt;p&gt;Quelques informations sur la configuration utilisée pour notre exemple :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;notre instance/réseau privé se nomme &lt;code&gt;jesuisadmin_reseau&lt;/code&gt;, sa configuration se trouve donc dans le répertoire &lt;code&gt;/etc/tinc/jesuisadmin_reseau&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;nos 3 serveurs se nomment respectivement gfs1, gfs2 et rbpy.&lt;/li&gt;&#10;&lt;li&gt;Nous avons choisi d&amp;rsquo;utiliser la plage d&amp;rsquo;adresses 10.0.0.0/24 pour notre réseau privé Tinc&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Afin vous donner tout de suite une vue d&amp;rsquo;ensemble de la configuration d&amp;rsquo;un réseau privé avec Tinc, voici le répertoire de configuration du réseau jesuisadmin_reseau, une fois toutes les étapes du tutoriel terminées :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── jesuisadmin_reseau&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── hosts&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   │   ├── gfs1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   │   ├── gfs2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   │   └── rbpy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── rsa_key.priv&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── tinc-down&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── tinc-up&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── tinc.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On y retrouve :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;tinc.conf&lt;/strong&gt; : fichier de configuration principal qui contient notamment le nom de la machine, l&amp;rsquo;interface réseau à utiliser et le protocole de l&amp;rsquo;instance (ipv4/ipv6).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;tinc-up&lt;/strong&gt; et &lt;strong&gt;tinc-down&lt;/strong&gt; : les scripts permettant de démarrer et d&amp;rsquo;arrêter l&amp;rsquo;instance Tinc&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;rsa_key.priv&lt;/strong&gt; : la clé privée du serveur&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;répertoire hosts&lt;/strong&gt; : le répertoire qui contient les configurations partagées de chacun des noeuds connectés au réseau privé.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Les étapes pour configurer nos 3 machines vont donc être :&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Réaliser la configuration initiale de chaque machine&lt;/li&gt;&#10;&lt;li&gt;Générer les clés publiques/privées de chaque machine&lt;/li&gt;&#10;&lt;li&gt;Synchroniser le répertoire hosts entre les machines&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="configuration-initiale"&gt;Configuration initiale&#13;&#10;&lt;/h3&gt;&lt;p&gt;&amp;ndash; &lt;strong&gt;À réaliser sur les 3 serveurs&lt;/strong&gt; &amp;ndash;&lt;/p&gt;&#10;&lt;p&gt;On commence donc par créer le répertoire &lt;code&gt;/etc/tinc/jesuisadmin_reseau&lt;/code&gt; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /etc/tinc/jesuisadmin_reseau&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on créer le fichier de configuration principal tinc.conf dans ce nouveau répertoire :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nano /etc/tinc/jesuisadmin_reseau/tinc.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans lequel nous allons définir la configuration de notre réseau privé, en commençant par &lt;strong&gt;gfs1&lt;/strong&gt; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Interface réseau à utiliser&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Interface&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; tun0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Identifiant de la machine sur le VPN&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gfs1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;AddressFamily&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ipv4&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On réalise la même opération sur &lt;strong&gt;gfs2&lt;/strong&gt;, avec une petite différence dans le fichier tinc.conf puisqu&amp;rsquo;on y ajoute la directive &lt;code&gt;ConnectTo&lt;/code&gt; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Interface réseau à utiliser&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Interface&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; tun0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Identifiant de la machine sur le VPN&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gfs2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;AddressFamily&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ipv4&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# sur le client&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ConnectTo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; gfs1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On termine par le troisième serveur &lt;strong&gt;rbpy&lt;/strong&gt; dont la configuration sera similaire à gfs2 :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Interface réseau à utiliser&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Interface&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; tun0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Identifiant de la machine sur le VPN&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;rbpy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;AddressFamily&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ipv4&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# sur le client&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ConnectTo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; gfs2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="générer-les-clés-publiquesprivées"&gt;Générer les clés publiques/privées&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour pouvoir initier la connexion entre les différents serveurs, Tinc se base sur un échange de clés cryptographiques, sur le même principe que les clés SSH. Il faut donc créer un répertoire &lt;code&gt;hosts&lt;/code&gt; dans lequel nous allons définir les adresses IP publiques et privées de chacun des serveurs, ainsi que leurs clés publiques.&lt;/p&gt;&#10;&lt;p&gt;On commence donc par créer le répertoire hosts :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /etc/tinc/jesuisadmin_reseau/hosts&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Avant de générer la clé publique et privée d&amp;rsquo;un serveur, en utilisant la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tincd -n jesuisadmin_reseau -K4096&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;L&amp;rsquo;argument &lt;code&gt;-K4096&lt;/code&gt; définit la taille de la clé RSA à générer. Lors de l&amp;rsquo;exécution de cette commande, vous devriez obtenir deux nouveaux fichiers :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;la clé privée du serveur &lt;code&gt;/etc/tinc/jesuisadmin_reseau/rsa_key.priv&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;la clé publique du serveur dans le fichier de configuration portant le nom de l&amp;rsquo;hôte : &lt;code&gt;/etc/tinc/jesuisadmin_reseau/hosts/nom_du_serveur&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Dans ce dernier fichier, nous allons devoir ajouter avant la clé publique, l&amp;rsquo;adresse publique et privée de l&amp;rsquo;hôte. Il est également possible d&amp;rsquo;y ajouter d&amp;rsquo;autres paramètres, comme par exemple les ciphers à utiliser pour la connexion.&lt;/p&gt;&#10;&lt;p&gt;Voici un exemple de fichier de configuration pour le serveur gfs1 :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Address = 5.9.XXX.XXX&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Subnet = 10.0.0.1/32&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cipher=aes-256-cbc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Digest=sha256&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-----BEGIN RSA PUBLIC KEY-----&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;MIICCgKCAgEApd4Gf48I1Cnvgb8Hw67yIWmlhoe9yiz80Fr1IF0gjjbDpzsZwkg+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6r7KaDIWmVdoSYiOlrutohH0105daS+YyJbTVP6heGYAlStVqMFL/rT2CbZvYEfe&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;F1l/PYtEGrbTRJDQgpwByXbmgvha2DcKBJFcfduH85FnYv7KzZ94vmYBwhZe8ArA&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;f/0XeEpR7fYfIdxN7Z5jS0olkd5mUyrpXVwkmbJ/9q3j5vuVMon9BLDAf1XP4oXn&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ehRPLdh39XswFfF35rrxtLy03a+iPTZuhDBbVl2V/UVcVtyQHUNwTzrOvqBgYfaa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Q2L8hW6U/bvvOpj2NCN3YIm8cDR2NNScORXVSqm0xpTk+vCjETrOpBGR1z2JEWdT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3nPw+a7oAwfgCzSOvRx1MW+w1GqF+iil/ADQXcQa78i0xRIl/xCG0taI5EdUnRAq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7R5Y2kDtMt6LUdvOLPGpYFdIP859jTxSXSkkvWeEO7syuvVMdMLfBIGG1zczqQ6+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RLKCV+l0JwZpw4YEiJLHlzZQax3J7eBxlsv3gJoEWeuPZaPP/dUcREisqhrXLLT3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Jiq+aqMolbSzcXvRIGrcNVko4d82SStzpSJwehREhyDrgzOSMhEhTy7m/G3YvcGQ&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;v0F0bnuk1tqf6VUT9+MTBstaRTLEaRsc5RqI26lkCWwfO7c0WHkDLg0CAwEAAQ==&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-----END RSA PUBLIC KEY-----&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans lequel on retrouve les options :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Address&lt;/strong&gt; est l&amp;rsquo;IP publique du serveur&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Subnet&lt;/strong&gt; est l&amp;rsquo;IP privée du serveur&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Cipher&lt;/strong&gt; &amp;amp; &lt;strong&gt;Digest&lt;/strong&gt; les paramètres TLS (facultatif)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="synchroniser-le-répertoire-hosts"&gt;Synchroniser le répertoire hosts&#13;&#10;&lt;/h3&gt;&lt;p&gt;Une fois cette étape réalisée sur chacun des serveur, il faut également procéder à l&amp;rsquo;échange des clés publiques entre les serveurs. Autrement dit, le contenu du répertoire hosts doit être le même sur chaque serveur. Dans notre cas, on doit y retrouver trois fichiers configurations : gfs1, gfs2 et rpby.&lt;/p&gt;&#10;&lt;p&gt;Vous êtes libre d&amp;rsquo;utiliser la méthode de votre choix pour synchroniser le contenu du répertoire hosts entre vos serveurs, voici quelques propositions pour échanger les fichiers de configuration entre les serveur :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Synchroniser le répertoire avec rsync&lt;/li&gt;&#10;&lt;li&gt;Transférer les fichiers avec scp&lt;/li&gt;&#10;&lt;li&gt;Utiliser un dépôt git pour ajouter chaque serveur&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Une fois de répertoire hosts synchronisé entre les serveurs, il ne reste plus qu&amp;rsquo;à configurer les scripts d&amp;rsquo;initialisation et d&amp;rsquo;arrêt de Tinc.&lt;/p&gt;&#10;&lt;h3 id="configuration-des-exécutables-tinc"&gt;Configuration des exécutables Tinc&#13;&#10;&lt;/h3&gt;&lt;p&gt;La dernière étape avant de pouvoir connecter nos serveurs est la création des scripts exécutables de créer et démarrer/arrêter l&amp;rsquo;interface réseau virtuelle utilisée pour se connecter au réseau privé. Pour cela il faut créer les fichiers tinc-up et tinc-down dans /etc/tinc/jesuisadmin_reseau dont voici le contenu pour gfs1 :&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;tinc-up&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# /etc/tinc/jesuisadmin_reseau/tinc-up&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip addr add 10.0.0.1/24 dev &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ifconfig &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt; up&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;tinc-down&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# /etc/tinc/jesuisadmin_reseau/tinc-down&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ifconfig &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt; down&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sur les deux autres serveurs, le contenu des deux scripts sera quasiment le même, puisque l&amp;rsquo;unique différence sera l&amp;rsquo;adresse IP de l&amp;rsquo;interface réseau.&lt;/p&gt;&#10;&lt;p&gt;Une fois les deux fichiers créés sur chacun des serveurs, il ne reste plus qu&amp;rsquo;à les rendre exécutables :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod &lt;span class="m"&gt;755&lt;/span&gt; /etc/tinc/jesuisadmin_reseau/tinc-*&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="démarrer-et-administrer-tinc"&gt;Démarrer et administrer Tinc&#13;&#10;&lt;/h2&gt;&lt;h3 id="vérifier-la-configuration-du-pare-feu"&gt;Vérifier la configuration du pare-feu&#13;&#10;&lt;/h3&gt;&lt;p&gt;Avant d&amp;rsquo;initialiser la connexion entre les serveurs, il est important de faire une vérification : le port utilisé par Tinc est-il ouvert ?&#10;Par défaut, Tinc utilise le port 655, qu&amp;rsquo;il est donc nécessaire d&amp;rsquo;ouvrir préalablement. Si vous utilisez ufw, il vous suffit d&amp;rsquo;utiliser la commande&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow &lt;span class="m"&gt;655&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mais vous pouvez également le faire directement via iptables :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables INPUT -p tcp --dport &lt;span class="m"&gt;655&lt;/span&gt; -j ACCEPT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables INPUT -p udp --dport &lt;span class="m"&gt;655&lt;/span&gt; -j ACCEPT&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="démarrer-et-arrêter-tinc"&gt;Démarrer et arrêter Tinc&#13;&#10;&lt;/h3&gt;&lt;p&gt;Si vous avez réussi à suivre toutes les étapes du tutoriel, vous êtes enfin arrivés**** au bout du tunnel (meilleur jeu de mot de l&amp;rsquo;année) puisque vous allez pouvoir initialiser votre réseau privé depuis votre premier noeud. Cela peut se faire directement via la commande &lt;code&gt;tincd&lt;/code&gt; ou en utilisant un service systemd.&lt;/p&gt;&#10;&lt;h4 id="avec-tincd"&gt;Avec tincd&#13;&#10;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;démarrer le réseau jesuisadmin_reseau&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tincd -n jesuisadmin_reseau&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez ensuite vérifier avec &lt;code&gt;ifconfig&lt;/code&gt; ou &lt;code&gt;ip addr show&lt;/code&gt; que la création de l&amp;rsquo;interface réseau &lt;code&gt;tun0&lt;/code&gt; s&amp;rsquo;est bien déroulée et que l&amp;rsquo;adresse IP de cette dernière correspond bien à votre configuration. Il ne reste plus qu&amp;rsquo;à tester le ping entre vos machines.&lt;/p&gt;&#10;&lt;p&gt;Un problème de connexion ? Vous pouvez à tout moment arrêter la connexion au réseau tinc avec la commande suivante :&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;arrêter le réseau jesuisadmin_reseau&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tincd -n jesuisadmin_reseau -k&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="avec-un-service-systemd"&gt;Avec un service systemd&#13;&#10;&lt;/h4&gt;&lt;p&gt;Pour utiliser un service systemd, il faut tout d&amp;rsquo;abord activer le service associé à notre instance Tinc, ce qui se fait via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; tinc@jesuisadmin_reseau&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut ensuite démarrer le service via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo service tinc@jesuisadmin_reseau start&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="et-après-"&gt;Et après ?&#13;&#10;&lt;/h2&gt;&lt;p&gt;Une fois la connexion entre les noeuds établie, vous pouvez librement utiliser votre réseau privé pour faire transiter vos données entre les serveurs.&lt;/p&gt;&#10;&lt;p&gt;Il sera peut-être nécessaire d&amp;rsquo;autoriser le trafic depuis le sous-réseau utilisé par Tinc via votre pare-feu. Dans le cas d&amp;rsquo;UFW, cela se fait via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ufw allow from 10.0.0.0/24&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Enfin pour un usage derrière un NAT, il vous suffit d&amp;rsquo;ajouter une redirection de port sur votre routeur/box pour pouvoir connecter votre serveur au réseau privé.&lt;/p&gt;&#10;</description></item><item><title>Installer MariaDB 10.3 sur Ubuntu 18.04 LTS</title><link>https://jesuisadmin.fr/installer-mariadb-10-3-ubuntu-18-04-lts/</link><pubDate>Sun, 03 Jun 2018 17:08:32 +0000</pubDate><guid>https://jesuisadmin.fr/installer-mariadb-10-3-ubuntu-18-04-lts/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/MariaDB-10.3-1.jpg" alt="Featured image of post Installer MariaDB 10.3 sur Ubuntu 18.04 LTS" /&gt;&lt;p&gt;La nouvelle version stable de MariaDB a été publiée le 25 Mai 2018, avec la release 10.3.7. Dans ce tutoriel, nous allons voir comment installer MariaDB 10.3 sur Ubuntu 18.04 LTS et comment mettre à jour MariaDB 10.2 vers la version 10.3&lt;/p&gt;&#10;&lt;p&gt;Ce tutoriel est également applicable à Ubuntu 16.04 LTS&lt;/p&gt;&#10;&lt;p&gt;Il est tout d&amp;rsquo;abord important de préciser que les versions précédentes du serveur de base de données restent supportées jusqu&amp;rsquo;en 2020 pour la version 10.1 et 2022 pour la version 10.2. Il n&amp;rsquo;y a donc aucune raison de se précipiter pour effectuer la mise à jour sur votre serveur.&lt;/p&gt;&#10;&lt;p&gt;Cependant, comme le précise les notes de publications de MariaDB, la version 10.3 est une évolution de la version 10.2, avec de nombreuses nouvelles fonctionnalités, mais toujours les fonctionalités backportées et réimplémentées de MySQL.&lt;/p&gt;&#10;&lt;p&gt;On peut même trouver le message suivant dans l&amp;rsquo;article concernant la mise à jour de MariaDB 10.2 vers la version 10.3 :&lt;/p&gt;&#10;&#13;&#10; &lt;blockquote&gt;&#13;&#10; &lt;p&gt;On most servers upgrading from 10.2 should be painless&lt;/p&gt;&#10;&#13;&#10; &lt;/blockquote&gt;&#13;&#10;&lt;p&gt;La majorité de mes serveurs utilisant déjà MariaDB 10.2, j&amp;rsquo;ai souhaité vérifier si la mise à jour se faisait effectivement sans problème.&lt;/p&gt;&#10;&lt;h2 id="installer-mariadb-103"&gt;Installer MariaDB 10.3&#13;&#10;&lt;/h2&gt;&lt;p&gt;La première étape, que ce soit sur pour installer MariaDB sur un nouveau serveur, ou pour mettre à jour MariaDB 10.2 est l&amp;rsquo;ajout des dépôts APT. Et pour cela MariaDB propose un script qui réalise l&amp;rsquo;ajout des dépots et l&amp;rsquo;importation des clés GPG automatiquement. Il est compatible avec les distributions linux les plus populaires : Ubuntu 14/16/18.04 LTS - Debian 7/8/9 - Centos 6/7&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; sudo bash -s -- --mariadb-server-version&lt;span class="o"&gt;=&lt;/span&gt;10.3 --skip-maxscale&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ce script réalise l&amp;rsquo;ajout des dépôts APT pour MariaDB Server/Cluster et Percona XtraBackup. L&amp;rsquo;argument &lt;code&gt;--mariadb-server-version=&lt;/code&gt; permet de choisir la version de MariaDB que l&amp;rsquo;on souhaite installer (10.1 ou 10.2 ou 10.3). Et l&amp;rsquo;argument &lt;code&gt;--skip-maxscale&lt;/code&gt; désactive l&amp;rsquo;ajout des dépôts de MariaDB MaxScale.&lt;/p&gt;&#10;&lt;h4 id="sur-un-nouveau-serveur"&gt;Sur un nouveau serveur&#13;&#10;&lt;/h4&gt;&lt;p&gt;S&amp;rsquo;il s&amp;rsquo;agit d&amp;rsquo;une installation initiale, sur un nouveau serveur, après avoir ajouté les dépôts APT, il vous suffit d&amp;rsquo;installer le paquet mariadb-server&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt-get install mariadb-server -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Durant l&amp;rsquo;installation, vous pouvez définir le mot de passe root, ou le laisser vide afin d&amp;rsquo;utiliser ensuite la commande &lt;code&gt;mysql_secure_installation&lt;/code&gt; qui permet de sécuriser un serveur MySQL en répondant à quelques questions.&lt;/p&gt;&#10;&lt;h4 id="mise-à-jour-depuis-mariadb-102"&gt;Mise à jour depuis MariaDB 10.2&#13;&#10;&lt;/h4&gt;&lt;p&gt;Pour mettre à jour MariaDB depuis la version 10.2 vers la version 10.3, il est nécessaire de prendre quelques précautions avant de mettre à jour les paquets pour être sûr de ne pas perdre de données.&lt;/p&gt;&#10;&lt;p&gt;Pour cela, le plus simple est de réaliser une copie du dossier /var/lib/mysql qui contient vos bases de données avant de désinstaller mariadb&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on arrête le serveur MySQL&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo service mysql stop&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on copie le dossier /var/lib/mysql&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp -rf /varlib/mysql /var/lib/mysqlold&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on désinstalle mariadb 10.2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get autoremove mariadb-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut ensuite remplacer les dépôts APT de la version 10.2 par ceux de la version 10.3 en utilisant le script mariadb_repo_setup&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; sudo bash -s -- --mariadb-server-version&lt;span class="o"&gt;=&lt;/span&gt;10.3 --skip-maxscale&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis mettre à jour la liste des dépôts :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La dernière étape est de lancer l&amp;rsquo;installation de la nouvelle version de mariadb&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install mariadb-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Durant la mise à jour, vous pouvez laisser le mot de passe root vide pour conserver celui que vous avez définit précédemment.&lt;/p&gt;&#10;&lt;p&gt;Une fois la mise à jour terminée, vous pouvez vérifié le status de MariaDB avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;service mysql status&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si la mise s&amp;rsquo;est bien déroulée, n&amp;rsquo;oubliez pas d&amp;rsquo;utiliser la commande &lt;code&gt;mysql_upgrade&lt;/code&gt; pour mettre à jour vos base de données.&#10;Si vous n&amp;rsquo;avez placé les identfiants du serveur MySQL dans un fichier .my.cnf, &lt;code&gt;mysql_upgrade&lt;/code&gt; s&amp;rsquo;utilise de la même façon que &lt;code&gt;mysql&lt;/code&gt; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mysql_upgrade -u root -p&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="revenir-à-mariadb-102"&gt;Revenir à MariaDB 10.2&#13;&#10;&lt;/h3&gt;&lt;p&gt;J&amp;rsquo;ai déjà réalisé cette mise à jour sur 6 serveurs sans rencontrer le moindre problème. Mais dans le cas d&amp;rsquo;un problème suite à la mise à jour, vous pouvez à tout moment revenir sur la version 10.2 en utilisant la copie du dossier /var/lib/mysql réalisée plus tôt.&lt;/p&gt;&#10;&lt;p&gt;Commencez par remettre en place les dépôts APT de MariaDB 10.2, qui sont normalement récupérable dans un fichier nommé mariadb.list.old_1&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# cp -f /etc/apt/sources.list.d/mariadb.list.old_1 /etc/apt/sources.list.d/mariadb.list&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mais que vous pouvez également ajouter en utilisant le script mariadb_repo_setup :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; sudo bash -s -- --mariadb-server-version&lt;span class="o"&gt;=&lt;/span&gt;10.2 --skip-maxscale&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensuite, désinstaller mariadb-server&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get autoremove mariadb-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et Remplacez le dossier /var/lib/mysql avec le contenu du dossier /var/lib/mysqlold&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on déplace le dossier /var/lib/mysql&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv /var/lib/mysql /var/lib/mysqlnew&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on remet en place le dossier /var/lib/mysqlold&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv /var/lib/mysqlold /var/lib/mysql&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on définit à nouveau le propriétaire du dossier&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chown -R mysql:mysql /var/lib/mysql&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La dernière étape est de réinstaller MariaDB 10.2&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install mariadb-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Configuration réseau d'une machine virtuelle KVM sur Proxmox</title><link>https://jesuisadmin.fr/configuration-reseau-machine-virtuelle-kvm-proxmox/</link><pubDate>Wed, 09 May 2018 21:14:42 +0000</pubDate><guid>https://jesuisadmin.fr/configuration-reseau-machine-virtuelle-kvm-proxmox/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/05/R-seau-Proxmox.png" alt="Featured image of post Configuration réseau d'une machine virtuelle KVM sur Proxmox" /&gt;&lt;p&gt;Si la configuration réseau d&amp;rsquo;un container LXC peut s&amp;rsquo;effectuer directement depuis l&amp;rsquo;interface web de Proxmox VE, il &lt;del&gt;est&lt;/del&gt; était nécessaire (et pénible) de la réaliser via la console NoVNC pour les machines virtuelles KVM tournant sous Debian/Ubuntu.&lt;/p&gt;&#10;&lt;p&gt;Nous allons voir dans ce tutoriel, comment configurer le réseau d&amp;rsquo;une machine virtuelle KVM en utilisant qemu-nbd, qui permet de monter le disque d&amp;rsquo;une VM et donc d&amp;rsquo;accéder directement aux fichiers de configuration des interfaces réseau.&#10;Si la procédure peut sembler longue pour configurer une seule VM, il sera tout à fait possible de l&amp;rsquo;automatiser avec un script bash par la suite.&lt;/p&gt;&#10;&lt;p&gt;PS : Alors que j&amp;rsquo;écris ces lignes, le module cloud-init a déjà fait son apparition sur Proxmox VE 5.1, et représentera très probablement une excellente alternative à la solution présentée dans cette article. Mais cela fera sûrement l&amp;rsquo;objet d&amp;rsquo;un autre article.&lt;/p&gt;&#10;&lt;h2 id="installer-le-client-nbd"&gt;Installer le client nbd&#13;&#10;&lt;/h2&gt;&lt;p&gt;Pour commencer, il faut installer le client nbd sur votre serveur Proxmox.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install nbd-client -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis charger le module :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modprobe nbd &lt;span class="nv"&gt;max_part&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et enfin, pour rendre la configuration persistente, on utilise :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;nbd&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/modules&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; /etc/modprobe.d/nbd.conf &lt;span class="s"&gt;&amp;lt;&amp;lt;\EOT&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;options nbd max_part=16&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOT&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="monter-le-disque-dun-vm-avec-qemu-nbd"&gt;Monter le disque d&amp;rsquo;un VM avec qemu-nbd&#13;&#10;&lt;/h2&gt;&lt;h3 id="cas-dune-machine-virtuelle-sans-lvm"&gt;Cas d&amp;rsquo;une machine virtuelle sans LVM&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour monter le disque d&amp;rsquo;une VM, on utilise &lt;code&gt;qemu-nbd&lt;/code&gt; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-nbd -c /dev/nbd0 vm-101* -f raw&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;vm-101 correspond à l&amp;rsquo;ID de la machine virtuelle dans Proxmox.&lt;/p&gt;&#10;&lt;p&gt;On créer ensuite un dossier dans lequel nous allons pouvoir monter le disque de la machine virtuelle :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/nbd0p1 /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="cas-dune-machine-virtuelle-avec-lvm"&gt;Cas d&amp;rsquo;une machine virtuelle avec LVM&#13;&#10;&lt;/h3&gt;&lt;p&gt;Dans le cas d&amp;rsquo;un LVM, il n&amp;rsquo;est pas possible de monter directement la partition car il faut pour cela connaître le nom du volume group qui contient les fichiers de configuration.&lt;/p&gt;&#10;&lt;p&gt;La procédure pour monter le disque est quasiment la même que précédemment :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-nbd -c /dev/nbd0 vm-101*&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mais cette fois-ci on utilise &lt;code&gt;vgscan&lt;/code&gt; pour détecter les volume groups disponibles&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vgscan&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On obtient alors la liste des volume group et on active le volume auquel on souhaite accéder :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vgchange -a y vp-vg&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nous pouvons alors monter le VG :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/vp-vg/root /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configurer-linterface-réseau"&gt;Configurer l&amp;rsquo;interface réseau&#13;&#10;&lt;/h2&gt;&lt;p&gt;Maintenant que le disque de notre machine virtuelle est monté dans le répertoire &lt;code&gt;/mnt/ma-vm&lt;/code&gt;, nous pouvons modifier la configuation de ses interfaces réseau.&#10;On se déplace à la racine du disque :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /mnt/ma-vm/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et nous pouvons modifier directement le fichier &lt;code&gt;/etc/network/interfaces&lt;/code&gt; dans le cas d&amp;rsquo;une machine virtuelle tournant sous Debian ou Ubuntu (exemple avec Ubuntu 16.04 LTS sur un serveur dédié OVH) :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; etc/network/interfaces &lt;span class="s"&gt;&amp;lt;&amp;lt; EOF&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;auto ens18&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;iface ens18 inet static&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; address IP.FAIL.OVER&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; netmask 255.255.255.255&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; broadcast IP.FAIL.OVER&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; post-up route add IP.SERVEUR.DEDIE.254 dev ens18&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; post-up route add default gw IP.SERVEUR.DEDIE.254&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; pre-down route del IP.SERVEUR.DEDIE.254 dev ens18&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; pre-down route del default gw IP.SERVEUR.DEDIE.254&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; # dns-* options are implemented by the resolvconf package, if installed&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; dns-nameservers 213.186.33.99&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;iface ens18 inet6 static&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; address IP:V6:FAIL:OVER&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; netmask 64&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; post-up /sbin/ip -f inet6 route add XXXX:XXXX:XXX:XXff:ff:ff:ff:ff dev ens18&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; post-up /sbin/ip -f inet6 route add default via XXXX:XXXX:XXX:XXff:ff:ff:ff:ff&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; pre-down /sbin/ip -f inet6 route del XXXX:XXXX:XXX:XXff:ff:ff:ff:ff dev ens18&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; pre-down /sbin/ip -f inet6 route del default via XXXX:XXXX:XXX:XXff:ff:ff:ff:ff&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="terminer-la-configuration"&gt;Terminer la configuration&#13;&#10;&lt;/h2&gt;&lt;p&gt;Une fois la modification terminée, nous pouvons démonter le disque de la VM.&lt;/p&gt;&#10;&lt;h3 id="sans-lvm"&gt;Sans LVM&#13;&#10;&lt;/h3&gt;&lt;p&gt;Sans LVM, la méthode est la même que pour monter le disque&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;umount /dev/nbd0p1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-nbd -d /dev/nbd0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -r /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="avec-lvm"&gt;Avec LVM&#13;&#10;&lt;/h3&gt;&lt;p&gt;Avec LVM, il faut utiliser à nouveau vgchange de désactiver le volume group :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;umount /dev/vp-vg/root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vgchange -a n vp-vg&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-nbd -d /dev/nbd0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -r /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dernière étapes, redémarrer la machine virtuelle pour appliquer les modificiations. J&amp;rsquo;espère que cet article vous aidera à automatiser un peu plus vos création de machines virtuelles.&lt;/p&gt;&#10;</description></item><item><title>Migrer ses emails facilement avec imapsync</title><link>https://jesuisadmin.fr/migrer-emails-facilement-imapsync/</link><pubDate>Sat, 21 Apr 2018 18:53:00 +0000</pubDate><guid>https://jesuisadmin.fr/migrer-emails-facilement-imapsync/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/imapsync-min.jpg" alt="Featured image of post Migrer ses emails facilement avec imapsync" /&gt;&lt;p&gt;Si la migration de sites web ne pose généralement pas de problème, il est parfois plus délicat de migrer des emails, notamment lorsque deux serveurs n&amp;rsquo;utilisent pas le même software ou lorsqu&amp;rsquo;il s&amp;rsquo;agit d&amp;rsquo;une migration depuis/vers un hébergeur tiers. Heureusement pour simplifier cette étape, il existe de nombreux outils, dont imapsync qui est celui dont nous allons parler aujourd&amp;rsquo;hui.&lt;/p&gt;&#10;&lt;p&gt;imapsync est comme son nom l&amp;rsquo;indique un outil (développé en perl) qui permet de synchroniser des boîtes mail en utilisant le protocol imap. Cela ne fonctionnera bien sûr que si vous utilisez également l&amp;rsquo;IMAP pour récupérer vos emails, ou si vous n&amp;rsquo;effacez pas vos emails du serveur avec le protocol POP.&lt;/p&gt;&#10;&lt;p&gt;Nous allons voir dans ce tutoriel comment installer Imapsync (sur Ubuntu 16.04 LTS), puis comment synchroniser deux boîtes mails ainsi que les options proposées par cet outil.&lt;/p&gt;&#10;&lt;h2 id="installer-imapsync"&gt;Installer imapsync&#13;&#10;&lt;/h2&gt;&lt;p&gt;Tout d&amp;rsquo;abord, il faut installer les pré-requis nécessaires à l&amp;rsquo;éxecution d&amp;rsquo;imapsync :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo apt-get install &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libauthen-ntlm-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libclass-load-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libcrypt-ssleay-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libdata-uniqid-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libdigest-hmac-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libdist-checkconflicts-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libfile-copy-recursive-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libio-compress-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libio-socket-inet6-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libio-socket-ssl-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libio-tee-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libmail-imapclient-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libmodule-scandeps-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libnet-ssleay-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libpar-packer-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libreadonly-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libregexp-common-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libsys-meminfo-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libterm-readkey-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-fatal-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-mock-guard-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-pod-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-requires-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-simple-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libunicode-string-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;liburi-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-nowarnings-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-deep-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-warn-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cpanminus&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il peut être nécessaire de mettre à jour le client IMAP et JSON avec cpanm :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cpanm Mail::IMAPClient&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cpanm JSON::WebToken&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut ensuite télécharger imapsync :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo wget https://imapsync.lamiral.info/dist/imapsync -O /usr/bin/imapsync&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et il ne reste plus qu&amp;rsquo;à le rendre éxecutable :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod +x /usr/bin/imapsync&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez ensuite obtenir la liste des variables disponibles en utilisant la commande &lt;code&gt;imapsync&lt;/code&gt;&lt;/p&gt;&#10;&lt;h2 id="synchroniser-une-boîte-mail"&gt;Synchroniser une boîte mail&#13;&#10;&lt;/h2&gt;&lt;p&gt;Pour lancer la synchronisation d&amp;rsquo;une boite mail avec imapsync avec uniquement les options requises ressemble à :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; imapsync &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --host1 serveur1.imap.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --user1 boite@email.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --password1 motdepasse1 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --host2 serveur2.imap.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --user2 boite@email.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --password2 motdepasse2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="les-options"&gt;Les options&#13;&#10;&lt;/h2&gt;&lt;h3 id="les-mots-de-passes"&gt;Les mots de passes&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour éviter d&amp;rsquo;avoir à entrer les mots de passe des boîte email en clair, vous pouvez les stockers dans des fichiers et utiliser l&amp;rsquo;argument &lt;code&gt;--passfile1&lt;/code&gt; et &lt;code&gt;--passfile2&lt;/code&gt; pour les charger automatiquement depuis les fichiers contenant les mots de passe.&lt;/p&gt;&#10;&lt;p&gt;Ce qui donne :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; imapsync &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --host1 serveur1.imap.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --user1 boite@email.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --passfile2 /home/user/pass1 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --host2 serveur2.imap.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --user2 boite@email.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --passfile2 /home/user/pass2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="la-connexion-au-serveur-imap"&gt;La connexion au serveur imap&#13;&#10;&lt;/h3&gt;&lt;p&gt;Plusieurs options sont disponibles pour connecter imapsync à votre serveur mail, notamment le type de connexion utilisée. Par défaut imapsync essaira d&amp;rsquo;utiliser SSL ou TLS sur le port 993 pour se connecter. Voici des exemples pour la connexion sur le serveur à migrer (remplacer 1 par 2 pour le deuxième serveur) :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;--nossl1&lt;/code&gt; pour une connexion non chiffrée via le port 143 (non recommandé)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--ssl1&lt;/code&gt; pour une connexion avec SSL via le port 993&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--tls1&lt;/code&gt; pour une connexion avec TLS via le port 143&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Il y a également des options pour définir le type d&amp;rsquo;authentification que l&amp;rsquo;on peut définir via les arguments &lt;code&gt;--authmech1&lt;/code&gt; et &lt;code&gt;--authmech2&lt;/code&gt; dont les valeurs possibles sont (en majusule) :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;PLAIN&lt;/li&gt;&#10;&lt;li&gt;LOGIN&lt;/li&gt;&#10;&lt;li&gt;CRAM-MD5&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="les-dossiers"&gt;Les dossiers&#13;&#10;&lt;/h3&gt;&lt;p&gt;La synchronisation des dossiers peut être une source de problèmes, notamment si les dossiers par défaut (Inbox, Spam, Archive, Envoyés) ne sont pas nommés de la même façon sur les deux serveurs mails.&#10;Pour cela imapsync offre plusieurs options :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;--automap&lt;/code&gt; pour utiliser la reconnaissance automatique des dossiers par défaut&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--nomixfolders&lt;/code&gt; pour éviter de fusionner des dossier ayant un nom similaire selon la sensibilité à la casse&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--prefix1&lt;/code&gt; pour retirer un prefix des dossiers à migrer&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--prefix2&lt;/code&gt; pour ajouter un prefix aux dossiers migrés&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--skipemptyfolders&lt;/code&gt; pour ne pas recréer les dossiers vides sur le serveur de destination&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="les-options-de-migration"&gt;Les options de migration&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour accélerer la migration des emails, vous pouvez utiliser l&amp;rsquo;argument &lt;code&gt;--usecache&lt;/code&gt; afin de stocker temporairement les UIDs des messages et accélérer les synchronisations suivantes (n&amp;rsquo;accélère pas la première migration).&#10;Vous pouvez également supprimer les messages du premier serveur avec l&amp;rsquo;argument &lt;code&gt;--delete1&lt;/code&gt;.&#10;Enfin, avant de lancer votre migration, n&amp;rsquo;hésitez pas à utiliser l&amp;rsquo;argument &lt;code&gt;--dry&lt;/code&gt; pour voir ce que ferai imapsync, sans l&amp;rsquo;appliquer.&lt;/p&gt;&#10;</description></item><item><title>Déployer un système de backup centralisé avec UrBackup</title><link>https://jesuisadmin.fr/deployer-systeme-backup-centralise-urbackup/</link><pubDate>Mon, 13 Nov 2017 19:03:46 +0000</pubDate><guid>https://jesuisadmin.fr/deployer-systeme-backup-centralise-urbackup/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/Centraliser-Backup--2-.jpg" alt="Featured image of post Déployer un système de backup centralisé avec UrBackup" /&gt;&lt;p&gt;La gestion des backups peut rapidement devenir un problème lorsque l&amp;rsquo;on gère un grand nombre de serveurs, aussi bien pour gérer l&amp;rsquo;espace de stockage que pour le suivi des backups. Je vais donc vous présenter la solution UrBackup.&lt;/p&gt;&#10;&lt;p&gt;UrBackup est une solution de sauvegarde client/serveur qui propose plusieurs système de backup, sous forme d&amp;rsquo;image disque ou par répertoire de fichiers.&#10;Les principaux avantages de cette solution sont sa facilité de déploiement, sa gestion de l&amp;rsquo;espace de stockage avec des backups complets ou incrémentaux. Mais également sa compabilité avec Windows, MacOS et Linux.&lt;/p&gt;&#10;&lt;p&gt;Dans mon cas, UrBackup me sert à réaliser des sauvegardes de serveurs web. Il est installé sur un serveur Kimsufi KS-2A avec 2To de stockage commandé dans le cadre d&amp;rsquo;une offre à 8.99€/mois.&lt;/p&gt;&#10;&lt;p&gt;Mais il est tout à fait possible d&amp;rsquo;utiliser directement le backup storage proposé avec les serveurs OVH ou Online.net. Il suffit pour cela de monter le backup storage en NFS et de définir l&amp;rsquo;emplacement des sauvegardes UrBackup durant l&amp;rsquo;installation.&lt;/p&gt;&#10;&lt;h2 id="installation-du-serveur-urbackup"&gt;Installation du serveur UrBackup&#13;&#10;&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;installation du serveur UrBackup peut se faire sur Windows, Linux mais également sur les distributions comme FreeNas, OpenMediaVault ainsi que sur des NAS QNAP.&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez trouver les instructions d&amp;rsquo;installation sur la page &lt;a class="link" href="http://www.urbackup.org/download.html" target="_blank" rel="noopener"&#13;&#10; &gt;Downloads&lt;/a&gt; du site Urbackup. Dans mon cas j&amp;rsquo;ai choisi d&amp;rsquo;utiliser Ubuntu 16.04 LTS qui permet l&amp;rsquo;installation via les dépôts PPA.&lt;/p&gt;&#10;&lt;p&gt;On commence donc par ajouter le dépôt puis on installe le paquet urbackup-server :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo add-apt-repository ppa:uroni/urbackup&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install urbackup-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Durant le processus, vous serez inviter à choisir le répertoire dans lequel UrBackup va réaliser les sauvegardes. On peut ensuite accéder à l&amp;rsquo;interface d&amp;rsquo;administration via l&amp;rsquo;adresse http://IP-DU-SERVEUR:55414.&lt;/p&gt;&#10;&lt;p&gt;Les réglages principaux à définir après l&amp;rsquo;installation sont :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;la création d&amp;rsquo;un utilisateur pour protéger l&amp;rsquo;accès à l&amp;rsquo;interface&lt;/li&gt;&#10;&lt;li&gt;le type de sauvegarde que vous souhaitez utiliser (image, fichiers, les deux)&lt;/li&gt;&#10;&lt;li&gt;le dossier par défaut à sauvegarder&lt;/li&gt;&#10;&lt;li&gt;la fréquence et le nombre de sauvegardes&lt;/li&gt;&#10;&lt;li&gt;le type de réseau (local ou sur internet)&lt;/li&gt;&#10;&lt;li&gt;les informations smtp pour l&amp;rsquo;envoi des notifications&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Pour mes serveurs web, je n&amp;rsquo;utilise pour le moment que les sauvegardes de fichiers et le dossier par défaut à sauvegarder est /var/www.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="installation-du-client-urbackup"&gt;Installation du client UrBackup&#13;&#10;&lt;/h2&gt;&lt;p&gt;Pour linux, l&amp;rsquo;installation du client UrBackup se fait via une seule ligne de commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;TF&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;mktemp&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; wget &lt;span class="s2"&gt;&amp;#34;https://hndl.urbackup.org/Client/2.3.4/UrBackup%20Client%20Linux%202.3.4.sh&amp;#34;&lt;/span&gt; -O &lt;span class="nv"&gt;$TF&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo sh &lt;span class="nv"&gt;$TF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; rm &lt;span class="nv"&gt;$TF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Durant l&amp;rsquo;installation, il vous sera demandé quel type de sauvegarde vous souhaitez utiliser pour la réalisation d&amp;rsquo;image disque (dans le cas où le système de fichier le permet). Par la suite la mise à jour du client sera automatique.&#10;Il est nécessaire d&amp;rsquo;ouvrir les ports 35621, 35622 et 35623 pour pouvoir connecter votre client au serveur Urbackup.&lt;/p&gt;&#10;&lt;p&gt;Si vous utilisez UFW, vous pouvez les ouvrir uniquement vers l&amp;rsquo;IP de votre serveur Urbackup :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow from IP.DE.VOTRE.SERVEUR-URBACKUP to any port &lt;span class="m"&gt;35621&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow from IP.DE.VOTRE.SERVEUR-URBACKUP to any port &lt;span class="m"&gt;35622&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow from IP.DE.VOTRE.SERVEUR-URBACKUP to any port &lt;span class="m"&gt;35623&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dès la première connexion au serveur (après avoir ajouté l&amp;rsquo;IP ou le hostname du client via l&amp;rsquo;interface UrBackup Server), une première sauvegarde complète du client sera réalisée, en fonction des options que vous aurez définie. Les sauvegardes suivantes seront incrémentielles.&lt;/p&gt;&#10;&lt;p&gt;La configuration du client urbackup se trouve dans le fichier &lt;code&gt;/etc/default/urbackupclient&lt;/code&gt;, dans lequel vous pouvez changer l&amp;rsquo;option &lt;code&gt;RESTORE=&amp;quot;disabled&amp;quot;&lt;/code&gt; par &lt;code&gt;RESTORE=&amp;quot;server-confirms&amp;quot;&lt;/code&gt; pour autoriser la restauration d&amp;rsquo;un backup depuis l&amp;rsquo;interface d&amp;rsquo;administration de UrBackup Server.&lt;/p&gt;&#10;&lt;p&gt;Modification qui peut être effectuée avant de connecter le client au serveur avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s1"&gt;&amp;#39;s/RESTORE=disabled/RESTORE=&amp;#34;server-confirms&amp;#34;/&amp;#39;&lt;/span&gt; /etc/default/urbackupclient&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="sauvegarder-vos-bases-de-données"&gt;Sauvegarder vos bases de données&#13;&#10;&lt;/h2&gt;&lt;p&gt;Si vous utilisez Urbackup en mode sauvegarde de fichiers, vous allez sûrement souhaitez sauvegarder vos bases de données. Et pour cela il y a deux solutions avec UrBackup.&lt;/p&gt;&#10;&lt;h3 id="utiliser-mysqldump"&gt;Utiliser mysqldump&#13;&#10;&lt;/h3&gt;&lt;p&gt;C&amp;rsquo;est la solution la plus simple à mettre en place, puisque vous pouvez utiliser un cronjob pour exécuter un script bash régulièrement.&#10;J&amp;rsquo;utilise par exemple un script modifié par mes soins disponible sur Github, que vous pouvez télécharger et utiliser librement. Voici les étapes à suivre :&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Télécharger le script et le rendre exécutable&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O mysqldump.sh vtb.cx/mysqldump&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod +x mysqldump.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;&#10;&lt;li&gt;Définir les identifiants root pour MySQL dans .my.cnf&#10;Pour accéder à vos bases de données, le script utilise les identifiants stockés dans le fichier ~/my.cnf. Ce fichier doit ressembler à :&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;client&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; votremotdepasse&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;&#10;&lt;li&gt;ajouter un cronjob&#10;On ajoute une crontab en utilisant la commande &lt;code&gt;crontab -e&lt;/code&gt;, puis en ajoutant la ligne :&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@daily /root/mysqldump.sh &amp;gt; /dev/null&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il ne reste plus qu&amp;rsquo;à enregister la modification et le cronjob réalisera ainsi un backup journalier de chacune des bases de données, stocké par défaut dans le dossier /var/www/mysqldump.&lt;/p&gt;&#10;&lt;h3 id="utiliser-percona-xtrabackup-pour-des-sauvegardes-incrémentielles"&gt;Utiliser Percona XtraBackup pour des sauvegardes incrémentielles&#13;&#10;&lt;/h3&gt;&lt;p&gt;UrBackup a une fois de plus prévu tout ce qu&amp;rsquo;il vous faut, puisqu&amp;rsquo;il permet de réaliser des sauvegardes incrémentales de votre serveur MySQL, en utilisant l&amp;rsquo;outil Percona XtraBackup qui réalise des sauvegardes à chaud du dossier /var/lib/mysql que vous pouvez restaurer en quelques minutes.&lt;/p&gt;&#10;&lt;p&gt;Avant de pouvoir utiliser XtraBackup, il vous faut installer le paquet percona-xtrabackup. Pour MariaDB, le dépôt apt est automatiquement ajouté par le script mariadb_repo_setup.&lt;/p&gt;&#10;&lt;p&gt;Exemple pour MariaDB 10.1&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; sudo bash -s -- --mariadb-server-version&lt;span class="o"&gt;=&lt;/span&gt;10.1 --skip-maxscale&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt install percona-xtrabackup -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Exemple pour MariaDB 10.2&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; sudo bash -s -- --mariadb-server-version&lt;span class="o"&gt;=&lt;/span&gt;10.2 --skip-maxscale&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt install percona-xtrabackup-24 -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois XtraBackup installé, il faut éditer le fichier &lt;code&gt;/usr/local/etc/urbackup/mariadbxtrabackup.conf&lt;/code&gt;, dans lequel il faut remplacer &lt;code&gt;MARIADB_XTRABACKUP_ENABLED=0&lt;/code&gt; par &lt;code&gt;MARIADB_XTRABACKUP_ENABLED=1&lt;/code&gt; et définir le mot de passe root de MySQL à la fin du fichier.&lt;/p&gt;&#10;&lt;p&gt;On peut ensuite activer la configuration avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/usr/local/share/urbackup/scripts/setup-mariadbbackup&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et vérifier que la sauvegarde fonctionne avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/usr/local/share/urbackup/scripts/mariadbxtrabackup &amp;gt; /dev/null&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour restaurer la dernière sauvegarde, vous pourrez utiliser la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/usr/local/share/urbackup/scripts/restore-mariadb&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Comment avoir une excellente configuration HTTPS en 2017 ?</title><link>https://jesuisadmin.fr/comment-avoir-une-excellente-configuration-https-en-2017/</link><pubDate>Fri, 13 Oct 2017 00:05:47 +0000</pubDate><guid>https://jesuisadmin.fr/comment-avoir-une-excellente-configuration-https-en-2017/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2017/10/https-2017-wonderfall.png" alt="Featured image of post Comment avoir une excellente configuration HTTPS en 2017 ?" /&gt;&lt;p&gt;Article écrit par &lt;a class="link" href="https://masto.targaryen.house/@wonder" target="_blank" rel="noopener"&#13;&#10; &gt;Wonderfall&lt;/a&gt;. Suite à la fermeture de son blog, j&amp;rsquo;ai souhaité (avec son accord) remettre en ligne ce dernier pour que son contenu reste accessible.&lt;/p&gt;&#10;&lt;p&gt;Cet article est adressé principalement aux administrateurs système, ou devrais-je plutôt dire aux administrateurs &lt;strong&gt;de&lt;/strong&gt; système puisque parmi vous il y a non seulement des personnes qui en ont fait leur métier, et d&amp;rsquo;autres personnes qui en font leur passion (comme moi, peut-être&amp;hellip;). Par manque de temps et surtout parce que je parlerai des outils sur lesquels j&amp;rsquo;ai mis la main, j&amp;rsquo;utiliserai un seul serveur web au cours de cet article, le bien connu &lt;code&gt;nginx&lt;/code&gt;. Cet article reprendra en partie un ancien article de mon précédent blog : &lt;a class="link" href="https://raw.githubusercontent.com/Wonderfall/wonderfall.xyz/master/Des%20certificats%20ECDSA%20avec%20Let%27s%20Encrypt.md" target="_blank" rel="noopener"&#13;&#10; &gt;&lt;em&gt;Des certificats ECDSA avec Let&amp;rsquo;s Encrypt&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="1-mettons-les-choses-en-ordre"&gt;1. Mettons les choses en ordre&amp;hellip;&#13;&#10;&lt;/h2&gt;&lt;p&gt;Jetez un coup d&amp;rsquo;oeil à l&amp;rsquo;image d&amp;rsquo;en-tête de l&amp;rsquo;article. Vous vous y reconnaitrez peut-être. Ou peut-être pas. Certains parmi vous sont complètement perdus, et ces noms ne leurs évoqueront rien. D&amp;rsquo;autres sont déjà à l&amp;rsquo;aise, savent &lt;strong&gt;grossièrement&lt;/strong&gt; à quoi cela correspond. Eh bien, j&amp;rsquo;en fais moi-même partie. Dans un esprit d&amp;rsquo;humilité, je reconnais ne pas avoir les capacités nécessaires pour comprendre à 100% les notions conceptuelles, mathématiques, et toutes les subtilités derrière les technologies que je mentionnerai. Cela dit, ça ne m&amp;rsquo;empêchera pas de tenter, au moins, de vulgariser et de montrer des exemples. Ma vulgarisation sera approximative, elle comportera peut-être des erreurs, je l&amp;rsquo;admets. Mais tant que j&amp;rsquo;estime ne pas mettre en danger la sécurité des personnes (au contraire&amp;hellip;), et tant que vous avez compris ce que je voulais dire dans ce paragraphe, je me sens libre de continuer à écrire cet article.&lt;/p&gt;&#10;&lt;p&gt;Ce qui m&amp;rsquo;a poussé à le faire, c&amp;rsquo;est que le nombre de demandes d&amp;rsquo;aide à propos de la configuration HTTPS est devenu croissant. &lt;a class="link" href="https://psychedeli.cat/mastodon/" target="_blank" rel="noopener"&#13;&#10; &gt;Vous vous souvenez de Mastodon ?&lt;/a&gt; Aujourd&amp;rsquo;hui le nombre d&amp;rsquo;instances est bien plus important, et plus d&amp;rsquo;instances, ça veut dire aussi plus de configurations. Le &lt;a class="link" href="https://instances.mastodon.xyz/list" target="_blank" rel="noopener"&#13;&#10; &gt;principal site&lt;/a&gt; qui recense les différentes instances classe désormais les instances en fonction de leur configuration HTTPS, à travers &lt;a class="link" href="https://tls.imirhil.fr/" target="_blank" rel="noopener"&#13;&#10; &gt;Cryptcheck&lt;/a&gt; et depuis peu l&amp;rsquo;&lt;a class="link" href="https://observatory.mozilla.org/" target="_blank" rel="noopener"&#13;&#10; &gt;Observatoire Mozilla&lt;/a&gt; (qui comprend Cryptcheck également puisqu&amp;rsquo;il fait appel à des tests tiers). Évidemment, c&amp;rsquo;est la folie : tout le monde veut absolument avoir son instance le plus haut possible dans la liste, donc il faut à tout prix mieux sécuriser&amp;hellip; si seulement c&amp;rsquo;était le cas pour les banques aussi, mais passons.&lt;/p&gt;&#10;&lt;p&gt;Et puis, certains iraient bien se masturber un coup sur un A+ de Cryptcheck/Qualys. Mais, pourquoi pas ? Ces questions ne me concernent pas. On atteindra cette finalité si c&amp;rsquo;est ce que vous voulez, vos motivations sont les vôtres. Quand je parle d&amp;rsquo;une excellente configuration, c&amp;rsquo;est effectivement une configuration qui vous donnera une note maximale sur ces outils. Dans le titre, &lt;strong&gt;je n&amp;rsquo;ai pas parlé de &amp;ldquo;comment configurer HTTPS&amp;rdquo;&lt;/strong&gt;, nuance. Mais il ne faut pas non plus suivre mon tutoriel n&amp;rsquo;importe comment, parce que premièrement, la compatibilité des clients en prend forcément un coup, et deuxièmement, certains mécanismes tels que HPKP peuvent vous casser la gueule si vous les utilisez n&amp;rsquo;importe comment. Lisez, puis faites. Pas l&amp;rsquo;inverse&amp;hellip;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;D&amp;rsquo;avance, j&amp;rsquo;annonce que je ne me prendrai pas la tête avec la compatibilité. Donc ne venez pas me dire que votre site ne fonctionne pas sur X ou Y, parce que je vous aurais prévenu.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="2-choix-de-la-bibliothèque-ssltls"&gt;2. Choix de la bibliothèque SSL/TLS&#13;&#10;&lt;/h2&gt;&lt;p&gt;Les bibliothèques SSL/TLS fournissent une implémentation d&amp;rsquo;algorithmes cryptographiques et de protocoles de communication sécurisés (les différentes versions de SSL et TLS : SSLv2, SSLv3, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3..). Aujourd&amp;rsquo;hui, 3 bibliothèques sont compatibles avec &lt;code&gt;nginx&lt;/code&gt; :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;OpenSSL&lt;/strong&gt; : la plus connue, et la plus présente.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;LibreSSL&lt;/strong&gt; : fork d&amp;rsquo;OpenSSL par OpenBSD.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;BoringSSL&lt;/strong&gt; : fork d&amp;rsquo;OpenSSL par Google.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Il faut dire que &lt;a class="link" href="http://heartbleed.com/" target="_blank" rel="noopener"&#13;&#10; &gt;Heartbleed&lt;/a&gt; a porté en 2014 un coup à la popularité d&amp;rsquo;OpenSSL. Non pas que ce fut la première faille découverte, loin de là, mais il y a eu une prise de conscience sur la qualité du code d&amp;rsquo;OpenSSL et des implémentations trop anciennes qui y sont présentes. OpenBSD fidèle à sa réputation, créa son fork LibreSSL dans le but de littéralement nettoyer OpenSSL et de le débarrasser d&amp;rsquo;algorithmes dépassés et dangereux d&amp;rsquo;utilisation. Aujourd&amp;rsquo;hui, il n&amp;rsquo;y a pas seulement OpenBSD qui utilise LibreSSL à la place d&amp;rsquo;OpenSSL en tant que bibliothèque par défaut du système. En effet, d&amp;rsquo;autres distributions ont sauté le pas, y compris macOS.&lt;/p&gt;&#10;&lt;p&gt;Quant à Google, ce n&amp;rsquo;est pas vraiment la même raison qui a conduit à créer BoringSSL. En effet, ils maintenaient déjà une version d&amp;rsquo;OpenSSL interne avec de nombreux patchs, Heartbleed a seulement été l&amp;rsquo;élément déclencheur pour repartir d&amp;rsquo;une page blanche, et c&amp;rsquo;est bien ce travail qui a été mené. Peu importe si les mises à jour cassent la compatibilité API/ABI avec d&amp;rsquo;autres logiciels comme &lt;code&gt;nginx&lt;/code&gt;, Google met de toute façon en garde :&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;EN : Although BoringSSL is an open source project, it is not intended for general use, as OpenSSL is. We don&amp;rsquo;t recommend that third parties depend upon it. Doing so is likely to be frustrating because there are no guarantees of API or ABI stability.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;FR : Bien que BoringSSL soit un projet open-source, il n&amp;rsquo;est pas destiné à un usage général, comme OpenSSL l&amp;rsquo;est. Nous ne recommandons pas que les tierces parties dépendent dessus. Faire ainsi sera probablement source de frustrations puisqu&amp;rsquo;il n&amp;rsquo;y aucune garantie de la stabilité de l&amp;rsquo;API/ABI.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;En pratique, BoringSSL fonctionne avec nginx et les développeurs ont accepté de faire quelques efforts pour satisfaire les quelques curieux qui souhaitent l&amp;rsquo;utiliser de cette façon. En revanche, &lt;strong&gt;pas de support de OCSP stapling&lt;/strong&gt;.&lt;/p&gt;&#10;&#13;&#10; &lt;blockquote&gt;&#13;&#10; &lt;p&gt;En pratique, qu&amp;rsquo;est-ce que je dois choisir ?&lt;/p&gt;&#10;&#13;&#10; &lt;/blockquote&gt;&#13;&#10;&lt;p&gt;Utiliser la bibliothèque de son système est une bonne chose car les mises à jour sont simples, donc il n&amp;rsquo;est pas nécessaire de recompiler nginx à chaque fois. Sur Debian, ça reste pour le moment OpenSSL. La version de Jessie est maintenue, mais elle est figée du point de vue technologique, donc en pratique, on aura pas quelques algorithmes récents (même si on peut s&amp;rsquo;en passer) et quelques features intéressantes compatibles avec nginx, mais nécessitant une version d&amp;rsquo;OpenSSL supérieure. La version d&amp;rsquo;OpenSSL fournie par Stretch (1.1.0) est aujourd&amp;rsquo;hui la version la plus récente d&amp;rsquo;OpenSSL.&lt;/p&gt;&#10;&lt;p&gt;Si vous êtes prêts à ne pas utiliser une bibliothèque système, je vous recommande sans hésiter &lt;strong&gt;LibreSSL&lt;/strong&gt;, pour les raisons que j&amp;rsquo;ai énoncées plus haut. OpenBSD est une équipe de confiance, vraiment (et même un peu trop) perfectionniste. BoringSSL est celui qui vous proposera le plus de nouveautés, dont l&amp;rsquo;utilisation des versions drafts de TLS 1.3, des expérimentations d&amp;rsquo;algorithmes &lt;em&gt;quantum proofs&lt;/em&gt; qui peuvent être retirées du jour au lendemain par Google (comme &lt;a class="link" href="https://www.imperialviolet.org/2016/11/28/cecpq1.html" target="_blank" rel="noopener"&#13;&#10; &gt;CECPQ1&lt;/a&gt;), etc. mais de mon point de vue, ce n&amp;rsquo;est vraiment pas quelque chose à utiliser sur une machine en production, il n&amp;rsquo;y a même pas de versioning, à utiliser plus pour la curiosité donc.&lt;/p&gt;&#10;&lt;p&gt;Si vous avez fait le choix d&amp;rsquo;utiliser une autre bibliothèque que la bibliothèque utilisée par défaut par le système, vous allez devoir recompiler nginx. Inutile que je passe mon temps à faire un tutoriel, il y en a&amp;hellip; plein : &lt;a class="link" href="https://mondedie.fr/d/7621-Tuto-Compiler-la-derniere-version-de-nginx-avec-LibreSSL" target="_blank" rel="noopener"&#13;&#10; &gt;ici (2015)&lt;/a&gt; pour LibreSSL, &lt;a class="link" href="https://raw.githubusercontent.com/Wonderfall/wonderfall.xyz/master/Compiler%20nginx%20avec%20BoringSSL.md" target="_blank" rel="noopener"&#13;&#10; &gt;là (2016)&lt;/a&gt; pour BoringSSL (je me fais un peu de publicité, je sais). Mais si vous ne voulez pas vous prendre la tête, je vous propose des scripts voire des images Docker :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://github.com/Angristan/nginx-autoinstall" target="_blank" rel="noopener"&#13;&#10; &gt;Angristan/nginx-autoinstall&lt;/a&gt; : compile nginx sur Debian, avec le choix entre OpenSSL et LibreSSL et d&amp;rsquo;autres modules !&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://hub.docker.com/r/wonderfall/boring-nginx/" target="_blank" rel="noopener"&#13;&#10; &gt;wonderfall/boring-nginx&lt;/a&gt; : une image Docker basée sur Alpine Linux, avec nginx compilé depuis les sources avec BoringSSL.&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://hub.docker.com/r/xataz/nginx/" target="_blank" rel="noopener"&#13;&#10; &gt;xataz/nginx&lt;/a&gt; : une image Docker basée sur Alpine Linux qui installe simplement nginx, mais Alpine Linux utilise LibreSSL par défaut.&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://github.com/ajhaydock/BoringNginx" target="_blank" rel="noopener"&#13;&#10; &gt;ajhaydock/BoringNginx&lt;/a&gt; : des scripts pour Debian/CentOS et une image Docker basée sur CentOS pour utiliser nginx avec BoringSSL.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="3-dabord-les-certificats-"&gt;3. D&amp;rsquo;abord, les certificats !&#13;&#10;&lt;/h2&gt;&lt;h3 id="a-savoir-un-peu-de-quoi-on-parle"&gt;a. Savoir (un peu) de quoi on parle&#13;&#10;&lt;/h3&gt;&lt;p&gt;Inutile de s&amp;rsquo;attaquer à la configuration d&amp;rsquo;HTTPS sans passer par la génération de certificats. Mais d&amp;rsquo;abord, pourquoi parle-t-on de certificats ? Deux mots pour décrire les buts d&amp;rsquo;HTTPS : &lt;strong&gt;chiffrement&lt;/strong&gt; et &lt;strong&gt;authenticité&lt;/strong&gt;. Ce dernier point repose sur la certification de la clé publique avec un certificat (d&amp;rsquo;un certain format nommé X.509) signé par une autorité connue (CA pour Certificate Authority). L&amp;rsquo;ensemble des composantes visant à gérer le cycle de vie des certificats porte le nom de &lt;em&gt;Public Key Infrastructure&lt;/em&gt; (PKI). Les certificats définissent les informations d&amp;rsquo;appartenance de la clé publique, et définissent également les &lt;em&gt;hostnames&lt;/em&gt; pour lesquels le certificat est valide. Par exemple, le certificat que j&amp;rsquo;utilise pour psychedeli.cat est aussi valable pour isso.psychedeli.cat (un sous-domaine). Ces informations, vous pouvez les obtenir très simplement depuis votre navigateur qui lit ces informations depuis le certificat fourni par le serveur web.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="LE" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/10/Screenshot_158.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Voyez l&amp;rsquo;illustration comme un arbre, on part de la racine (= root), on passe par les branches ramifiées (certificats intermédiaires) et enfin on atteint les feuilles (= leaf)&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Nous allons ici utiliser Let&amp;rsquo;s Encrypt, qui est comme je vous l&amp;rsquo;ai dit une autorité de certification. Le principe est celui d&amp;rsquo;une chaîne de confiance : le certificat root (fourni ici par ISRG) est le certificat originel, qui peut signer des certificats intermédiaires (ceux de Let&amp;rsquo;s Encrypt). Ces certificats intermédiaires permettront de signer les certificats que nous utilisons tous les jours, qu&amp;rsquo;on appelle aussi &lt;em&gt;leaf certificate&lt;/em&gt;, ils permettront de signer des clés temporaires dérivées de la paire clé publique/privée qui sera utilisée pour sécuriser une session. Ces certificats sont en fin de chaîne et ce sont eux que nous allons obtenir.&lt;/p&gt;&#10;&lt;h3 id="b-générer-des-certificats-ecdsa-p-384"&gt;b. Générer des certificats ECDSA (P-384)&#13;&#10;&lt;/h3&gt;&lt;p&gt;Plus précisément, on va le faire d&amp;rsquo;une façon un peu plus manuelle mais loin d&amp;rsquo;être difficile. Cela nous permettra :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;De gérer nous-même le renouvellement de la paire de clés, ce qui nous permet d&amp;rsquo;utiliser plus sereinement et efficacement HPKP.&lt;/li&gt;&#10;&lt;li&gt;D&amp;rsquo;utiliser une autre approche d&amp;rsquo;algorithme asymétrique que RSA, ECDSA qui repose donc sur la cryptographie sur les courbes elliptiques (ECC).&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Les algorithmes de la famille des courbes elliptiques proposent d&amp;rsquo;utiliser des clés bien plus courtes, pour une sécurité comparable à celle offerte par RSA, et ils permettent également d&amp;rsquo;économiser des ressources. Voici des tests de performance que j&amp;rsquo;ai réalisés avec ma machine :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ openssl speed rsa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sign verify sign/s verify/s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rsa &lt;span class="m"&gt;2048&lt;/span&gt; bits 0.000549s 0.000025s 1821.4 39636.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rsa &lt;span class="m"&gt;3072&lt;/span&gt; bits 0.002579s 0.000051s 387.7 19471.4&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rsa &lt;span class="m"&gt;4096&lt;/span&gt; bits 0.005829s 0.000089s 171.5 11270.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ openssl speed ecdsa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sign verify sign/s verify/s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;256&lt;/span&gt; bit ecdsa &lt;span class="o"&gt;(&lt;/span&gt;nistp256&lt;span class="o"&gt;)&lt;/span&gt; 0.0000s 0.0001s 25425.7 10819.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;384&lt;/span&gt; bit ecdsa &lt;span class="o"&gt;(&lt;/span&gt;nistp384&lt;span class="o"&gt;)&lt;/span&gt; 0.0002s 0.0007s 5749.2 1340.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;521&lt;/span&gt; bit ecdsa &lt;span class="o"&gt;(&lt;/span&gt;nistp521&lt;span class="o"&gt;)&lt;/span&gt; 0.0003s 0.0006s 3007.0 1659.5&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ECDSA en soit n&amp;rsquo;est pas directement comparable à RSA, il doit être associé à des courbes elliptiques, et ici, ce sont les courbes NIST P-256, P-384, et P-521, qui sont utilisées. Le nombre de signatures/secondes est tout simplement bien meilleur avec ECDSA. Quid de la sécurité ? Selon la NSA elle-même, une clé ECC de taille 384 bits offrirait une sécurité équivalente à une clé RSA de taille 7680 bits.&lt;/p&gt;&#10;&lt;p&gt;Depuis Février 2016, Let&amp;rsquo;s Encrypt peut émettre des certificats ECDSA (les choix sont P-256 et P-384). Malheureusement, le client officiel certbot ne le permet pas. Alors soit on peut utiliser d&amp;rsquo;autres clients comme lego qui vont mâcher le travail, soit on peut toujours utiliser certbot mais se débrouiller nous-même pour générer notre clé privée et notre demande de signature de certificat (dans un fichier CSR).&lt;/p&gt;&#10;&lt;p&gt;Commençons par générer une clé privée P-384 :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl ecparam -genkey -name secp384r1 &amp;gt; privkey.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut maintenant créer un &lt;strong&gt;fichier CSR&lt;/strong&gt;, qui contient toutes les informations relatives à une demande de certificat. Comme moi, vous aurez peut-être envie de générer un seul certificat pour plusieurs domaines, ceci peut se faire avec l&amp;rsquo;extension SAN de X.509. Vous devez tout d&amp;rsquo;abord copier le fichier &lt;code&gt;/etc/ssl/openssl.cnf&lt;/code&gt; dans votre répertoire de travail. Par exemple :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp /etc/ssl/openssl.cnf custom.cnf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On va modifier ce &lt;code&gt;custom.cnf&lt;/code&gt; pour bénéficier de SAN et donc d&amp;rsquo;un certificat valable, en gros, pour plusieurs domaines. Voici comment. Dans la section &lt;code&gt;[ req ]&lt;/code&gt;, décommettez &lt;code&gt;req_extensions = v3_req&lt;/code&gt;. Dans la section &lt;code&gt;[ v3_req ]&lt;/code&gt;, ajoutez une nouvelle ligne : &lt;code&gt;subjectAltName = @alt_names&lt;/code&gt;. Enfin, tout se passe dans &lt;code&gt;[ alt_names ]&lt;/code&gt; pour ajouter vos domaines. Cette section n&amp;rsquo;existe pas, il faut la créer, par exemple tout à la fin du fichier.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# custom.cnf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ req ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;req_extensions = v3_req&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ v3_req ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;subjectAltName = @alt_names&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;### OCSP Must-Staple, cf. plus loin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#tlsfeature = status_request # OpenSSL &amp;gt;=1.1.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#1.3.6.1.5.5.7.1.24 = DER:30:03:02:01:05 # OpenSSL &amp;lt;=1.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ alt_names ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DNS.1 = domain.tld&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DNS.2 = sub1.domain.tld&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DNS.3 = sub2.domain.tld&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DNS.n = subn.domain.tld&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour chaque domaine souhaité, on l&amp;rsquo;associe à la directive &lt;code&gt;DNS.k&lt;/code&gt; où &lt;code&gt;k&lt;/code&gt;, allant de &lt;code&gt;1&lt;/code&gt; à &lt;code&gt;n&lt;/code&gt;, est incrémenté sur chaque nouvelle ligne. Le &lt;a class="link" href="https://en.wikipedia.org/wiki/SubjectAltName" target="_blank" rel="noopener"&#13;&#10; &gt;SAN&lt;/a&gt; que peut signer Let&amp;rsquo;s Encrypt peut atteindre 100 (autrement dit, 100 domaines différents dans un seul certificat X.509), donc &lt;code&gt;n &amp;lt;= 100&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Enregistrez toutes ces modifications. Vous pouvez désormais générer votre CSR avec la commande suivante :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -new -sha256 -key privkey.pem -out csr.der -config custom.cnf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Rentrez des informations, mais laissez &lt;em&gt;Common Name&lt;/em&gt; vide, et ne protégez pas avec un mot de passe. Vous devez, à ce stade, avoir en votre possession un &lt;code&gt;privkey.pem&lt;/code&gt; et un &lt;code&gt;csr.der&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Pour demander à Let&amp;rsquo;s Encrypt de nous émettre un certificat à partir de notre demande, il suffit d&amp;rsquo;utiliser &lt;code&gt;certbot&lt;/code&gt; de cette façon, avec l&amp;rsquo;argument &lt;code&gt;--csr&lt;/code&gt; pour fournir le CSR :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;certbot certonly --standalone --agree-tos -m admin@domain.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --csr /path/to/csr.der &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --cert-path /path/to/cert.pem &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --chain-path /path/to/chain.pem &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --fullchain-path /path/to/fullchain.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Congrats!&lt;/em&gt; Vous avez ainsi obtenu :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;cert.pem&lt;/strong&gt; : leaf certificate, contient entre autres la clé publique&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;chain.pem&lt;/strong&gt; : certificat de la chaîne Let&amp;rsquo;s Encrypt&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;fullchain.pem&lt;/strong&gt; : concaténation des deux fichiers ci-dessus&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;privkey.pem&lt;/strong&gt; : clé privée qu&amp;rsquo;on avait générée tout à l&amp;rsquo;heure&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;DNS CAA&lt;/strong&gt; : N&amp;rsquo;oubliez pas d&amp;rsquo;ajouter des &lt;strong&gt;enregistrements CAA&lt;/strong&gt; dans votre zone DNS, ils permettent de définir quel CA est autorisé à émettre un certificat pour le domaine &lt;code&gt;domain.tld&lt;/code&gt;. Exemple pour ce domaine avec Let&amp;rsquo;s Encrypt :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dns" data-lang="dns"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="py"&gt;domain.tld. &lt;/span&gt;&lt;span class="k"&gt;CAA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;issue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nc"&gt;letsencrypt.org&lt;/span&gt;&lt;span class="err"&gt;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="py"&gt;domain.tld. &lt;/span&gt;&lt;span class="k"&gt;CAA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;iodef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#34;mailto:admin@&lt;/span&gt;&lt;span class="nc"&gt;domain.tld&lt;/span&gt;&lt;span class="err"&gt;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="4-le-protocole-ssltls"&gt;4. Le protocole SSL/TLS&#13;&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Je vous recommande la lecture de cet article : &lt;a class="link" href="https://blog.imirhil.fr/2015/09/02/cryptcheck-verifiez-implementations-tls.html" target="_blank" rel="noopener"&#13;&#10; &gt;CryptCheck, vérifiez vos implémentations de TLS&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;TLS et son &lt;strong&gt;ancêtre SSL&lt;/strong&gt; sont des protocoles qui sont utilisés pour sécuriser des échanges sur Internet. Par exemple conjointement avec HTTP pour donner HTTPS, le joli cadenas vert que vous avez dans votre barre d&amp;rsquo;adresse et qui ne veut pas dire grand chose parfois. Ils sont utilisés pour l&amp;rsquo;intégrité, l&amp;rsquo;authentification, la confidentialité (chiffrement), etc.&lt;/p&gt;&#10;&lt;p&gt;Aujourd&amp;rsquo;hui, la compatibilité de TLS 1.2 est répandue et il s&amp;rsquo;agit de la dernière version datant de 2008. TLS 1.0 (quoique&amp;hellip;) et 1.1 peuvent être activés en cas de besoin de compatibilité. Pour cet article je ne vais garder que TLS 1.2. Il est par contre hors de question d&amp;rsquo;utiliser SSL. SSLv3 c&amp;rsquo;est poubelle (POODLE), SSLv2 c&amp;rsquo;est poubelle aussi (DROWN). D&amp;rsquo;ailleurs j&amp;rsquo;en profite : arrêtez de véhiculer cet abus de langage comme quoi SSL/TLS = SSL. J&amp;rsquo;aurais d&amp;rsquo;ailleurs trouvé ça appréciable si LibreSSL s&amp;rsquo;appelait plutôt LibreTLS, bref.&lt;/p&gt;&#10;&lt;p&gt;Donc on configure nginx pour n&amp;rsquo;accepter que TLS 1.2 :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_protocols TLSv1.2;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;TLS 1.3 arrivera incessamment sous peu, à l&amp;rsquo;heure où j&amp;rsquo;écrit cet article la 19e &lt;em&gt;draft&lt;/em&gt; est encore très récente. OpenSSL 1.1.0 aura droit à TLS 1.3, tout comme LibreSSL qui devrait suivre. BoringSSL propose déjà TLS 1.3, j&amp;rsquo;ai testé et ça fonctionne même s&amp;rsquo;il faut l&amp;rsquo;activer de force. Cela dit je ne peux pas vraiment recommander d&amp;rsquo;utiliser un protocole au stade de brouillon et dont l&amp;rsquo;implémentation est encore trop jeune.&lt;/p&gt;&#10;&lt;p&gt;Histoire de faire une transition avec la partie suivante : avec TLS, tout commence par un &lt;em&gt;handshake&lt;/em&gt; entre le client et le serveur. Le client envoie au serveur un message &lt;em&gt;ClientHello&lt;/em&gt; avec une liste de suites cryptographiques supportées et de protocoles (par exemple pour HTTP/2). Le serveur renvoie à son tour un &lt;em&gt;ServerHello&lt;/em&gt; avec entre autres, le choix de la suite cryptographique pour la session.&lt;/p&gt;&#10;&lt;h2 id="5-la-suite-cryptographique"&gt;5. La suite cryptographique&#13;&#10;&lt;/h2&gt;&lt;p&gt;Vous auriez déjà dû entendre parler du terme &lt;em&gt;cipher&lt;/em&gt;. Cela désigne pour ceux qui ne le savent pas un algorithme qui chiffre et déchiffre, c&amp;rsquo;est une notion simple et cela existe depuis l&amp;rsquo;antiquité en fait, puisque ce sont les débuts même de la cryptographie. Mais avant que les 2 parties (ici, le serveur et le client) ne puissent chiffrer/déchiffrer leurs communications (par exemple du chiffrement par bloc avec un algorithme de cryptographie symétrique comme AES), il faut que les deux s&amp;rsquo;échangent une clé temporaire qui a été dérivée de la paire de clés du certificat, pour une session. Donc la question est de le faire d&amp;rsquo;une façon sécurisée à travers Internet, et éviter à tout prix les attaques &lt;em&gt;MiTM&lt;/em&gt;.&lt;/p&gt;&#10;&lt;h3 id="a-léchange-de-clés"&gt;a. L&amp;rsquo;échange de clés&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour cela, on préfère l&amp;rsquo;échange de clés Diffie-Hellman (DH) car il y a la propriété de &lt;strong&gt;confidentialité persistante&lt;/strong&gt; (Forward Secrecy FS ou Perfect Forward Secrecy PFS) : si la clé privée à partir de laquelle les clés de session ont été dérivés est compromise dans le futur, les clés de session utilisées précédemment pour des communications passées ne seront pas compromises. On pourrait en parler mathématiquement, mais là n&amp;rsquo;est pas vraiment le sujet, des personnes plus compétentes en parleront mieux que moi.&lt;/p&gt;&#10;&lt;p&gt;Avec TLS, on utilise &lt;strong&gt;DHE&lt;/strong&gt; (Diffie-Hellman Exchange) ou &lt;strong&gt;ECDHE&lt;/strong&gt; (Elliptic Curve Diffie-Hellman Exchange), ECDHE étant une variante de DHE. Sans rentrer dans les détails, la différence est dans la génération des clés : pour ce faire, DHE repose sur de l&amp;rsquo;algorithmique modulaire (simple), tandis que ECDHE repose sur le problème mathématique des courbes elliptiques (algébriques). Ces courbes (NIST, Brainpool, X25519&amp;hellip;) ont les bénéfices que nous avons en partie évoqué plus haut.&lt;/p&gt;&#10;&lt;p&gt;De mon côté, je vous recommande carrément de n&amp;rsquo;utiliser que ECDHE pour l&amp;rsquo;échange de clés. Si vous voulez continuer à utiliser DHE, générez au moins une bonne clé de taille 4096 bits. Souvenez-vous des conséquences d&amp;rsquo;une clé trop petite, je parle bien sûr de &lt;a class="link" href="https://weakdh.org/" target="_blank" rel="noopener"&#13;&#10; &gt;Logjam&lt;/a&gt;. DHE souffre également d&amp;rsquo;un autre problème qui consiste en une &lt;em&gt;MiTM&lt;/em&gt; assez violente : il est possible de downgrade vers une suite &lt;code&gt;EXPORT&lt;/code&gt; dès que le serveur la supporte, et même si le client ne la supporte pas (merci &lt;a class="link" href="https://social.imirhil.fr/@aeris" target="_blank" rel="noopener"&#13;&#10; &gt;@aeris&lt;/a&gt; pour cette remarque). &lt;strong&gt;Je persiste, utilisez donc seulement ECDHE&lt;/strong&gt;, c&amp;rsquo;est très bien et dans la continuité de cet article. Et il n&amp;rsquo;y a rien de plus simple pour nginx puisqu&amp;rsquo;il suffit de jouer avec la directive &lt;code&gt;ssl_ecdh_curve&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;On peut ne pas renseigner cette directive, c&amp;rsquo;est possible, et dans ce cas le client et le serveur se mettront d&amp;rsquo;accord comme des grands sur la courbe à utiliser. Avec des versions de nginx relativement récentes (1.11+) et OpenSSL 1.1.0+ / LibreSSL / BoringSSL, il est possible de définir, côté serveur, un ordre de préférence. De mon côté, je préfère le faire (et si vous ne pouvez pas préciser plusieurs courbes, ne pas renseigner la directive est plus sage, sinon vous pouvez utiliser P-384 seulement) :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_ecdh_curve&lt;/span&gt; &lt;span class="s"&gt;X25519:P-521:P-384&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ssl_ecdh_curve secp521r1:secp384r1; # Autres noms&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ssl_ecdh_curve secp384r1; # Si nginx pas récent&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Petite aparté sur X25519 : cette courbe elliptique est le fruit des recherches du Dr. Bernstein. Comme indiqué sur &lt;a class="link" href="https://safecurves.cr.yp.to/" target="_blank" rel="noopener"&#13;&#10; &gt;ce site&lt;/a&gt;, la sécurité offerte par les courbes NIST n&amp;rsquo;est pas parfaite et mathématiquement douteuse. X25519 est &amp;ldquo;meilleur&amp;rdquo;, et en plus, il ne vient pas d&amp;rsquo;une agence proche de la NSA qui a tout intérêt à rendre la cryptanalyse des courbes NIST plus avantageuse pour elle.&lt;/p&gt;&#10;&lt;p&gt;X25519 n&amp;rsquo;étant disponible que sur des versions récentes de Chromium, il faut accepter d&amp;rsquo;autres courbes pour supporter par exemple Firefox et d&amp;rsquo;autres plateformes : P-521 et P-384, c&amp;rsquo;est très bien aussi. Ajoutez P-256 si la compatibilité est vraiment un problème.&lt;/p&gt;&#10;&lt;h3 id="b-le-chiffrement-des-données"&gt;b. Le chiffrement des données&#13;&#10;&lt;/h3&gt;&lt;p&gt;Maintenant que la clé temporaire de session a été communiquée de façon sécurisée grâce à ECDH au client, ce dernier et le serveur peuvent échanger dans un canal chiffré dans une configuration symétrique, d&amp;rsquo;où l&amp;rsquo;utilisation d&amp;rsquo;algorithmes symétriques comme AES. C&amp;rsquo;est aujourd&amp;rsquo;hui le plus éprouvé. RC4, DES, 3DES&amp;hellip; &lt;strong&gt;sont à bannir&lt;/strong&gt;. Des chatons meurent à chaque fois que ces algorithmes sont utilisées. En 2017, on utilise normalement AES.&lt;/p&gt;&#10;&lt;p&gt;AES faisant du chiffrement par bloc, on introduit deux notions :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Le mode d&amp;rsquo;opération des blocs : CCM, CBC, GCM&amp;hellip;&lt;/li&gt;&#10;&lt;li&gt;La taille des clés utilisées : 128, 256&amp;hellip;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;TLS 1.2 standardise notamment des suites cryptographiques qui reposent sur AES-CBC et AES-GCM, avec des clés 128 et 256 bits. Le mode GCM est nettement préférable à CBC. Pourquoi ? Dans le mode CBC, on utilise la fonction XOR (disjonction exclusive) avec un bloc de données en clair et un vecteur d&amp;rsquo;initialisation (IV), ensuite la sortie de XOR est chiffrée avec notre clé symétrique. Le mode GCM diffère de par son fonctionnement : un compteur pour chaque bloc est chiffré par la clé symétrique (dans le Corps de Galois), puis on utilise la fonction XOR avec la sortie obtenue et le bloc de données en clair : le bloc chiffré est formé ainsi. Pour ne pas aller plus loin dans les détails même si ce sont de grands mots qui peuvent faire peur, le fonctionnement inhérent de GCM est plus sécurisé que celui de CBC. Il est aussi très rapide. CBC est vulnérable aux attaques &lt;em&gt;padding oracle&lt;/em&gt;.&lt;/p&gt;&#10;&lt;p&gt;Ne faites pas une erreur tentante : Qualys ne vous mettra pas du 100/100 partout si vous avez le malheur d&amp;rsquo;utiliser AES avec une clé 128 bits, même AES GCM. Donc certains vont forcer AES avec une clé 256 bits, mode GCM et CBC, parce que AES-256-GCM n&amp;rsquo;est pas forcément très bien supporté partout encore. C&amp;rsquo;est une fausse bonne idée ! AES-128-GCM est très bien, et quoiqu&amp;rsquo;il arrive, il faut privilégier GCM à CBC. C&amp;rsquo;est le comportement de la suite &lt;code&gt;EECDH+AES&lt;/code&gt; par défaut, inutile d&amp;rsquo;en préciser plus. Pour utiliser GCM seulement, ce que je fais, vous pouvez utiliser &lt;code&gt;EECDH+AESGCM&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;ChaCha20 est un autre algorithme symétrique, qui a un fonctionnement intrinsèquement différent puisqu&amp;rsquo;il fonctionne par flot et non par blocs (comme RC4). C&amp;rsquo;est une alternative à AES proposée par le Dr. Bernstein encore une fois. Bien que la cryptanalyse faite sur ChaCha20 ne soit pas aussi importante qu&amp;rsquo;avec AES, on le considère comme sûr, et de toute façon, avoir une alternative est toujours une bonne chose (et le monopole cryptographique n&amp;rsquo;étant pas idéal de toute façon&amp;hellip;). Il est moins rapide que AES sur des CPU qui disposent des instructions AES-NI, c&amp;rsquo;est-à-dire presque tous les CPU x86_64 actuels si je ne me trompe pas. Mais ChaCha20 offre des performances remarquables et se défend bien, si bien qu&amp;rsquo;il est préféré à AES quand on est sur des SoC ARM par exemple.&lt;/p&gt;&#10;&lt;p&gt;ChaCha20 est combiné à Poly1305, un type de code d&amp;rsquo;authentification de message (MAC) assurant l&amp;rsquo;intégrité des données, alors qu&amp;rsquo;on combine AES-GCM à HMAC-SHA2 par exemple. La qualité du HMAC dépendant de la fonction de hashage utilisée, je préfère ne pas utiliser SHA1 (et il est hors de question d&amp;rsquo;utiliser MD5), mais s&amp;rsquo;en séparer convient de faire une croix sur la compatibilité avec certains clients encore une fois. Pour continuer l&amp;rsquo;analogie entre ChaCha20 et AES, est-ce que Poly1305 est mieux que HMAC-SHA2 ? C&amp;rsquo;est différent, et c&amp;rsquo;est bien d&amp;rsquo;avoir le choix. Il y a certainement des subtilités qui feront pencher les cryptographes d&amp;rsquo;un côté plus que l&amp;rsquo;autre&amp;hellip; De mon côté, je préfère même mettre ChaCha20+Poly1305 en tête de liste parce que je préfère Docteur Bernstein. Mais il ne faut pas basher AES non plus : bien qu&amp;rsquo;il ait vu le jour lors du concours NIST au début des années 2000, les critères autour de sa création sont rigoureusement transparents. Tout ce dont on peut être sûr c&amp;rsquo;est que la NSA par exemple a eu le temps de faire sa cryptanalyse.&lt;/p&gt;&#10;&lt;p&gt;Donc la configuration que je propose est la suivante :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_ciphers&lt;/span&gt; &lt;span class="s"&gt;EECDH+CHACHA20:EECDH+AESGCM&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Restrictive, certes. Mais il ne devrait pas y avoir de soucis avec des clients modernes. Chrome et Firefox supportent déjà ChaCha20+Poly1305. AES-GCM fera l&amp;rsquo;affaire pour Edge, Safari (jusqu&amp;rsquo;à la version incluse dans Yosemite, mais n&amp;rsquo;oubliez pas que Mavericks a le droit à des updates majeures de Safari par exemple), et Android jusqu&amp;rsquo;à KitKat.&lt;/p&gt;&#10;&lt;p&gt;Bonus si vous utilisez BoringSSL : vous pouvez définir des groupes de suites cryptographiques équivalentes. Au sein d&amp;rsquo;un même groupe, vous laissez le client choisir selon son ordre à lui. Cela peut-être utile si vous voulez utiliser AES sur votre PC, mais ChaCha20 sur votre smartphone ARM, par exemple. Le groupe est défini entre crochets &lt;code&gt;[]&lt;/code&gt; et avec une barre verticale &lt;em&gt;pipe&lt;/em&gt; &lt;code&gt;|&lt;/code&gt; entre chaque ciphersuite, ça donnerait ceci :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_ciphers&lt;/span&gt; &lt;span class="s"&gt;[EECDH+CHACHA20|EECDH+AESGCM]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="6-http-strict-transport-security"&gt;6. HTTP Strict Transport Security&#13;&#10;&lt;/h2&gt;&lt;p&gt;HSTS est un mécanisme de sécurité qui consiste à indiquer par un header envoyé au client qu&amp;rsquo;il doit communiquer, pour un domaine donné, avec le serveur web par une connexion sécurisée HTTPS uniquement. L&amp;rsquo;intérêt est évident, car &lt;strong&gt;si&lt;/strong&gt; HSTS est actif, le client est protégé de diverses attaques réseau et d&amp;rsquo;une &lt;em&gt;MiTM&lt;/em&gt;. Mais je n&amp;rsquo;ai pas mis le précédent &amp;ldquo;si&amp;rdquo; en gras pour rien, en effet si HSTS n&amp;rsquo;a jamais été actif ou ne l&amp;rsquo;est plus, HSTS ne peut plus plus offrir cette sécurité. C&amp;rsquo;est pour cela qu&amp;rsquo;a été inventé le mécanisme de &lt;strong&gt;HSTS Preloading&lt;/strong&gt;, qui consiste en des listes préchargées et intégrées aux navigateurs pour indiquer la politique HSTS utilisée pour un domaine ; en quelque sorte, HSTS est déjà actif avant même que vous n&amp;rsquo;ayez visité le site.&lt;/p&gt;&#10;&lt;p&gt;Pour utiliser HSTS, il faut utiliser :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Le header &lt;code&gt;Strict-Transport-Security&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;max-age&lt;/code&gt; : durée d&amp;rsquo;activité une fois actif &lt;em&gt;(recommandé : 6 mois+)&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;includeSubDomains&lt;/code&gt; : protéger tous les sous-domaines.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;preload&lt;/code&gt; : activer HSTS preloading.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;De mon côté, je vais mettre &lt;code&gt;max-age&lt;/code&gt; à 1 an soit 31536000 secondes. J&amp;rsquo;activerai HSTS preloading, et j&amp;rsquo;indiquerai de protéger tous les sous-domaines, soyez sûr que vous souhaitez faire de même :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;max-age=31536000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;includeSubDomains&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;preload&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour s&amp;rsquo;inscrire à la liste préchargée, il faut aller inscrire son domaine &lt;a class="link" href="https://hstspreload.org/" target="_blank" rel="noopener"&#13;&#10; &gt;ici&lt;/a&gt;. La propagation peut prendre plusieurs semaines. Attention, HSTS Preload n&amp;rsquo;est pas là pour remplacer la redirection 301 vers HTTPS depuis HTTP.&lt;/p&gt;&#10;&lt;h2 id="7-ocsp-stapling-et-ocsp-must-staple"&gt;7. OCSP Stapling et OCSP Must-Staple&#13;&#10;&lt;/h2&gt;&lt;p&gt;&lt;em&gt;OCSP Stapling&lt;/em&gt; est une alternative au protocole &lt;em&gt;OCSP&lt;/em&gt; qui consiste à vérifier auprès de l&amp;rsquo;autorité de certification la validité du certificat. Avec &lt;em&gt;OCSP&lt;/em&gt;, c&amp;rsquo;est le client lui-même qui fait cette démarche de vérification auprès du CA ; tandis qu&amp;rsquo;avec &lt;em&gt;OCSP Stapling&lt;/em&gt;, c&amp;rsquo;est le serveur qui fait cette tâche et qui envoie la réponse OCSP au début de l&amp;rsquo;échange TLS. Bien que ce soit &lt;a class="link" href="https://www.imperialviolet.org/2014/04/19/revchecking.html" target="_blank" rel="noopener"&#13;&#10; &gt;discuté&lt;/a&gt; d&amp;rsquo;un point de vue sécurité, les gains apportés par &lt;em&gt;OCSP Stapling&lt;/em&gt; pour la vie privée sont non-négligeables, il est donc préférable de l&amp;rsquo;activer. Voyons comment cela se configure avec nginx, d&amp;rsquo;abord les paramètres &lt;em&gt;OCSP Stapling&lt;/em&gt; à proprement parler :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_stapling&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_stapling_verify&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resolver&lt;/span&gt; &lt;span class="n"&gt;213.133.98.98&lt;/span&gt; &lt;span class="n"&gt;213.133.99.99&lt;/span&gt; &lt;span class="s"&gt;valid=300s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resolver_timeout&lt;/span&gt; &lt;span class="s"&gt;5s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Les deux premières lignes activeront &lt;em&gt;OCSP Stapling&lt;/em&gt;. Mais il faut fournir un résolveur DNS à &lt;em&gt;stapling&lt;/em&gt; pour qu&amp;rsquo;il puisse fonctionner. On peut fournir plusieurs IPs ou des FQDN pour pointer vers des résolveurs DNS, IPv4 et IPv6. Il faut également fournir à nginx le certificat de la chaîne Let&amp;rsquo;s Encrypt &lt;code&gt;chain.pem&lt;/code&gt; dans chaque configuration :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_trusted_certificate&lt;/span&gt; &lt;span class="s"&gt;/path/to/chain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois que c&amp;rsquo;est fait et nginx redémarré, vous pouvez tester vos paramètres &lt;em&gt;OCSP Stapling&lt;/em&gt; sur Qualys SSL. Si &lt;em&gt;OCSP Stapling&lt;/em&gt; s&amp;rsquo;affiche en vert avec &lt;em&gt;Yes&lt;/em&gt;, c&amp;rsquo;est que logiquement ça fonctionne bien.&lt;/p&gt;&#10;&lt;p&gt;Quant à &lt;em&gt;OCSP Must-Staple&lt;/em&gt;, imaginez tout simplement la même problématique qu&amp;rsquo;avec HSTS : au départ, le client n&amp;rsquo;a aucune idée si le serveur supporte HSTS, ou &lt;em&gt;OCSP Stapling&lt;/em&gt;. &lt;em&gt;OCSP Must-Staple&lt;/em&gt; est la solution pour &lt;em&gt;OCSP Stapling&lt;/em&gt; qui a été proposée pour résoudre ce problème. C&amp;rsquo;est une extension à activer dans le certificat, qui indique au client qu&amp;rsquo;il doit être livré en même temps qu&amp;rsquo;une réponse &lt;em&gt;OCSP&lt;/em&gt; du serveur, sinon c&amp;rsquo;est &lt;em&gt;niet&lt;/em&gt; (donc vérifiez bien, et régulièrement, que vos paramètres fonctionnent&amp;hellip;). Comment faire ? J&amp;rsquo;en ai déjà parlé plus haut, lors de la génération du certificat, quand vous modifiez &lt;code&gt;custom.cnf&lt;/code&gt; dans la section &lt;code&gt;[ v3_req ]&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Si vous êtes sur OpenSSL 1.1.0 ou supérieur :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tlsfeature = status_request&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si vous êtes sur OpenSSL 1.0 et inférieur (&lt;em&gt;moins sexy&lt;/em&gt;) :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1.3.6.1.5.5.7.1.24 = DER:30:03:02:01:05&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Encore une fois vous pouvez vérifier que le &lt;em&gt;flag&lt;/em&gt; est bien présent dans votre certificat après un petit tour sur Qualys SSL, ou en regardant les détails du certificat depuis votre navigateur.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Remarque&lt;/strong&gt; : Firefox est ici le bon élève puisqu&amp;rsquo;apparemment il supporte bien OCSP Must-Staple. Cependant il se peut que dès le démarrage du serveur web et lors de la première tentative de connexion, Firefox vous colle une belle erreur OCSP : c&amp;rsquo;est normal. En fait, il faut que nginx remplisse son cache OCSP, et c&amp;rsquo;est ce que vous avez fait lors de la première connexion. Une idée toute bête pour contourner ce problème est de faire un script qui va faire la connexion. Vous pouvez même l&amp;rsquo;ajouter dans une entrée &lt;em&gt;cron&lt;/em&gt; pour être sûr qu&amp;rsquo;il n&amp;rsquo;y ait aucun problème de ce genre sur le long terme.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Problème&lt;/strong&gt; : le cache OCSP ne se remplit pas automatiquement lors du démarrage d&amp;rsquo;nginx et il a besoin de se remplir de temps en temps. &amp;ldquo;Oui, et ?&amp;rdquo; me diriez-vous. Le problème c&amp;rsquo;est que quand le cache doit se remplir sur demande d&amp;rsquo;un client, le client balancera une erreur. Si on rafraîchit la page, hop, l&amp;rsquo;erreur part. C&amp;rsquo;est donc une limitation de OCSP stapling que l&amp;rsquo;on peut contourner avec un script (merci &lt;a class="link" href="https://soc.ialis.me/@href" target="_blank" rel="noopener"&#13;&#10; &gt;@href&lt;/a&gt; pour la piste) à mettre en cron où &lt;code&gt;$domain&lt;/code&gt; est le domaine concerné, voici un bout de code pour vous montrer :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/bin/echo &lt;span class="s2"&gt;&amp;#34;Q&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; /usr/bin/openssl s_client -connect &lt;span class="nv"&gt;$domain&lt;/span&gt;:443 -status &amp;gt; /dev/null 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;pm## 8. HTTP Public Key Pinning (HPKP)&#10;HPKP est un autre mécanisme de sécurité, basé sur un header HTTP, qui vise à faire mémoriser au client une liste sûre de clés. Si le CA est compromis et se met à faire de faux certificats pour votre domaine, HPKP s&amp;rsquo;il est bien configuré vous protégera d&amp;rsquo;une &lt;em&gt;MiTM&lt;/em&gt;. Vu qu&amp;rsquo;on utilise Let&amp;rsquo;s Encrypt, et avec la méthode que je vous ai fournie pour gérer vos certificats, nous pouvons directement &lt;em&gt;pin&lt;/em&gt; la clé publique du &lt;em&gt;leaf certificate&lt;/em&gt;. Pourquoi ? Parce que comme je vous l&amp;rsquo;ai dit, on peut désormais utiliser nos propres clés privées donc on peut se passer de la régénération automatique de Let&amp;rsquo;s Encrypt qui rend l&amp;rsquo;usage de HPKP très délicat.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Prudence.&lt;/strong&gt; Le problème avec HPKP, c&amp;rsquo;est qu&amp;rsquo;une fois actif chez le client, il le reste pendant la durée &lt;code&gt;max-age&lt;/code&gt; fournie dans le header. Si par malheur la clé privée est compromise mais que vous avez pin un seul certificat, pardonnez-moi le terme, mais vous êtes littéralement baisé (et plus concrètement votre site sera inaccessible chez ceux qui auront l&amp;rsquo;ancienne version du header active chez eux). Voilà pourquoi il faut pin plusieurs clés :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Si la clé privée est compromise, on peut changer de clé.&lt;/li&gt;&#10;&lt;li&gt;Par mesure de bon sens, il faut parfois rouler les clés.&lt;/li&gt;&#10;&lt;li&gt;Si l&amp;rsquo;algo est pété, on peut changer sur une autré clé d&amp;rsquo;un autre type d&amp;rsquo;algo.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Concrètement, moi, ce que je vous recommande, c&amp;rsquo;est de générer 2 clés P-384 et une clé RSA 4096, et de faire le tutoriel pour créer le certificat ECDSA à partir d&amp;rsquo;une clé P-384 générée.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Génération des 3 clés : 2x P-384, 1x RSA-4096&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl ecparam -genkey -name secp384r1 &amp;gt; privkey_ec_1.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl ecparam -genkey -name secp384r1 &amp;gt; privkey_ec_2.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl genrsa -out privkey_rsa.pem &lt;span class="m"&gt;4096&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Configurez comme indiqué plus haut le custom.cnf&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp /etc/ssl/openssl.cnf custom.cnf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Les 3 CSR à générer&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -new -sha256 -key privkey_ec_1.pem -out csr_ec_1.der -config custom.cnf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -new -sha256 -key privkey_ec_2.pem -out csr_ec_2.der -config custom.cnf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -new -sha256 -key privkey_rsa.pem -out csr_rsa.der -config custom.cnf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Récupérer les empreintes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -pubkey &amp;lt; csr_ec_1.der &lt;span class="p"&gt;|&lt;/span&gt; openssl pkey -pubin -outform der &lt;span class="p"&gt;|&lt;/span&gt; openssl dgst -sha256 -binary &lt;span class="p"&gt;|&lt;/span&gt; base64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -pubkey &amp;lt; csr_ec_2.der &lt;span class="p"&gt;|&lt;/span&gt; openssl pkey -pubin -outform der &lt;span class="p"&gt;|&lt;/span&gt; openssl dgst -sha256 -binary &lt;span class="p"&gt;|&lt;/span&gt; base64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -pubkey &amp;lt; csr_rsa.der &lt;span class="p"&gt;|&lt;/span&gt; openssl pkey -pubin -outform der &lt;span class="p"&gt;|&lt;/span&gt; openssl dgst -sha256 -binary &lt;span class="p"&gt;|&lt;/span&gt; base64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Génération d&amp;#39;un certificat à partir de la première clé&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;letsencrypt certonly --standalone --agree-tos -m admin@domain.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --csr /path/to/csr_ec_1.der &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --cert-path /path/to/cert.pem &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --chain-path /path/to/chain.pem &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --fullchain-path /path/to/fullchain.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le header &lt;code&gt;Public-Key-Pins&lt;/code&gt; est à renseigner avec les 3 empreintes obtenues et un &lt;code&gt;max-age&lt;/code&gt;. Pour l&amp;rsquo;instant, et pour commencer, je le mettrais à 2 mois (de toute façon, Chrome limite la validité du header à 60 jours&amp;hellip;) ; libre à vous de monter plus haut ensuite. Il est également possible d&amp;rsquo;appliquer HPKP à tous les sous-domaines une fois actif sur un domaine.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Public-Key-Pins&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;pin-sha256=&amp;#34;empreinte_ec_1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;pin-sha256=&amp;#34;empreinte&lt;/span&gt; &lt;span class="s"&gt;ec_2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;pin-sha256=&amp;#34;empreinte_rsa&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;max-age=5184000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;includeSubdomains&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il va de soit que les clés ne doivent pas être idéalement sur la même machine, car si celle-ci est compromise, ce n&amp;rsquo;est pas une mais les trois clés privées que vous allez perdre. N&amp;rsquo;hésitez pas à rouler les clés, c&amp;rsquo;est-à-dire passer sur la deuxième clé privée puis en générer une nouvelle et l&amp;rsquo;ajouter à HPKP, en virant la première et en laissant la deuxième.&lt;/p&gt;&#10;&lt;h2 id="9-dane-une-alternative-à-hpkp-"&gt;9. DANE, une alternative à HPKP ?&#13;&#10;&lt;/h2&gt;&lt;p&gt;DANE pour &lt;em&gt;DNS-based Authentication of Named Entities&lt;/em&gt; est un autre mécanisme sécurité, qui a la même finalité que HPKP mais qui repose sur des entrées DNS (des enregistrements TLSA). La condition pour son utilisation est l&amp;rsquo;activation de DNSSEC, sans quoi DANE n&amp;rsquo;a aucun intérêt. Je vais éviter la redite parce que mon ami Hardware a rédigé &lt;a class="link" href="https://blog.meshup.net/securiser-lacces-a-son-site-internet-avec-le-protocole-dane/" target="_blank" rel="noopener"&#13;&#10; &gt;un billet&lt;/a&gt; sur le sujet, n&amp;rsquo;hésitez pas à le consulter.&lt;/p&gt;&#10;&lt;p&gt;Les entrées TLSA se présentent sous cette forme :&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="TLSA" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/10/Screenshot_157.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Pour extraire l&amp;rsquo;empreinte SHA-256 du &lt;code&gt;fullchain.pem&lt;/code&gt;, voici comment :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl x509 -noout -in fullchain.pem -fingerprint -sha256 &lt;span class="p"&gt;|&lt;/span&gt; cut -c 20- &lt;span class="p"&gt;|&lt;/span&gt; sed s/://g &lt;span class="p"&gt;|&lt;/span&gt; awk &lt;span class="s1"&gt;&amp;#39;{print tolower($0)}&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis il &amp;ldquo;suffit&amp;rdquo; d&amp;rsquo;ajouter une entrée TLSA dans votre zone DNS :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dns" data-lang="dns"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="py"&gt;_443._tcp.domain.tld. &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TLSA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;EMPREINTE&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;À&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;faire&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;pour&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;chaque&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="py"&gt;sous-domaine.&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Du coup si on met le &lt;code&gt;fullchain.pem&lt;/code&gt;, il convient de mettre à jour l&amp;rsquo;entrée TLSA à chaque fois qu&amp;rsquo;on crée un nouveau certificat. Personnellement j&amp;rsquo;ai automatisé ça à coups de &lt;code&gt;sed&lt;/code&gt; dans mon script de renouvellement, et ça marche bien.&lt;/p&gt;&#10;&lt;p&gt;Malheureusement DANE n&amp;rsquo;est pas présent dans la plupart des clients modernes (même pas Chrome et Firefox), c&amp;rsquo;est pour cela qu&amp;rsquo;il vaut mieux garder HPKP à côté. Pour tester si DANE fonctionne correctement, je vous recommande l&amp;rsquo;utilisation du plugin &lt;a class="link" href="https://www.dnssec-validator.cz/" target="_blank" rel="noopener"&#13;&#10; &gt;DNSSEC/TLSA Validator&lt;/a&gt;. Vous devriez voir cela :&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="plugin TLSA" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/10/Screenshot_159.png"&gt;&lt;/p&gt;&#10;&lt;h2 id="10-certificate-transparency"&gt;10. Certificate Transparency&#13;&#10;&lt;/h2&gt;&lt;p&gt;Certificate Transparency (CT) est en passe de devenir un standard. L&amp;rsquo;objectif derrière est de rendre public et transparent par les CAs toutes les informations autour de la génération d&amp;rsquo;un certificat. Ainsi, c&amp;rsquo;est une façon de lutter contre l&amp;rsquo;apparition de certificats frauduleux.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Certificate Transparency" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/10/Transparency_1.jpg"&gt;&lt;/p&gt;&#10;&lt;p&gt;Lors de la création du certificat, le CA envoie des informations au &lt;em&gt;log server&lt;/em&gt; qui répond avec un SCT (signed certificate timestamp). Ce SCT est soit intégré au certificat, soit présenté au travers d&amp;rsquo;autres moyens : une extension TLS, ou OCSP Stapling. Let&amp;rsquo;s Encrypt est déjà &lt;a class="link" href="https://crt.sh/?Identity=%25&amp;amp;iCAID=16418" target="_blank" rel="noopener"&#13;&#10; &gt;compatible avec certificate transparency&lt;/a&gt;, mais il ne présente pas encore de SCT (il est prévu que OCSP Stapling s&amp;rsquo;en occupe d&amp;rsquo;ici la fin d&amp;rsquo;année). Pour le moment on peut donc utiliser une &lt;strong&gt;extension TLS&lt;/strong&gt;, il faudra compiler nginx avec le &lt;a class="link" href="https://github.com/grahamedgecombe/nginx-ct" target="_blank" rel="noopener"&#13;&#10; &gt;module nginx-ct&lt;/a&gt;. Il ne fonctionnera qu&amp;rsquo;avec une version d&amp;rsquo;OpenSSL assez récente.&lt;/p&gt;&#10;&lt;p&gt;Pour obtenir le SCT de &lt;strong&gt;fullchain.pem&lt;/strong&gt; il nous faut utiliser &lt;a class="link" href="https://github.com/grahamedgecombe/ct-submit" target="_blank" rel="noopener"&#13;&#10; &gt;ct-submit&lt;/a&gt;.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/grahamedgecombe/ct-submit --depth&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ct-submit &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; go build&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./ct-submit ct.googleapis.com/pilot &amp;lt;fullchain.pem&amp;gt;fullchain.sct&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xxd fullchain.sct &lt;span class="c1"&gt;# Pour tester&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000000: 00a4 b909 90b4 &lt;span class="m"&gt;1858&lt;/span&gt; &lt;span class="m"&gt;1487&lt;/span&gt; bb13 a2cc &lt;span class="m"&gt;6770&lt;/span&gt; .......X......gp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000010: 0a3c &lt;span class="m"&gt;3598&lt;/span&gt; 04f9 1bdf b8e3 77cd 0ec8 0ddc .&amp;lt;5.......w.....&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000020: &lt;span class="m"&gt;1000&lt;/span&gt; &lt;span class="m"&gt;0001&lt;/span&gt; 4bc7 e617 c800 &lt;span class="m"&gt;0004&lt;/span&gt; &lt;span class="m"&gt;0300&lt;/span&gt; &lt;span class="m"&gt;4830&lt;/span&gt; ....K.........H0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000030: &lt;span class="m"&gt;4602&lt;/span&gt; &lt;span class="m"&gt;2100&lt;/span&gt; b9fe e206 f0f5 f600 93d5 e04c F.!............L&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000040: d2fd 75c9 e1fc a5c8 &lt;span class="m"&gt;4812&lt;/span&gt; a8b7 bc2c eb0c ..u.....H....,..&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000050: ee16 1fe9 &lt;span class="m"&gt;0221&lt;/span&gt; 008a &lt;span class="m"&gt;5974&lt;/span&gt; e1b6 a0e0 281a .....!..Yt....&lt;span class="o"&gt;(&lt;/span&gt;.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000060: 61e8 &lt;span class="m"&gt;3447&lt;/span&gt; 895f 7ad4 2f70 f528 &lt;span class="m"&gt;6133&lt;/span&gt; a445 a.4G._z./p.&lt;span class="o"&gt;(&lt;/span&gt;a3.E&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000070: 4fd4 ab60 ba36 db O..&lt;span class="sb"&gt;`&lt;/span&gt;.6.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Je vous suggère ici de créer un fichier &lt;code&gt;ct_domain.tld.conf&lt;/code&gt; où l&amp;rsquo;on mettra les paramètres nginx pour servir le SCT.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_ct&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_ct_static_scts&lt;/span&gt; &lt;span class="s"&gt;/path/to/sct/dir&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Normalement nginx devrait servir les SCTs qui sont dans ce dossier. Si jamais ça ne marche pas, il est possible que ce soit dû à une limitation pour laquelle le serveur par défaut doit impérativement servir des SCTs (ajoutez &lt;code&gt;default_server&lt;/code&gt; aux directives &lt;code&gt;listen&lt;/code&gt; d&amp;rsquo;un vhost d&amp;rsquo;un domaine qui utilise CT). Pour vérifier si Certificate Transparency est opérationnel, Chrome et Qualys SSL feront l&amp;rsquo;affaire.&lt;/p&gt;&#10;&lt;p&gt;A ce fichier de configuration on peut aussi ajouter un header, &lt;code&gt;Expect-CT&lt;/code&gt;. Il indique au browser que l&amp;rsquo;on attend l&amp;rsquo;utilisation de Certificate Transparency. Au jour d&amp;rsquo;aujourd&amp;rsquo;hui aucun browser ne l&amp;rsquo;utilise mais ce sera bientôt le cas. Surtout vérifiez bien que Certificate Transparency fonctionne et que les SCTs sont bien servis.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Expect-CT&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;enforce&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;max-age=86400&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans ce cas-ci le browser devrait forcer l&amp;rsquo;utilisation de Certificate Transparency (erreur si pas possible) pendant un jour.&lt;/p&gt;&#10;&lt;h2 id="11-on-récapitule-"&gt;11. On récapitule ?&#13;&#10;&lt;/h2&gt;&lt;p&gt;Et c&amp;rsquo;est après, je l&amp;rsquo;espère, vous avoir expliqué en quoi consistent les mécanismes utilisés, que je vais vous fournir les exemples de configuration. À chaque fois qu&amp;rsquo;il y a un &lt;code&gt;domain.tld&lt;/code&gt;, c&amp;rsquo;est bien sûr à remplacer par votre domaine. Créons peut-être un dossier &lt;code&gt;/etc/nginx/conf&lt;/code&gt; dans lequel on mettra des fichiers de configuration personnalisés, histoire d&amp;rsquo;éviter la redondance plus tard et de pouvoir maintenir plus facilement.&lt;/p&gt;&#10;&lt;p&gt;Créons un fichier &lt;code&gt;tls.conf&lt;/code&gt; où l&amp;rsquo;on mettra les paramètres TLS :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_protocols&lt;/span&gt; &lt;span class="s"&gt;TLSv1.2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_ecdh_curve&lt;/span&gt; &lt;span class="s"&gt;X25519:P-521:P-384&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_ciphers&lt;/span&gt; &lt;span class="s"&gt;EECDH+CHACHA20:EECDH+AESGCM&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_session_cache&lt;/span&gt; &lt;span class="s"&gt;shared:SSL:20m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_session_timeout&lt;/span&gt; &lt;span class="mi"&gt;15m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_session_tickets&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On désactive les tickets TLS car leur mauvaise implémentation nuit au principe de confidentialité persistance (FS). Les autres directives modifient le cache alloué aux sessions et le &lt;em&gt;timeout&lt;/em&gt; d&amp;rsquo;une session, elles sont à adapter selon les capacités de votre serveur et l&amp;rsquo;affluence des connexions.&lt;/p&gt;&#10;&lt;p&gt;Un fichier &lt;code&gt;hsts.conf&lt;/code&gt; pour HSTS :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;max-age=31536000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;includeSubDomains&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;preload&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Un fichier &lt;code&gt;hpkp_domain.tld.conf&lt;/code&gt; pour HPKP d&amp;rsquo;un domaine :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Public-Key-Pins&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;pin-sha256=&amp;#34;empreinte_ec_1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;pin-sha256=&amp;#34;empreinte&lt;/span&gt; &lt;span class="s"&gt;ec_2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;pin-sha256=&amp;#34;empreinte_rsa&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;max-age=5184000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;includeSubdomains&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Un fichier &lt;code&gt;ocsp.conf&lt;/code&gt; avec les paramètres OCSP :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_stapling&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ssl_stapling_verify&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resolver&lt;/span&gt; &lt;span class="n"&gt;213.133.98.98&lt;/span&gt; &lt;span class="n"&gt;213.133.99.99&lt;/span&gt; &lt;span class="s"&gt;valid=300s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resolver_timeout&lt;/span&gt; &lt;span class="s"&gt;5s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Un fichier &lt;code&gt;headers.conf&lt;/code&gt; qui peut être ajouté si l&amp;rsquo;application n&amp;rsquo;ajoute pas déjà ces headers :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;X-Frame-Options&lt;/span&gt; &lt;span class="s"&gt;SAMEORIGIN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;X-Content-Type-Options&lt;/span&gt; &lt;span class="s"&gt;nosniff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;X-XSS-Protection&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;mode=block&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans &lt;code&gt;sites-enabled/&lt;/code&gt;, on aura notre fichier &lt;code&gt;lambda.conf&lt;/code&gt; ainsi construit :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;domain.tld&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="nv"&gt;$host$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;domain.tld&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="s"&gt;/path/to/fullchain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="s"&gt;/path/to/privkey.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_trusted_certificate&lt;/span&gt; &lt;span class="s"&gt;/path/to/chain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/conf/tls.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/conf/hsts.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/conf/headers.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/conf/ocsp.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/etc/nginx/conf/hpkp_domain.tld.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#include /etc/nginx/conf/ct_domain.tld.conf;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;...&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;N&amp;rsquo;oubliez pas de redémarrer nginx une fois les paramètres appliqués, sans oublier un &lt;code&gt;nginx -t&lt;/code&gt; avant pour éviter les mauvaises surprises.&lt;/p&gt;&#10;&lt;p&gt;Les tests pour voir si vous avez tout bon :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Qualys SSL (SSL/TLS) : &lt;a class="link" href="https://www.ssllabs.com/ssltest/" target="_blank" rel="noopener"&#13;&#10; &gt;https://www.ssllabs.com/ssltest/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Cryptcheck (SSL/TLS): &lt;a class="link" href="https://tls.imirhil.fr/" target="_blank" rel="noopener"&#13;&#10; &gt;https://tls.imirhil.fr/&lt;/a&gt; (v2 bientôt)&lt;/li&gt;&#10;&lt;li&gt;Observatoire Mozilla (SSL/TLS + headers) : &lt;a class="link" href="https://observatory.mozilla.org" target="_blank" rel="noopener"&#13;&#10; &gt;https://observatory.mozilla.org&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;DNSSEC Analyzer (DNS) : &lt;a class="link" href="https://dnssec-debugger.verisignlabs.com/" target="_blank" rel="noopener"&#13;&#10; &gt;https://dnssec-debugger.verisignlabs.com/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;DANE Checker (DNS) : &lt;a class="link" href="https://www.huque.com/bin/danecheck" target="_blank" rel="noopener"&#13;&#10; &gt;https://www.huque.com/bin/danecheck&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Si vous en avez d&amp;rsquo;autres, proposez !&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img alt="QualysSSL" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/10/Screenshot_162.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Ce n&amp;rsquo;est pas difficile, et je ne pense pas avoir menti sur la marchandise, il s&amp;rsquo;agit d&amp;rsquo;une excellente configuration HTTPS, peut-être même un peu trop extrémiste. Si la compatibilité est un trop gros problème, appliquez les conseils que j&amp;rsquo;ai disséminés le long de l&amp;rsquo;article.&lt;/p&gt;&#10;&lt;p&gt;Article rédigé par Wonderfall, vous pouvez le suivre sur &lt;a class="link" href="https://masto.targaryen.house/@wonder" target="_blank" rel="noopener"&#13;&#10; &gt;Mastodon&lt;/a&gt; ou &lt;a class="link" href="https://twitter.com/thewonderfall" target="_blank" rel="noopener"&#13;&#10; &gt;Twitter&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>Installer Plesk Onyx sur Ubuntu 16.04 LTS et optimiser la configuration</title><link>https://jesuisadmin.fr/installer-plesk-onyx-ubuntu-16-optimiser/</link><pubDate>Fri, 15 Sep 2017 18:53:00 +0000</pubDate><guid>https://jesuisadmin.fr/installer-plesk-onyx-ubuntu-16-optimiser/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2017/09/Installer-Plesk-Onyx--4-.png" alt="Featured image of post Installer Plesk Onyx sur Ubuntu 16.04 LTS et optimiser la configuration" /&gt;&lt;p&gt;Si pour mon utilisation personnelle, je préfère configurer moi même un serveur avec nginx pour bénéficier des meilleures performances possibles, il m&amp;rsquo;arrive tout de même régulièrement d&amp;rsquo;installer Plesk Onyx.&lt;/p&gt;&#10;&lt;p&gt;Voici donc un tutoriel pour installer Plesk Onyx sur Ubuntu 16.04 LTS avec une configuration optimisée permettant d&amp;rsquo;avoir un serveur stable, sécurisé et performant.&lt;/p&gt;&#10;&lt;p&gt;On commence par optimiser un peu la configuration du kernel via le fichier sysctl.conf :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O /etc/sysctl.conf https://raw.githubusercontent.com/VirtuBox/ubuntu-nginx-web-server/master/etc/sysctl.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl -p&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo never &amp;gt; /sys/kernel/mm/transparent_hugepage/enabled&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O /etc/security/limits.conf https://raw.githubusercontent.com/VirtuBox/ubuntu-nginx-web-server/master/etc/security/limits.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Par défaut, Plesk Onyx utilise MySQL 5.7 sur Ubuntu Xenial, mais il est tout à fait possible d&amp;rsquo;utiliser MariaDB 10.1. Il suffit pour cela d&amp;rsquo;installer mariadb-server avant de débuter l&amp;rsquo;installation de Plesk.&lt;/p&gt;&#10;&lt;p&gt;On ajoute donc le dépôt MariaDB 10.1 :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;curl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sS&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;downloads&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mariadb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;MariaDB&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mariadb_repo_setup&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;bash&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;mariadb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;10.1&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;maxscale&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on met à jour la liste des dépôts avant d&amp;rsquo;installer MariaDB. Durant l&amp;rsquo;installation, laissez le mot de passe root vide. Il sera automatiquement mis à jour durant l&amp;rsquo;installation de Plesk.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install mariadb-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;MariaDB 10.1 est désormais installé sur notre serveur, nous pouvons donc passer à l&amp;rsquo;installation de Plesk en mode personnalisé. Il vous suffit de suivre les étapes pour choisir les composants et les extensions que vous souhaitez installer :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sh &amp;lt;(curl https://autoinstall.plesk.com/plesk-installer || wget -O - https://autoinstall.plesk.com/plesk-installer)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois l&amp;rsquo;installation terminée, n&amp;rsquo;ouvrez pas tout de suite l&amp;rsquo;interface web pour réaliser la configuration initiale. Nous allons tout d&amp;rsquo;abord activer le mode vps_optimized. Ce dernier désactive un bon nombre de modules apache, qui ne sont pas nécessaires sur un VPS.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;plesk bin vps_optimized --turn-on&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez enfin définir le langage par défaut via la CLI de Plesk :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;plesk bin locales --set-default fr-FR&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour sécuriser notre serveur, nous allons également activer l&amp;rsquo;option pci_compliance, cela va configurer les différents services pour rendre le serveur pci compliant.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;plesk sbin pci_compliance_resolver --enable all&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si comme moi, vous pensez qu&amp;rsquo;une clé d&amp;rsquo;échange Diffie-Hellman de 2048 bits est insuffisant, vous pouvez sans problème utiliser une clé ECC.&lt;/p&gt;&#10;&lt;p&gt;Il vous suffira ensuite de modifier la configuration SSL de Nginx, avec une meilleure suite de ciphers, et notre clé Diffie-Hellman :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nano /etc/nginx/conf.d/ssl&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Voici le contenu de mon fichier de configuration SSL pour Nginx :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_ciphers &amp;#39;EECDH+AESGCM:EECDH+CHACHA20&amp;#39;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_prefer_server_ciphers on;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_protocols TLSv1.2;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_ecdh_curve secp384r1;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_session_cache shared:SSL:20m;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_session_timeout 15m;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_session_tickets off;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il vous suffit ensuite de reload nginx pour appliquer les changement :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;nginx&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="n"&gt;nginx&lt;/span&gt; &lt;span class="n"&gt;reload&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Après avoir optimiser la configuration Nginx, nous pouvons passer à Apache. Pour cette partie, je me contente de modifier le fichier &lt;code&gt;/etc/apache2/conf-enabled/security.conf&lt;/code&gt; et d&amp;rsquo;y ajouter les headers suivants :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header set X-Content-Type-Options: &amp;#34;nosniff&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header set X-Frame-Options: &amp;#34;sameorigin&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header set Referrer-Policy &amp;#34;strict-origin-when-cross-origin&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header set x-xss-protection &amp;#34;1; mode=block&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On relance Apache via la commande &lt;code&gt;service apache2 restart&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez désormais vous connecter à l&amp;rsquo;interface Plesk via l&amp;rsquo;adresse affichée après l&amp;rsquo;installation. Vous pouvez à tout moment générer une autre adresse de connexion avec la commande &lt;code&gt;plesk login&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Si vous souhaitez modifier la configuration générale de Plesk, cela est faisable en utilisant l&amp;rsquo;extension Panel.ini editor, ou en modifiant directement le fichier /usr/local/psa/admin/conf/panel.ini. L&amp;rsquo;extension vous permet de définir depuis l&amp;rsquo;interface web vos propre variables pour les options Plesk, ainsi que pour les extensions.&#10;Par exemple, pour que l&amp;rsquo;extension let&amp;rsquo;s encrypt utilise des clés RSA de 4096 bits plutôt que de 2048 bits, il vous suffit d&amp;rsquo;ajouter au fichier panel.ini (via le fichier ou via l&amp;rsquo;extension dans la partie editor), les lignes suivantes :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ext-letsencrypt]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;renew-before-expiration = 45&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rsa-key-size = 4096&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez également désactivé les publicités pour certaines extensions, et les propositions de certificats SSL Symantec en ajoutant les lignes suivantes :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ext-security-advisor]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;promoteSymantec = false&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ext-catalog]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;contextAds = off&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez appliquer ces configurations en téléchargeant directement mon ficher panel.ini&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://raw.githubusercontent.com/VirtuBox/ubuntu-plesk-onyx/master/usr/local/psa/admin/conf/panel.ini -O /usr/local/psa/admin/conf/panel.ini&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il est même possible d&amp;rsquo;aller plus loin avec Plesk Onyx, puisque vous pouvez compiler Nginx avec les modules de votre choix afin de remplacer le paquet installé par Plesk.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Edit du 11/12/2017 :&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Je propose désormais un script bash pour compiler la dernière release mainline de Nginx (v1.13.8) avec certains modules tel que Brotli, support de TLS 1.3, dynamic-tls-records-patch, pagespeed etc &amp;hellip;&lt;/p&gt;&#10;&lt;p&gt;Le script est pour le moment mis à jour uniquement pour Plesk Onyx sur Ubuntu 16.04 LTS, vous pouvez trouver toutes les informations sur &lt;a class="link" href="https://github.com/VirtuBox/plesk-nginx" target="_blank" rel="noopener"&#13;&#10; &gt;mon dépôt Github&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;N&amp;rsquo;hésitez pas à ouvrir une Issue sur Github si vous rencontrez des erreurs durant la compilation.&lt;/p&gt;&#10;</description></item><item><title>Mettre en place un serveur mail avec mail-in-a-box sur Ubuntu 18.04 LTS</title><link>https://jesuisadmin.fr/mettre-place-serveur-mail-mail-in-a-box/</link><pubDate>Sat, 08 Jul 2017 14:07:30 +0000</pubDate><guid>https://jesuisadmin.fr/mettre-place-serveur-mail-mail-in-a-box/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2019/07/mailinabox.jpg" alt="Featured image of post Mettre en place un serveur mail avec mail-in-a-box sur Ubuntu 18.04 LTS" /&gt;&lt;p&gt;Il n’est pas toujours facile de mettre en place un serveur mail, notamment si lorsque l’on souhaite utiliser l’ensemble des protocoles qui assurent l’authentification des emails tel que SPF, DKIM et DMARC.&#10;C’est pourquoi je vais vous présenter dans ce tutoriel une solution pour installer un serveur mail sécurisé et stable avec &lt;a class="link" href="https://mailinabox.email" target="_blank" rel="noopener"&#13;&#10; &gt;mail-in-a-box&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Article mis à jour le 29/07/2019&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="pourquoi-mail-in-a-box-"&gt;Pourquoi mail-in-a-box ?&#13;&#10;&lt;/h2&gt;&lt;p&gt;J’ai testé de nombreuses autres solutions dont notamment Modoboa, Mailcow ou encore iRedMail, et mail-in-a-box est d’après moi la solution la plus simple à déployer, elle propose l’ensemble des fonctionnalités requises pour avoir un serveur mail stable, sécurisé et dispose d&amp;rsquo;un système de backup.&lt;/p&gt;&#10;&lt;p&gt;Les principales fonctionnalités sont :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Serveur Mail supportant les protocoles : SPF, DKIM &amp;amp; DMARC&lt;/li&gt;&#10;&lt;li&gt;Serveur DNS avec DNSSEC&lt;/li&gt;&#10;&lt;li&gt;Certificats SSL/TLS Let’s Encrypt&lt;/li&gt;&#10;&lt;li&gt;Webmail Roundcube&lt;/li&gt;&#10;&lt;li&gt;Gestion et synchronisation des contacts &amp;amp; calendrier via OwnCloud&lt;/li&gt;&#10;&lt;li&gt;Backup local, Amazon S3 ou via Rsync&lt;/li&gt;&#10;&lt;li&gt;Statud check hebdomadaire incluant le blacklisting de l’IP du serveur&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="installer-mail-in-a-box"&gt;Installer mail-in-a-box&#13;&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Pré-requis :&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;– Un VPS avec Ubuntu 18.04 LTS et 2Go de RAM&#10;– Un nom de domaine&#10;– Se connecter au serveur distant avec des clés SSH&lt;/p&gt;&#10;&lt;p&gt;On passe à l’installation :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s https://mailinabox.email/setup.sh &lt;span class="p"&gt;|&lt;/span&gt; sudo bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lors de l’installation, choisissez le hostname de votre serveur en utilisant un sous-domaine. Par défaut mail-in-a-box utilisera box.votredomaine.com&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Screenshot_55" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_55.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Définissez ensuite la première adresse email que vous souhaitez créer, ce sera également votre nom d’utilisateur pour accéder à l’interface d’administration&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Screenshot_54" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_54.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Sélectionnez votre zone géographique pour mettre à jour le serveur de temps puis validez.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Screenshot_56" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_56.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Sélectionnez ensuite la ville correspondant à votre fuseau horaire, dans mon cas Paris.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Screenshot_57" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_57.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Une fois l’installation terminée, vous pourrez accéder au panel d’administration via l’adresse :&#10;&lt;code&gt;https://IP-de-Votre-Serveur/admin&lt;/code&gt;&lt;/p&gt;&#10;&lt;h3 id="configurer-le-serveur-mail"&gt;Configurer le serveur mail&#13;&#10;&lt;/h3&gt;&lt;p&gt;Vous avez ensuite le choix d’utiliser la box pour gérer vos DNS ou non. En effet Mail-in-a-box inclut un serveur DNS qui mettra en place automatiquement l’ensemble des enregistrements DNS nécessaires pour utiliser le serveur en tant que serveur mail pour votre domaine.&lt;/p&gt;&#10;&lt;p&gt;Cependant, vous pouvez très bien utiliser un service DNS externe et il vous suffira dans ce cas de vous rendre sur la page System &amp;gt; External DNS pour obtenir un listing complet des enregistrements DNS. Il vous faudra alors copier ces enregistrements du côté de votre registar pour utiliser la box en tant que serveur mail.&lt;/p&gt;&#10;&lt;p&gt;Les enregistrements nécessaires pour utiliser la box en tant que serveur mail sont :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;votredomaine.com MX(10) &amp;quot;box.votredomaine.com&amp;quot;&lt;/code&gt; : pour définir la box en tant que serveur mail principal&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;votredomaine.com TXT &amp;quot;v=spf1 a:box.votredomaine.com -all&amp;quot;&lt;/code&gt; : pour spécifier que la box est le seul serveur autorisé à envoyer des emails pour ce domaine&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;_dmarc.votredomaine.com TXT &amp;quot;v=DMARC1; p=quarantine&amp;quot;&lt;/code&gt; : pour indiquer que les emails ne respectant pas les règles DKIM ou SPF doivent être envoyé en quarantaine.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;mail._domainkey.votredomaine.com TXT &amp;quot;v=DKIM1; k=rsa; s=email; p=la-signature-très-longue-pour-le-dkim&amp;quot;&lt;/code&gt; : qui correspond à la signature DKIM utilisée pour signer les emails sortant de votre serveur.&lt;/p&gt;&#10;&lt;p&gt;Mail-in-a-box ajoute également les enregistrements associés au sous domaine www pour éviter que des emails soient envoyés via &lt;a class="link" href="https://www.votredomaine.tld" target="_blank" rel="noopener"&#13;&#10; &gt;www.votredomaine.tld&lt;/a&gt;. Ils sont facultatifs mais cela ne coûte rien de les mettre en place.&lt;/p&gt;&#10;&lt;p&gt;Une fois les enregistrements DNS configurés pour le domaine de votre box, vous pourrez aller dans l’onglet System TLS (SSL) Certificates, et installer un certificat SSL Let’s Encrypt pour sécuriser votre serveur web et mail.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Screenshot_58" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_58.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Une fois le processus terminé, vous pourrez accéder à l’interface d’administration via l’adresse : &lt;a class="link" href="https://box.votredomaine.com/admin" target="_blank" rel="noopener"&#13;&#10; &gt;https://box.votredomaine.com/admin&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;N’oubliez pas également de définir le reverse-DNS sur l’IP du serveur. Cela se fait via le panel de gestion de votre VPS et nécessite que l’enregistrement DNS associé soit existant. Dans cet exemple, le reverse DNS à spécifié sur l’IP du serveur est box.vtbox.xyz&lt;/p&gt;&#10;&lt;h3 id="connecter-un-client-mail"&gt;Connecter un client mail&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour connecter vos clients mail, l’adresse pour les services pop/imap et smtp sera box.votredomaine.com. Les ports à utiliser pour se connecter avec SSL/TLS sont :&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;IMAP&lt;/strong&gt; : 993 avec SSL/TLS&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;POP&lt;/strong&gt; : 995 avec SSL/TLS&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;SMTP&lt;/strong&gt; : 587 avec TLS&lt;/p&gt;&#10;&lt;h3 id="ajouter-un-domaine"&gt;Ajouter un domaine&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour ajouter un domaine, il vous suffit d’aller dans l’onglet Mail &amp;gt; Users et d’ajouter une adresse email utilisant un autre domaine que celui de votre box.&lt;/p&gt;&#10;&lt;p&gt;Mail-in-a-box mettra automatiquement en place les enregistrements DNS associés et vous n’aurez alors qu’à modifier les nameservers du nouveau domaine, ou les retrouver dans l’onglet External DNS si vous souhaitez les copier via votre registar.&lt;/p&gt;&#10;&lt;h3 id="mettre-à-jour-mail-in-a-box"&gt;Mettre à jour mail-in-a-box&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour la mise à jour de votre serveur mail, rien de plus simple, puisqu&amp;rsquo;il vous suffit d&amp;rsquo;utiliser à nouveau la commande d&amp;rsquo;installation :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s https://mailinabox.email/setup.sh &lt;span class="p"&gt;|&lt;/span&gt; sudo bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="backup--migration"&gt;Backup &amp;amp; Migration&#13;&#10;&lt;/h3&gt;&lt;p&gt;Le processus de backup de mail-in-a-box est relativement simple, puisque par défaut les backups sont stockés dans le répertoire &lt;code&gt;/home/user-data/backup&lt;/code&gt;.&#10;Dans ce répertoire, vous trouverez un fichier &lt;code&gt;secret_key.txt&lt;/code&gt; qui contient la clé privée utilisée pour chiffrer les sauvegardes stockées dans le répertoire encrypted.&lt;/p&gt;&#10;&lt;p&gt;Pour migrer ou restaurer un serveur depuis un sauvegarde, il vous suffit de réinstaller mail-in-a-box sur un serveur, avant de transférer le dernier backup dont vous disposez ainsi que la clé privée.&lt;/p&gt;&#10;&lt;p&gt;Vous pourrez ensuite restaurer les données en utilisant l&amp;rsquo;outil duplicity :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PASSPHRASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;cat your_backup_secret_key_file.txt&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo -E duplicity restore --force file:///emplacement/des/backup /home/user-data/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il suffira ensuite d&amp;rsquo;utiliser la commande &lt;code&gt;mailinabox&lt;/code&gt; pour appliquer à nouveau la configuration du serveur :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mailinabox&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Installer et configurer proftpd en serveur FTP avec TLS</title><link>https://jesuisadmin.fr/installer-serveur-ftp-plusieurs-utilisateurs-proftpd/</link><pubDate>Sun, 16 Apr 2017 17:20:02 +0000</pubDate><guid>https://jesuisadmin.fr/installer-serveur-ftp-plusieurs-utilisateurs-proftpd/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2019/04/Copie-de-Mettre-en-place-un-VPN-mesh-avec-tinc-sur-Debian_Ubuntu---Raspbian.png" alt="Featured image of post Installer et configurer proftpd en serveur FTP avec TLS" /&gt;&lt;p&gt;Si vous utilisez comme moi EasyEngine/WordOps sur votre serveur, vous souhaitez peut-être proposer un accès via ftp, tout en limitant l’accès aux fichiers d’un site web pour chaque utilisateur.&lt;/p&gt;&#10;&lt;p&gt;Pour cela, nous allons installer et configurer proftpd afin que chaque utilisateur ne puisse accéder qu&amp;rsquo;à son répertoire, sans causer de problèmes de permissions sur les fichiers d&amp;rsquo;un site. Enfin nous mettrons en place un certificat SSL pour chiffrer les échanges avec le serveur distant.&lt;/p&gt;&#10;&lt;h3 id="installation-de-profpd"&gt;Installation de profpd&#13;&#10;&lt;/h3&gt;&lt;p&gt;On commence par installer proftpd :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get update &amp;amp;&amp;amp; apt-get install proftpd&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on modifie la configuration de proftpd :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nano /etc/proftpd/proftpd.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour empêcher les utilisateurs de remonter dans l&amp;rsquo;arboresence des fichiers du serveur, il faut de décommenter la ligne suivante en supprimant le # :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DefaultRoot ~&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il est également préférable décommenter l&amp;rsquo;option &lt;code&gt;RequireValidShell&lt;/code&gt; afin de pouvoir ajouter des utilisateurs sans accès ssh :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RequireValidShell off&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Enfin, si vous utilisez un pare-feu sur votre serveur, il est nécessaire de décommenter la ligne PassivePorts en définissant une intervalle de ports.&#10;Dans mon exemple, j&amp;rsquo;ai choisi d&amp;rsquo;utiliser les ports 49000 à 50000 pour les connexions FTP passives :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PassivePorts 49000 50000&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il suffit ensuite d&amp;rsquo;autoriser ces ports dans votre pare-feu. Si vous utilisez UFW, il suffit d&amp;rsquo;utiliser la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow 49000:50000/tcp&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On redémarre ensuite proftpd pour appliquer les modifications :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;service proftpd restart&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ajouter-un-utilisateur"&gt;Ajouter un utilisateur&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour ajouter un utilisateur, il faut définir son dossier home qui correspond au dossier du site web concerné, et l’ajouter au groupe www-data pour qu’il n’y ai pas de problème au niveau des permissions. Remplacez dans la commande suivante le dossier utilisé après &amp;ndash;home et le nom de l&amp;rsquo;utilisateur :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;adduser&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tld&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;shell&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="bp"&gt;false&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;ingroup&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="n"&gt;votre&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;utilisateur&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La commande précédente inclut la directive &amp;ndash;shell /bin/false, interdisant ainsi l&amp;rsquo;accès au shell pour le nouvel utilisateur puisque nous avons précédemment définit que l&amp;rsquo;utilisation du serveur FTP ne nécessitait pas un accès valide au shell.&lt;/p&gt;&#10;&lt;p&gt;Enfin pour ajouter les permissions au groupe sur un dossier on utilise :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;chmod&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;domainname&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Votre utilisateur pourra ainsi ajouter ou supprimer des fichiers en se connectant via un client ftp, mais il ne pourra pas accéder à d&amp;rsquo;autres fichiers que ceux présents dans son répertoire &amp;ndash;home et il ne pourra pas se connecter au serveur en SSH.&lt;/p&gt;&#10;&lt;h3 id="configuration-tls"&gt;Configuration TLS&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour les transferts de fichiers sur internet, le chiffrement, c&amp;rsquo;est mieux avec. Nous allons donc voir comment configurer proftpd pour en faire un serveur FTP&lt;strong&gt;S&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h4 id="avec-un-certificat-auto-signé"&gt;Avec un certificat auto-signé&#13;&#10;&lt;/h4&gt;&lt;p&gt;Un certificat auto-signé n&amp;rsquo;apparaîtra peut-être pas comme valide, mais vous permettra de bénéficier du chiffrement autant qu&amp;rsquo;un certificat issue d&amp;rsquo;une authorité de certificats.&lt;/p&gt;&#10;&lt;p&gt;On commence par créer un répertoire pour stocker notre certificat :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir /etc/proftpd/ssl&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on génère à l&amp;rsquo;aide d&amp;rsquo;OpenSSL notre certificat :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -new -x509 -days &lt;span class="m"&gt;365&lt;/span&gt; -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Voici le déroulement de la procédure :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;root@vps~# openssl req -new -x509 -days &lt;span class="m"&gt;365&lt;/span&gt; -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Generating a &lt;span class="m"&gt;2048&lt;/span&gt; bit RSA private key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.................+++&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;..............+++&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;writing new private key to &lt;span class="s1"&gt;&amp;#39;/etc/proftpd/ssl/proftpd.key.pem&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-----&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;You are about to be asked to enter information that will be incorporated&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;into your certificate request.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;What you are about to enter is what is called a Distinguished Name or a DN.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;There are quite a few fields but you can leave some blank&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;For some fields there will be a default value,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;If you enter &lt;span class="s1"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;, the field will be left blank.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-----&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Country Name &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; letter code&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;AU&lt;span class="o"&gt;]&lt;/span&gt;:FR&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;State or Province Name &lt;span class="o"&gt;(&lt;/span&gt;full name&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Some-State&lt;span class="o"&gt;]&lt;/span&gt;:-&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Locality Name &lt;span class="o"&gt;(&lt;/span&gt;eg, city&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;: Paris&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Organization Name &lt;span class="o"&gt;(&lt;/span&gt;eg, company&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Internet Widgits Pty Ltd&lt;span class="o"&gt;]&lt;/span&gt;: VirtuBox&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Organizational Unit Name &lt;span class="o"&gt;(&lt;/span&gt;eg, section&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:IT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Common Name &lt;span class="o"&gt;(&lt;/span&gt;e.g. server FQDN or YOUR name&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:server.virtubox.net&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Email Address &lt;span class="o"&gt;[]&lt;/span&gt;:admin@virtubox.net&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On s&amp;rsquo;assure ensuite de définir des permissions correctes sur le certificat et la clé privée :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod &lt;span class="m"&gt;600&lt;/span&gt; /etc/proftpd/ssl/proftpd.*&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et on peut alors éditer le fichier &lt;code&gt;/etc/proftpd/tls.conf&lt;/code&gt; dont le contenu devra ressembler à :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSEngine on&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSLog /var/log/proftpd/tls.log&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSProtocol TLSv1.2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSCipherSuite AES128+EECDH:AES128+EDH&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSOptions NoCertRequest AllowClientRenegotiations NoSessionReuseRequired&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSVerifyClient off&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSRequired on&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RequireValidShell no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;/IfModule&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois les modifications enregistrées, il vous suffit de décommenter la ligne&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Include /etc/proftpd/tls.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;dans le fichier &lt;code&gt;/etc/proftpd/protftpd.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez ensuite relancer le service proftpd pour appliqer la nouvelle configuration.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo service proftpd restart&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Installer votre résolveur DNS avec unbound</title><link>https://jesuisadmin.fr/installer-resolveur-dns-unbound/</link><pubDate>Thu, 06 Apr 2017 13:23:11 +0000</pubDate><guid>https://jesuisadmin.fr/installer-resolveur-dns-unbound/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/resolveur-DNS.jpg" alt="Featured image of post Installer votre résolveur DNS avec unbound" /&gt;&lt;h3 id="pourquoi-mettre-en-place-un-résolveur-dns-"&gt;Pourquoi mettre en place un résolveur DNS ?&#13;&#10;&lt;/h3&gt;&lt;p&gt;Avec une généralisation de la censure et de nombreuses pannes sur les résolveurs DNS des FAI, beaucoup d’articles recommandent l’utilisation des résolveurs DNS Google. Mais si ce dernier propose un service stable et performant, il peut être inquiétant de laisser google analyser l’ensemble des requêtes DNS que vous pouvez faire en naviguant sur le web.&lt;/p&gt;&#10;&lt;p&gt;Dans ce tutoriel, je vais donc vous expliquer comment mettre en place un résolveur DNS récursif, supportant la norme DNSSEC avec unbound. Pour l’installation, j’ai utilisé un VPS avec Ubuntu 16.04 LTS.&lt;/p&gt;&#10;&lt;h3 id="installer-et-configurer-unbound"&gt;Installer et configurer unbound&#13;&#10;&lt;/h3&gt;&lt;p&gt;Tout d’abord, il faut installer unbound :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install unbound&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Après quoi, il faut créer un fichier de configuration dans le dossier /etc/unbound/unboud.conf.d/ que vous pouvez nommer mondns.conf par exemple.&#10;Voici le contenu de ce fichier :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;control&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;allow&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;control&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;allow&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;hints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/var/lib/unbound/root.hints&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;verbosity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;qname&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;minimisation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;threads&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;slabs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rrset&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;slabs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;infra&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;slabs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;slabs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rrset&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;outgoing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;465&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rcvbuf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sndbuf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;53&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ip4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ip6&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;udp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;tcp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;daemonize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hide&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;identity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hide&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;harden&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;harden&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dnssec&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;stripped&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;harden&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;referral&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;caps&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;prefetch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Attention, l’option *qname-minimisation: yes *ne fonctionne que sur Ubuntu car unbound 1.5.7 n’est pas disponible sur le repository debian.&lt;/p&gt;&#10;&lt;p&gt;On télécharge ensuite le fichier contenant les IPs des 13 serveurs de la racine.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;wget https://www.internic.net/domain/named.cache -O /var/lib/unbound/root.hints&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Il ne nous reste plus qu’à redémarrer le service unbound :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;service unbound restart&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Et votre résolveur DNS est désormais opérationnel ! (vérifiez que le service unbound fonctionne correctement avec la commande &lt;em&gt;service unbound status&lt;/em&gt;)&#10;Vous pouvez maintenant éditer le fichier /etc/resolv.conf pour remplacer l’IP du nameserver utilisé par 127.0.0.1.&lt;/p&gt;&#10;&lt;p&gt;Ensuite, si vous souhaitez automatiser la mise à jour des serveurs de la racine, vous pouvez le faire en ajoutant un cron avec le script suivant :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;wget https://git.virtubox.net/virtubox/unbound-dns-server/raw/master/update-root-dns.sh&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;chmod +x update-root-dns.sh&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;crontab -e&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;0 0 * * * ./update-root-dns.sh&lt;/code&gt;&lt;/p&gt;&#10;&lt;h3 id="résolveur-dns-public-ouverts-de-virtubox"&gt;Résolveur DNS Public Ouverts de VirtuBox&#13;&#10;&lt;/h3&gt;&lt;p&gt;Si vous n’avez pas l’envie ou la patience de mettre en place votre propre résolveur DNS, vous pouvez utiliser ceux mis à disposition par &lt;a class="link" href="https://virtubox.net" target="_blank" rel="noopener"&#13;&#10; &gt;VirtuBox&lt;/a&gt;  :&lt;/p&gt;&#10;&lt;p&gt;Nom : **dns.vtbox.net **&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IPv4 : 163.172.189.181&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IPv6 : 2001:bc8:4400:2100::25:5&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nom : &lt;strong&gt;sdns.vtbox.net&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IPv4 : 217.182.205.213&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IPv6 : 2001:41d0:302:2100::7a77&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Les deux résolveurs utilisent la même configuration que ci-dessus, avec l’ajout de trois lignes afin d’avoir les statistiques d’utilisation :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;statistics-interval: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;extended-statistics: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;statistics-cumulative: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si vous souhaitez aller encore plus loin, vous pouvez également mettre en place un résolveur DNSCrypt qui permet de chiffrer les requêtes faites entre votre machine et le résolveur DNS.&lt;/p&gt;&#10;&lt;p&gt;Je vous invite à jeter un coup d’œil sur le &lt;a class="link" href="https://www.noobunbox.net/noobunbox/resolveur-dnscrypt" target="_blank" rel="noopener"&#13;&#10; &gt;tutoriel de noobunbox&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Tutoriel inspiré de l’article de &lt;a class="link" href="https://www.shaftinc.fr/arretez-google-dns.html" target="_blank" rel="noopener"&#13;&#10; &gt;shaftinc.fr&lt;/a&gt;.&lt;/p&gt;&#10;</description></item></channel></rss>