Accédez à votre serveur à distance et en toute sécurité¶
Dernière mise à jour: mai 2022. Destiné aux utilisateurs chevronnés. De solides compétences techniques sont requises.
Après avoir installé avec succès votre serveur Ubuntu et configuré les mesures de sécurité de base et avancées, ce chapitre explique comment :
- faire pointer un (sous-)domaine vers votre adresse IP personnelle avec DuckDNS
- chiffrer le trafic avec Let's Encrypt
- accéder à des services locaux, utiliser un fournisseur DNS respectant la vie privée et bloquer les publicités avec Pi-hole
- protéger votre serveur avec un proxy inverse
- accéder à votre serveur de partout dans le monde et en toute sécurité avec OpenVPN
Configurer un domaine avec DuckDNS¶
Les adresses lisibles sont plus faciles à retenir que des adresses IP aléatoires. Plutôt que de taper 18.192.76.182
dans le navigateur, la plupart des utilisateurs préfèrent naviguer vers www.gofoss.net. Pour que cela fonctionne aussi avec votre serveur, il vous faut un nom unique qui pointe vers votre adresse IP personnelle, également appelé nom de domaine. En outre, un nom de domaine est nécessaire pour chiffrer le trafic, comme expliqué par la suite.
DuckDNS permet d'enregistrer gratuitement un (sous-)domaine et de le faire pointer dynamiquement vers votre adresse IP personnelle. Ce service fonctionne même si votre adresse IP change souvent. Il suffit de se rendre sur le site de DuckDNS et d'enregistrer le (sous-)domaine de votre choix. Vous recevrez ensuite un jeton unique (en anglais, « token »).
Dans le cadre de ce tutoriel, nous avons enregistré le (sous-)domaine gofoss.duckdns.org
et reçu le jeton ebaa3bd3-177c-4230-8d91-a7a946b5a51e
. Cela nous permettra plus tard d'accéder aux services du serveur via des adresses telles que https://monservice.gofoss.duckdns.org
.
Chiffrer le trafic avec Let's Encrypt¶
Tout trafic devrait être chiffré via HTTPS. La barre d'adresse de votre navigateur devrait à tout moment afficher une connexion sécurisée, que vous naviguez sur Internet ou que vous accédez à vos services auto-hébergés. Cela signifie que vous avez besoin de certificats SSL – vous pouvez en achetez ou en obtenir gratuitement auprès de Let's Encrypt, une autorité de certification de confiance. Vous trouverez des instructions détaillées ci-dessous.
Montrez-moi le guide étape par étape
Installer Dehydrated¶
Let's Encrypt doit vérifier que vous êtes réellement propriétaire du domaine avant de délivrer un certificat. Un programme astucieux appelé Dehydrated rend cela possible. Connectez-vous à votre serveur et téléchargez Dehydrated :
sudo apt install git
git clone https://github.com/dehydrated-io/dehydrated.git
Allez dans le répertoire dehydrated
et créer un premier fichier de configuration :
cd dehydrated
vi domains.txt
Ajoutez la ligne suivante, et assurez-vous de saisir votre propre nom de domaine :
*.gofoss.duckdns.org > gofoss.duckdns.org
Enregistrez et fermez le fichier (:wq!
), puis créez un second fichier de configuration :
vi config
Ajoutez les lignes suivantes. Veillez à saisir votre propre adresse électronique :
CHALLENGETYPE="dns-01"
BASEDIR=/etc/dehydrated
HOOK="${BASEDIR}/hook.sh"
CONTACT_EMAIL=gofoss@gofoss.net
Enregistrez et fermez le fichier (:wq!
), puis créez un troisième fichier de configuration :
vi hook.sh
Ajoutez les lignes suivantes. Assurez-vous de saisir votre propre nom de domaine, ainsi que votre propre jeton délivré par DuckDNS :
DOMAIN="gofoss.duckdns.org" # indiquez votre domaine ici
TOKEN="ebaa3bd3-177c-4230-8d91-a7a946b5a51e" # indiquez votre jeton ici
case "$1" in
"deploy_challenge")
curl "https://www.duckdns.org/update?domains=$DOMAIN&token=$TOKEN&txt=$4"
echo
;;
"clean_challenge")
curl "https://www.duckdns.org/update?domains=$DOMAIN&token=$TOKEN&txt=removed&clear=true"
echo
;;
"deploy_cert")
;;
"unchanged_cert")
;;
"startup_hook")
;;
"exit_hook")
;;
*)
echo Unknown hook "${1}"
exit 0
;;
esac
Enregistrez et fermez le fichier (:wq!
).
Attention : Les instructions ci-dessus doivent être modifiées si vous utilisez un autre domaine que DuckDNS. Veuillez consulter la documentation de Dehydrated ou la communauté de Let's Encrypt pour configurer correctement la validation DNS.
La prochaine série de commandes crée un répertoire où tous les certificats SSL seront stockés, appelé certs
. Les fichiers dehydrated
et hook.sh
sont rendus exécutables. Le répertoire dehydrated
est déplacé vers /etc/dehydrated
. Enfin, gofossadmin
reçoit la propriété du répertoire /etc/dehydrated
. Assurez-vous d'ajuster le nom de l'administrateur à votre propre configuration :
mkdir certs
chmod a+x dehydrated
chmod a+x hook.sh
cd ..
sudo mv dehydrated /etc/dehydrated
sudo chown -R gofossadmin:gofossadmin /etc/dehydrated
Vérifiez le contenu du répertoire :
sudo ls -al /etc/dehydrated
Le terminal devrait afficher quelque chose comme :
drwxr-xr-x 2 gofossadmin gofossadmin 4096 Jan 01 00:00 .
drwxr-xr-x 4 gofossadmin gofossadmin 4096 Jan 01 00:00 ..
-rw-r--r-- 1 gofossadmin gofossadmin 200 Jan 01 00:00 certs
-rw-r--r-- 1 gofossadmin gofossadmin 200 Jan 01 00:00 config
-rwxr-xr-x 1 gofossadmin gofossadmin 700000 Jan 01 00:00 dehydrated
-rw-r--r-- 1 gofossadmin gofossadmin 200 Jan 01 00:00 docs
-rw-r--r-- 1 gofossadmin gofossadmin 20 Jan 01 00:00 domains.txt
-rwxr-xr-x 1 gofossadmin gofossadmin 700 Jan 01 00:00 hook.sh
Créer les certificats¶
Inscrivez-vous auprès de Let's Encrypt :
bash /etc/dehydrated/dehydrated --register --accept-terms
Cette commande crée le répertoire /etc/dehydrated/accounts
, contenant vos informations d'enregistrement. Le terminal devrait afficher quelque chose comme :
# INFO: Using main config file /etc/dehydrated/config
+ Generating account key...
+ Registering account key with ACME server...
+ Done!
Maintenant, créez les certificats SSL :
bash /etc/dehydrated/dehydrated -c
Le terminal devrait afficher quelque chose comme :
+ Creating chain cache directory /etc/dehydrated/chains
Processing gofoss.duckdns.org
+ Creating new directory /etc/dehydrated/certs/gofoss.duckdns.org ...
+ Signing domains...
+ Generating private key...
+ Generating signing request...
+ Requesting new certificate order from CA...
+ Received 1 authorizations URLs from the CA
+ Handling authorization for gofoss.duckdns.org
+ 1 pending challenge(s)
+ Deploying challenge tokens...
OK
+ Responding to challenge for gofoss.duckdns.org authorization...
+ Challenge is valid!
+ Cleaning challenge tokens...
OK
+ Requesting certificate...
+ Checking certificate...
+ Done!
+ Creating fullchain.pem...
+ Done!
C'est fait ! Deux clés SSL ont été créées pour chiffrer tout le trafic vers et depuis vos services auto-hébergés. Nous expliquerons plus tard comment utiliser ces clés.
Clés | Emplacement |
---|---|
Clé publique | /etc/dehydrated/certs/gofoss.duckdns.org/fullchain.pem |
Clé privée | /etc/dehydrated/certs/gofoss.duckdns.org/privkey.pem |
Renouveler les certificats automatiquement¶
Les certificats de Let's Encrypt expirent après 90 jours, et peuvent être renouvelés 30 jours avant leur expiration. Pour automatiser ces mises à jour, créez d'abord un fichier journal :
sudo touch /var/log/dehydrated
Ensuite, créez une tâche cron hebdomadaire qui vérifie la validité du certificat et, si nécessaire, le renouvelle :
sudo vi /etc/cron.weekly/dehydrated
Ajoutez le contenu suivant :
#!/bin/sh
MYLOG=/var/log/dehydrated
echo "Checking cert renewals at `date`" >> $MYLOG
/etc/dehydrated/dehydrated -c >> $MYLOG 2>&1
Enregistrez et fermez le fichier (:wq!
). Puis, rendez le script exécutable :
sudo chmod +x /etc/cron.weekly/dehydrated
Testez la tâche cron :
sudo bash /etc/cron.weekly/dehydrated
sudo cat /var/log/dehydrated
Le terminal devrait afficher quelque chose comme :
Checking cert renewals at Sun 01 Jan 2021 01:29:06 PM CEST
# INFO: Using main config file /etc/dehydrated/config
Processing *.gofoss.duckdns.org
+ Checking domain name(s) of existing cert... unchanged.
+ Checking expire date of existing cert...
+ Valid till Mar 12 10:23:18 2021 GMT (Longer than 30 days). Skipping renew!
Montrez-moi une vidéo récapitulative (2min)
Qu'en est-il des certificats auto-signés ?
Il est possible d'utiliser des certificats auto-signés pour le chiffrement HTTPS. Cela dit, il arrive souvent que ce type de certificats ne soit pas reconnus par les navigateurs et les applications, ou génère des avertissements et des messages d'erreur. Sur les téléphones Android par exemple, les certificats auto-signés doivent d'abord être importés et approuvés. Pour ces raisons, nous suggérons de privilégier une autorité de certification comme Let's Encrypt.
Gérer le trafic et bloquer les publicités avec Pi-hole¶
Pi-hole est un outil très pratique : il est capable de rediriger vers des adresses locales telles que https://monservice.gofoss.duckdns.org
, vous permet de choisir un fournisseur DNS et bloque les publicités et traqueurs. Suivez les instructions ci-dessous pour configurer Pi-hole sur votre serveur.
Montrez-moi le guide étape par étape
Installation de Pi-hole¶
Au moment d'écrire ces lignes, 5.10 était la dernière version de Pi-hole. Le logiciel est assez léger, 50 Mo d'espace libre et 512 Mo de RAM suffisent pour l'exécuter sur Ubuntu. Pi-hole nécessite également une adresse IP statique ainsi qu'Apache et PHP, conforme aux réglages que nous avons configurés dans les chapitres précédents. Exécutez le script d'installation de Pi-hole :
sudo curl -sSL https://install.pi-hole.net | bash
Suivez les instructions à l'écran:
Instruction | Description |
---|---|
This installer will transform your device into a network-wide ad blocker! | Appuyez sur ENTRÉE pour continuer. |
The Pi-hole is free, but powered by your donations | Appuyez sur ENTRÉE pour continuer. |
The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to function properly | Sélectionnez Yes et appuyez sur ENTRÉE pour continuer. |
Choose An Interface | Sélectionnez votre interface réseau. Appuyez sur TAB pour changer de sélection, ESPACE pour confirmer votre sélection, et ENTRÉE pour continuer. |
Select Upstream DNS Provider. To use your own, select Custom | Choisissez un fournisseur DNS. Dans cet exemple, nous utiliserons UncensoredDNS, mais vous pouvez choisir n'importe quel autre fournisseur DNS ! Nous vous suggérons de choisir un fournisseur DNS autre que votre FAI, Cloudfare ou Google. Vous trouverez plus d'informations sur les fournisseurs DNS à la fin de cette section. |
Pi-hole relies on third party lists in order to block ads. | Appuyez sur ENTRÉE pour continuer. Nous vous expliquerons plus tard comment ajouter plus de listes de blocage. |
Do you wish to install the web admin interface? | Sélectionnez On si vous voulez une interface web (recommandé), et appuyez sur ENTRÉE pour continuer. |
Do you wish to install the web server (lighttpd)? | Nous allons utiliser Apache comme serveur web, au lieu de lighttpd. Sélectionnez Off et confirmez avec ESPACE , puis appuyez sur ENTRÉE pour continuer. |
Do you want to log queries? | Sélectionnez On (recommandé) et appuyez sur ENTRÉE pour continuer. |
Select a privacy mode for FTL | Sélectionnez le niveau de confidentialité de votre choix, et appuyez sur ENTRÉE pour continuer : • Show everything : enregistre tout ; fournit le maximum de statistiques. • Hide domains : affiche et stocke tous les domaines comme « cachés » (en anglais, « hidden ») ; désactive les panneaux « Top Domains » et « Top Ads » sur le tableau de bord. • Hide domains and clients : affiche et enregistre tous les domaines comme « cachés » (en anglais, « hidden ») et tous les clients comme « 0.0.0.0 » ; désactive tous les panneaux du tableau de bord. • Anonymous mode : désactive pratiquement tout, à l'exception des statistiques anonymes ; aucun historique n'est enregistré dans la base de données, rien n'apparaît dans le journal des requêtes, il n'y a pas de liste des principaux éléments; offre une meilleure confidentialité. |
Installation Complete! | Une fois l'installation terminée, vous devriez voir ceci : |
Interface web¶
Nous allons configurer un hôte virtuel Apache comme proxy inverse pour accéder à l'interface web de Pi-hole. Cela semble complexe, mais en substance le rôle d'un proxy inverse est de protéger votre serveur en l'isolant d'avantage de la toile. Vous pouvez lire plus à ce sujet à la fin de cette section.
Définissez les bonnes autorisations :
sudo chown www-data:www-data -R /var/www/html/admin/
sudo usermod -aG pihole www-data
sudo chown -R pihole:pihole /etc/pihole
Créez un fichier de configuration Apache :
sudo vi /etc/apache2/sites-available/mypihole.gofoss.duckdns.org.conf
Ajoutez le contenu suivant et assurez-vous de régler les paramètres selon votre propre configuration, comme les noms de domaines (mypihole.gofoss.duckdns.org
), chemins vers les clés SSL, adresses IP et ainsi de suite :
<VirtualHost *:80>
ServerName mypihole.gofoss.duckdns.org
ServerAlias www.mypihole.gofoss.duckdns.org
Redirect permanent / https://mypihole.gofoss.duckdns.org/
</VirtualHost>
<VirtualHost *:443>
ServerName mypihole.gofoss.duckdns.org
ServerAlias www.mypihole.gofoss.duckdns.org
ServerSignature Off
SSLEngine On
SSLProxyEngine On
SSLProxyCheckPeerCN Off
SSLCertificateFile /etc/dehydrated/certs/gofoss.duckdns.org/fullchain.pem
SSLCertificateKeyFile /etc/dehydrated/certs/gofoss.duckdns.org/privkey.pem
DocumentRoot /var/www/html/admin
<Location />
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.1.0/24
Allow from 10.8.0.1/24
</Location>
<Directory /var/www/html/admin/>
Options +FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mypihole.gofoss.duckdns.org-error.log
CustomLog ${APACHE_LOG_DIR}/mypihole.gofoss.duckdns.org-access.log combined
</VirtualHost>
Une fois le contenu ajouté, sauvegardez et fermez le fichier (:wq!
). Notez comment nous avons activé le chiffrement SSL avec l'instruction SSLEngine On
, et utilisé le certificat SSL /etc/dehydrated/certs/gofoss.duckdns.org/fullchain.pem
ainsi que la clé privée SSL /etc/dehydrated/certs/gofoss.duckdns.org/privkey.pem
, que nous avions créés précédemment.
Maintenant, activez l'hôte virtuel d'Apache et redémarrez Apache :
sudo a2ensite mypihole.gofoss.duckdns.org.conf
sudo systemctl reload apache2
Redémarrez Pi-hole et vérifiez que tout fonctionne correctement. Le terminal devait afficher "Active" :
sudo systemctl restart pihole-FTL
sudo systemctl status pihole-FTL
Configuration de Pi-hole¶
Modifiez le mot de passe par défaut de l'interface web de Pi-hole. Choisissez un mot de passe fort et unique :
sudo pihole -a -p
Allez sur http://192.168.1.100/admin/
et connectez-vous avec les nouveaux identifiants. Assurez-vous d'ajuster l'adresse IP du serveur à votre propre configuration. L'interface web devrait s'afficher à l'écran. Elle propose différents réglages, décrits en détail sur le site de Pi-hole :
Réglage | Description |
---|---|
Gravity | Allez dans Tools ‣ Update Gravity pour récupérer les dernières listes de blocage. Soyez patient, cela peut prendre quelques secondes. |
Dashboard | Le tableau de bord affiche des statistiques : combien de domaines ont été visités ou bloqués, combien de domaines sont sur la liste de blocage, etc. |
Queries | Informations détaillées sur les requêtes. |
Blocklists | Allez sur Group management ‣ Adlists pour ajouter d'autres de listes de blocage et filtrer davantage de publicités et de logiciels malveillants. Vous trouverez plus d'informations sur les listes de blocage à la fin de cette section. |
Settings | Gérez et configurez Pi-hole : serveurs DNS, confidentialité, etc. |
Local DNS | Pi-hole est capable d'interpréter des adresses locales. Allez dans Local DNS ‣ DNS Records et ajoutez la combinaison domaine/IP suivante (ajustez en fonction de votre propre configuration) : Domain : mypihole.gofoss.duckdns.org IP Address : 192.168.1.100 |
Montrez-moi une vidéo récapitulative (3min)
Solution de contournement temporaire pour Ubuntu 22.04
Au moment d'écrire ces lignes, Pi-hole 5.10 n'est pas officiellement compatible avec Ubuntu 22.04. Pour cette raison, le script d'installation habituel de Pi-hole ne fonctionne pas correctement. En guise de solution de contournement temporaire, exécutez plutôt les commandes suivantes :
sudo bash
curl -sSL https://install.pi-hole.net | PIHOLE_SKIP_OS_CHECK=true bash
N'oubliez pas de quitter le shell bash une fois l'installation terminée. Une fois que Pi-hole est installé, il suffit de taper :
exit
Dites-m'en plus sur le DNS et la confidentialité
Sur la toile, chaque ordinateur possède sa propre adresse IP. Comme ces adresses ne sont pas faciles à retenir, on a inventé le système de noms de domaine (en anglais, « Domain Name System » ou DNS). Ça fonctionne un peu comme les anciennes centrales téléphoniques : chaque fois que vous saisissez l'adresse d'un site, un résolveur DNS recherche l'IP correspondante et connecte votre appareil au serveur approprié. Le DNS joue donc un rôle essentiel lors de la navigation sur la toile. Mais comme tout se passe automatiquement, les utilisateurs oublient souvent que les requêtes DNS représentent un risque pour leur vie privée :
Risques | Description |
---|---|
Enregistrement | Les résolveurs DNS enregistrent tous les sites que vous visitez. Selon le résolveur DNS que vous utilisez — ou plutôt, qui vous a été imposé — Google, Cloudflare, votre fournisseur d'accès à Internet, votre opérateur télécoms ou tout autre tiers voit et stocke une liste de tous les sites que vous visitez. Que le trafic soit chiffré ou non via HTTPS n'a aucune importance. |
Pas de chiffrement | Les requêtes DNS ne sont généralement pas chiffrées. Même si vous faites entièrement confiance à votre résolveur DNS, d'autres personnes pourraient les intercepter pour essayer de vous manipuler (attaque par usurpation d'identité). |
Censure | Les fournisseurs d'accès à Internet peuvent également censurer vos activités en ligne en suivant les requêtes DNS. |
Pi-hole vous permet de choisir le résolveur DNS auquel vous voulez faire confiance lorsque vous naviguez sur la toile. Voici quelques fournisseurs DNS soucieux du respect de la vie privée :
Fournisseurs DNS | Pays | DNS #1 | DNS #2 | Politique de confidentialité |
---|---|---|---|---|
Digitalcourage | Allemagne | 5.9.164.112 | -- | Politique de confidentialité |
UncensoredDNS | Danemark | 89.233.43.71 | 91.239.100.100 | Politique de confidentialité |
Dismail | Allemagne | 80.241.218.68 | 159.69.114.157 | Politique de confidentialité |
DNS Watch | Allemagne | 84.200.69.80 | 84.200.70.40 | -- |
FDN | France | 80.67.169.12 | 80.67.169.40 | -- |
OpenNIC | Divers | Divers | Divers | Divers |
Dites-m'en plus sur le blocage des publicités
Pi-hole filtre le trafic web dans votre réseau et bloque l'affichage de publicités ainsi que les traqueurs. Tout cela sans que vous ayez à installer des logiciels spécifiques sur vos appareils. Rendez-vous sur l'interface web de Pi-hole pour ajouter les listes de blocage et filtrer davantage de publicités et logiciels malveillants. Notez cependant que Pi-Hole ne bloque pas les publicités des vidéos YouTube (pour cela, vous aurez besoin de uBlock Origin).
Listes de blocage | Description |
---|---|
Par défaut | • https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts • https://mirror1.malwaredomains.com/files/justdomains • http://sysctl.org/cameleon/hosts • https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist • https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt • https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt |
Publicités | • https://adaway.org/hosts.txt • https://v.firebog.net/hosts/AdguardDNS.txt • https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt • https://v.firebog.net/hosts/Easylist.txt • https://raw.githubusercontent.com/StevenBlack/hosts/master/data/SpotifyAds/hosts • https://raw.githubusercontent.com/StevenBlack/hosts/master/data/UncheckyAds/hosts |
Traçage et télémétrie | • https://v.firebog.net/hosts/Airelle-trc.txt • https://v.firebog.net/hosts/Easyprivacy.txt • https://v.firebog.net/hosts/Prigent-Ads.txt • https://raw.githubusercontent.com/StevenBlack/hosts/master/data/tyzbit/hosts |
Sites malveillants | • https://v.firebog.net/hosts/Airelle-hrsk.txt • https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt • https://mirror1.malwaredomains.com/files/justdomains • https://mirror.cedia.org.ec/malwaredomains/immortal_domains.txt • https://www.malwaredomainlist.com/hostslist/hosts.txt • https://bitbucket.org/ethanr/dns-blacklists/raw/8575c9f96e5b4a1308f2f12394abd86d0927a4a0/bad_lists/Mandiant_APT1_Report_Appendix_D.txt • https://v.firebog.net/hosts/Prigent-Malware.txt • https://v.firebog.net/hosts/Prigent-Phishing.txt • https://v.firebog.net/hosts/Shalla-mal.txt • https://raw.githubusercontent.com/StevenBlack/hosts/master/data/add.Risk/hosts |
Dites-m'en plus sur les proxies inverse
Un proxy inverse est une application placé entre un service qui tourne sur votre serveur et Internet. Tous les services présentés sur notre site, y compris Pi-hole, sont configurés comme des hôtes virtuels Apache derrière un proxy inverse. Cela permet :
- d'empêcher que votre serveur soit directement exposé à l'Internet
- d'exécuter plusieurs services côte à côte sur votre serveur
- de minimiser le nombre de ports ouverts (on se limite aux ports 80 et 443)
- d'accéder à vos services par des adresses personnalisées, plutôt que par des adresses IP et des numéros de port
- de gérer plus facilement vos certificats SSL
- de configurer des mesures de sécurité additionnelles, telles que les en-têtes HTTP, l'authentification des utilisateurs, les restrictions d'accès, etc.
Dans Ubuntu, les fichiers de configuration de l'hôte virtuel Apache sont situés dans le répertoire etc/apache2/sites-available
. Leur structure ressemble généralement à ceci :
<VirtualHost *:80>
ServerName example.com # l'adresse du service
ServerAlias www.example.com # l'adresse du service, y compris le sous-domaine www
Redirect permanent / https://example.com/ # redirection de tout trafic non chiffré de http:// vers le trafic chiffré de https://
</VirtualHost>
<VirtualHost *:443>
ServerName example.com # l'adresse du service
ServerAlias www.example.com # l'adresse du service, y compris le sous-domaine www
ServerSignature Off # cache les informations du serveur
SSLEngine On # utilise le protocole SSL/TLS
SSLProxyEngine On # utilise le protocole SSL/TLS pour le proxy
SSLCertificateFile /path/to/fullchain.pem # emplacement du certificat SSL au format PEM
SSLCertificateKeyFile /path/to/privkey.pem # emplacement de la clé SSL privée codée via PEM
DocumentRoot /var/www/example # répertoire à partir duquel Apache servira les fichiers
<Location /> # limite l'accès au serveur, au réseau domestique (LAN) et au VPN
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.1.0/24
Allow from 10.8.0.1/24
</Location>
<Directory /var/www/example>
Options -Indexes +FollowSymLinks # empêche les index de répertoire et suit les liens symboliques
AllowOverride All # les directives du fichier .htaccess peuvent remplacer les directives de configuration
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log # les fichiers journaux
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined # les fichiers journaux
</VirtualHost>
L'hôte virtuel est activé avec la commande sudo a2ensite example.com
. La commande sudo apachectl configtest
vous permet de vérifier au préalable si le fichier de configuration contient des erreurs de syntaxe.
Dites-m'en plus sur les commandes de terminal pour Pi-hole
La plupart des réglages de Pi-hole peuvent être effectuées via l'interface web. Vous pouvez également configurer Pi-hole directement sur le serveur, via le terminal. Vous trouverez la liste complète des commandes sur le site de Pi-hole :
Commandes de terminal | Description |
---|---|
pihole status | Affichez le statut de Pi-hole. |
pihole -t tail log | Affichez le journal en temps réel. |
pihole -c | Affichez des statistiques. |
pihole -w -l | Affichez la liste des domaines mis sur liste blanche. |
pihole -w example.com | Ajoutez example.com à la liste blanche. |
pihole -w -d example.com | Retirez example.com de la liste blanche. |
pihole -b -l | Affichez la liste des domaines mis sur liste noire. |
pihole -b example.com | Ajoutez example.com à la liste noire. |
pihole -b -d example.com | Retirez example.com de la liste noire. |
pihole -up | Mettez à jour Pi-hole. |
pihole -l off | Désactivez l'enregistrement des requêtes. |
pihole -l on | Activez l'enregistrement des requêtes. |
pihole enable | Activez Pi-hole. |
pihole disable | Désactivez Pi-hole. |
pihole disable 10m | Désactivez Pi-hole pour 10 minutes. |
pihole disable 60s | Désactivez Pi-hole pour 60 secondes. |
pihole uninstall | Désinstallez Pi-hole. |
Accès distant sécurisé avec OpenVPN¶
À ce stade, le serveur n'est accessible que depuis votre réseau domestique, puisque le pare-feu l'isole d'Internet. Pour permettre un accès à distance, vous pourriez « percer » des trous dans le pare-feu et rediriger les ports de chaque service du routeur au serveur. Cependant, cela exposerait plusieurs ports à la toile et faciliterait potentiellement des attaques sur votre réseau.
Un réseau privé virtuel (en anglais, « Virtual Private Network ou VPN ») permet de vous connecter à votre serveur depuis partout dans le monde, sans encourir ce genre de risque. En utilisant un VPN, seul un port est rendu public. En outre, seules les connexions préalablement autorisées sont possibles, et nécessitent à la fois un certificat et un mot de passe. Vous trouverez ci-dessous des instructions plus détaillées.
Montrez-moi le guide étape par étape
Installer OpenVPN¶
OpenVPN est un logiciel libre qui utilise OpenSSL, TLS et de nombreuses mesures de sécurité. OpenVPN peut être installé avec le script suivant :
wget https://git.io/vpn -O openvpn-install.sh
sudo bash openvpn-install.sh
Suivez les instructions à l'écran :
Instructions | Description |
---|---|
What is the public IPv4 address or hostname? | Saisissez votre adresse IPv4 publique, que vous trouverez par exemple sur whatsmyip.org. Dans le cadre de ce tutoriel, supposons que votre adresse IP publique soit 88.888.88.88 (ajustez en conséquence). |
Which protocol do you want for OpenVPN connections? | Choisissez le protocole UDP recommandé. |
What port do you want OpenVPN listening to? | Choisissez un port, dans le cadre de ce tutoriel nous utiliserons le port standard 1194 . |
Which DNS do you want to use with the VPN? | Comme nous utilisons Pi-hole comme serveur DNS, sélectionnez l'option Current system resolvers . |
Finally, tell me your name for the client certificate. | Saisissez un nom pour votre premier certificat client VPN. Pour ce tutoriel, nous allons créer un certificat nommé ordinateur_vpn , ajustez en conséquence. |
Une fois l'installation terminée, le terminal devrait afficher quelque chose comme :
Welcome to this OpenVPN road warrior installer!
I need to ask you a few questions before starting setup.
You can use the default options and just press enter if you are ok with them.
This server is behind NAT. What is the public IPv4 address or hostname?
Public IPv4 address / hostname [88.888.88.88]: 88.888.88.88
What IPv6 address should the OpenVPN server use?
1) 1a00:a0a:10a:10a0:a00:00ff:faf0:a011
2) 1a00:a0a:10a:10a0:a00:00bb:faf0:a022
IPv6 address [1]: 1
Which protocol do you want for OpenVPN connections?
1) UDP (recommended)
2) TCP
Protocol [1]: 1
What port do you want OpenVPN listening to?
Port [1194]: 1194
Which DNS do you want to use with the VPN?
1) Current system resolvers
2) 1.1.1.1
3) Google
4) OpenDNS
5) NTT
6) AdGuard
DNS [1]: 1
Finally, tell me a name for the client certificate.
Client name [client]: ordinateur_vpn
We are ready to set up your OpenVPN server now.
[etc.]
Finished!
The client configuration is available in: /root/ordinateur_vpn.ovpn
New clients can be added by running this script again.
Certificats¶
Un premier certificat client VPN, ordinateur_vpn.ovpn
, a été généré lors de l'installation d'OpenVPN. Vous devez créer un certificat pour chaque appareil qui souhaite se connecter au serveur: ordinateurs de bureau, ordinateurs portables, tablettes, téléphones, etc. Créez en autant que nécessaire en relançant plusieurs fois le script d'installation.
Dans le cadre de ce tutoriel, nous allons créer un second certificat appelé telephone_vpn.ovpn
. Bien sûr, vous pouvez choisir n'importe quel nom pour ces certificats. Assurez-vous simplement d'adapter les commandes en conséquence :
sudo bash openvpn-install.sh
Le terminal devrait afficher quelque chose comme :
Looks like OpenVPN is already installed.
What do you want to do?
1) Add a new user
2) Revoke an existing user
3) Remove OpenVPN
4) Exit
Select an option: 1
Tell me a name for the client certificate.
Client name: telephone_vpn
[...]
Write out database with 1 new entries
Data Base Updated
Client telephone_vpn added, configuration is available at: /root/telephone_vpn.ovpn
Enfin, déplacez le(s) certificat(s) dans le dossier personnel gofossadmin
et définissez les autorisations correctes :
cd
sudo mv /root/ordinateur_vpn.ovpn .
sudo mv /root/telephone_vpn.ovpn .
sudo chmod 755 *.ovpn
sudo chown gofossadmin:gofossadmin *.ovpn
Configurer OpenVPN¶
Ouvrez le port 1194 (UDP), ou le port que vous avez spécifié lors de l'installation d'OpenVPN :
sudo ufw allow 1194/udp
Vérifiez si le port a bien été ajouté aux règles du pare-feu :
sudo ufw status numbered
Vérifiez si l'interface virtuelle tun0
fonctionne, et obtenez le nom du sous-réseau par défaut :
ip ad | grep tun0
Obtenez l'adresse IP du serveur OpenVPN :
ip route | grep tun0
Assurez-vous que le trafic est acheminé via le tunnel VPN :
sudo apt install traceroute
traceroute 10.8.0.1
Puis, indiquez aux clients qui se connectent via VPN d'utiliser Pi-hole comme serveur DNS primaire. Pour cela, éditez le fichier de configuration OpenVPN :
sudo vi /etc/openvpn/server/server.conf
Commentez tous les paramètres dhcp-option
existants (mettez un hashtag #
au début de la ligne respective) et remplacez-les par l'interface tun0
:
#push "dhcp-option DNS XX.XX.XXX.XXX"
#push "dhcp-option DNS XX.XX.XXX.XXX"
push "dhcp-option DNS 10.8.0.1"
Redémarrez le serveur OpenVPN :
sudo systemctl restart openvpn-server@server
Allez sur l'interface web de Pi-hole, dans notre exemple http://192.168.1.100/admin
(ajustez en conséquence). Puis, allez dans Settings ‣ DNS ‣ Interface settings
et sélectionnez l'option Permit all origins
. Cliquez ensuite sur Save
.
Réglages de votre routeur
Vérifiez les réglages de votre routeur et assurez-vous que:
- le port utilisé par OpenVPN est correctement transféré (dans notre exemple
1194
, ajustez en conséquence). Consultez le manuel de votre routeur pour plus d'informations - le port
53
est bien fermé. rechercher les ports ouverts à l'aide des outils de Gibson Research Corporation : sélectionnezProceed ‣ All service ports
et vérifiez que le port53
n'apparaît pas commeopen
Clients¶
Seuls des appareils dotés de certificats valides peuvent établir une connexion VPN pour accéder en toute sécurité à vos services auto-hébergés. Voici comment transférer les certificats précédemment générés du serveur vers ces appareils.
Nous supposons que l'appareil client fonctionne sous Ubuntu/Linux et peut établir un accès SSH à distance avec le serveur. Ouvrez un terminal, connectez-vous en tant qu'utilisateur administrateur (à adapter en conséquence) et récupérez tous les certificats du serveur :
su - gofossadmin
scp -v -P 2222 gofossadmin@192.168.1.100:/home/gofossadmin/*.ovpn .
Enfin, configurez la connexion réseau de l'appareil :
Étapes | Instruction |
---|---|
1 | Cliquez sur l'icône Wifi dans la barre supérieure. |
2 | Cliquez sur Paramètres . |
3 | Allez dans Réseau . |
4 | Cliquez sur + dans la rubrique VPN . |
5 | Sélectionnez Importer depuis un fichier . |
6 | Naviguez jusqu'au certificat (dans cet exemple ordinateur _vpn.ovpn ) et cliquez sur Ouvrir . |
7 | Cliquez sur l'icône Wifi dans la barre supérieure. |
8 | Activez la connexion VPN ordinateur_vpn . |
Et voilà ! Votre appareil peut établir une connexion VPN sécurisée à votre serveur, depuis partout dans le monde.
Ouvrez F-Droid sur votre téléphone et installez OpenVPN pour Android.
Connectez le le téléphone via USB à l'appareil avec lequel vous venez de récupérer les certificats VPN du serveur (voir ci-dessus). Copiez le certificat vers votre téléphone (dans cet exemple, le certificat s'appelle telephone_vpn.ovpn
, adaptez en conséquence).
Enfin, ouvrez l'appli OpenVPN sur votre téléphone et configurez-la :
Étape | Instruction |
---|---|
1 | Appuyez sur + , puis Importer . |
2 | Cherchez le certificat (dans cet exemple telephone_vpn.ovpn ) et importez-le. |
Et voilà ! Votre appareil peut établir une connexion VPN sécurisée à votre serveur, depuis partout dans le monde.
Dernières vérifications¶
Une fois tout configuré, le trafic devrait être géré comme suit :
- Chaque fois qu'un de vos appareils consulte une adresse, il se connecte d'abord en toute sécurité à votre serveur via le VPN
- Si l'adresse contient des publicités ou des traqueurs, Pi-hole bloque ces éléments
- Si l'adresse pointe vers un service auto-hébergé, Pi-hole redirige la requête vers le service sur votre serveur
- Si l'adresse pointe vers un site ou un service externe, Pi-hole redirige la demande vers un serveur DNS de votre choix (par exemple Digitalcourage, UncensoredDNS, etc.).
- Tout le trafic est chiffré via HTTPS
Assurez-vous que tout fonctionne correctement :
- Allez sur ads-blocker.com ou voici.fr et vérifiez si les publicités sont bloquées. Vous pouvez également vous rendre sur
https://mypihole.gofoss.duckdns.org
(ajustez en conséquence) et vérifier le tableau de bord pour voir les requêtes bloquées - Naviguez vers un service auto-hébergé, tel que
https://mypihole.gofoss.duckdns.org
(ajustez en conséquence), et vérifiez que vous êtes redirigé correctement - Allez sur dnsleaktest.com ou bash.ws et vérifiez que vous utilisez le bon résolveur DNS
Assistance¶
Pour davantage de précisions, consultez la documentation de Pi-hole, Let's Encrypt, OpenVPN ou demandez de l'aide à la communauté Pi-hole, la communauté Let's Encrypt ou la communauté OpenVPN.