Aller au contenu

Accédez à votre serveur à distance et en sécurité

Installer Pi-hole Installer Pi-hole

Vous avez configuré votre serveur Ubuntu et mis en place des mesures de sécurité de base et avancées. Apprenez maintenant comment faire pointer un (sous-)domaine vers votre adresse IP personnelle avec DuckDNS, comment chiffrer le trafic avec Let’s Encrypt, comment utiliser Pi-hole pour bloquer les publicités, comment gérer l’accès à distance au serveur avec OpenVPN, et comment chosir des fournisseurs DNS respectant la vie privée.

Configurez un domaine

Les adresses lisibles sont plus faciles à retenir que des adresses IP aléatoires. Les utilisateurs préfèrent taper gofoss.net dans le navigateur, plutôt que 18.192.76.182. Pour que cela fonctionne aussi avec votre serveur, vous devez qu’un nom de domaine pointe vers votre adresse IP personnelle.

Guide étape par étape

DuckDNS permet d’enregistrer gratuitement un (sous-)domaine gratuit. Vous obtiendrez alors un jeton unique.

Dans le cadre de ce tutoriel, nous avons enregistré gofoss.duckdns.org et reçu le jeton ebaa3bd3-177c-4230-8d91-a7a946b5a51e. Cela nous permettra plus tard d’accéder aux services du serverur via des adresses comme https://monservice.gofoss.duckdns.org.

Ensuite, vous devez faire pointer dynamiquement le domaine vers votre adresse IP personnelle. DuckDNS garantit ainsi la connectivité, même si votre adresse IP change. Pour cela, connectez-vous à votre serveur et créez le script suivant :

mkdir duckdns
cd duckdns
vi duck.sh

Ajoutez le texte suivant. Veillez à bien adapter votre domaine et votre jeton !

echo url="https://www.duckdns.org/update?domains=gofoss&token=ebaa3bd3-177c-4230-8d91-a7a946b5a51e&ip=" | curl -k -o ~/duckdns/duck.log -K -

Enregistrez et fermez le fichier (:wq!), puis rendez-le exécutable :

chmod 700 duck.sh

Créez une tâche « cron » pour exécuter le script toutes les 5 minutes :

sudo apt install cron
crontab -e

Collez le texte suivant au bas du fichier « crontab » :

*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

Enregistrez et fermez le fichier (:wq!), puis testez le script :

./duck.sh

Assurez-vous que le script renvoie bien OK :

cat duck.log

Si la réponse est KO, vérifiez que votre jeton et votre domaine sont corrects dans le script duck.sh.


Certificats Let's Encrypt

Chiffrez le trafic

Tout trafic devait être chiffré via HTTPS. La barre d'adresse de votre navigateur devrait à tout moment afficher une connexion sécurisée. Pour cela, obtenez des certificats SSL gratuits auprès de Let's Encrypt, une autorité de certification de confiance.

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!
Qu'en est-il des certificats auto-signés ?

Les certificats auto-signés offrent un chiffrement HTTPS. Cela dit, ils ne sont pas toujours reconnus par certains navigateurs ou applications. Nous suggérons de privilégier une autorité de certification comme Let's Encrypt.


Pi-hole

Bloquez les pubs & traqueurs

Pi-hole est un outil très pratique. Il est capable de rediriger vers des adresses locales, vous permet de choisir un fournisseur DNS et bloque les publicités et traqueurs. Configurez Pi-hole sur votre serveur en suivant les instructions ci-dessous.

Guide étape par étape

Installation 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, 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.
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 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 :

Installation de Pi-hole

Interface web

Modifiez les ports du serveur web de Pi-hole pour éviter qu'il n'écoute sur les mêmes ports qu'Apache :

sudo pihole-FTL --config webserver.port '8080o,8443os,[::]:8080o,[::]:8443os'
sudo systemctl restart pihole-FTL

Ouvrez ces ports dans le pare-feu :

sudo ufw allow 8080,8443/tcp
sudo ufw allow out 8080,8443/tcp

Utilisez la clé SSL privée et le certificat SSL créés précédemment pour crypter le trafic :

sudo cat /etc/dehydrated/certs/gofoss.duckdns.org/privkey.pem /etc/dehydrated/certs/gofoss.duckdns.org/fullchain.pem > combined.pem
sudo mv combined.pem /etc/pihole
sudo pihole-FTL --config webserver.tls.cert '/etc/pihole/combined.pem'

Définissez ensuite les bonnes autorisations :

sudo usermod -aG pihole www-data
sudo chown -R pihole:pihole /etc/pihole
sudo chown pihole:pihole -R /var/www/html/admin/

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

Modifiez le mot de passe de l'interface web de Pi-hole. Choisissez un mot de passe fort et unique :

sudo pihole setpassword

Allez sur https://192.168.1.100:8443/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 – ignorez les avertissements concernant le certificat Letsencrypt. Les différents réglages sont décrits sur le site web 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 ‣ Lists 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 System ‣ Settings ‣ Local 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

Désormais, vous pouvez accéder à Pi-hole en toute sécurité en vous rendant sur https://mypihole.gofoss.duckdns.org:8443/admin/.

Dites-m'en plus sur le DNS et la confidentialité

DNS

Le système de noms de domaine (en anglais, « Domain Name System » ou DNS) traduit les adresses de sites Web en adresses IP compréhensibles par les ordinateurs. 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é.

Malgré leur importance, les requêtes DNS présentent des risques pour la confidentialité des données. Votre résolveur DNS — qu’il s’agisse de Google, Cloudflare ou de votre fournisseur d’accès à Internet — voit et enregistre votre historique de navigation. Les fournisseurs d’accès à Internet peuvent également exploiter les requêtes DNS pour censurer vos activités en ligne. Enfin, la plupart des requêtes DNS ne sont pas chiffrées, ce qui les rend vulnérables à l’espionnage et aux attaques par usurpation d’identité.

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 :

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é
DNS4EU Europe 86.54.11.1 86.54.11.201 Privacy Policy
Digitalcourage Allemagne 5.9.164.112 -- Politique de confidentialité
UncensoredDNS Danemark 89.233.43.71 91.239.100.100 Politique de confidentialité
Dismail Allemagne 116.203.32.217 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 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 sur des plateformes vidéos comme YouTube. Pour cela, utilisez des outils comme uBlock Origin.

Listes de blocage Description
Par défaut • https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
• http://sysctl.org/cameleon/hosts
• https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
Publicités • https://raw.githubusercontent.com/StevenBlack/hosts/master/data/UncheckyAds/hosts
Sites malveillants • https://raw.githubusercontent.com/StevenBlack/hosts/master/data/add.Risk/hosts

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. De nombreux paramètres peuvent être modifiés dans le fichier /etc/pihole/pihole.toml, ou en utilisant la ligne de commande. 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-FTL --config dns.upstreams 'XX.XX.XX.XX' Modifiez le DNS en amont en XX.XX.XX.XX
pihole-FTL --config dns.hosts 'XX.XX.XX.XX example.com' Définissez des addresses locales, pointant example.com vers l'IP XX.XX.XX.XX
pihole-FTL --config dns.listeningMode 'ALL' Autorisez Pi-hole à écouter sur toutes les interfaces. Nécessaire pour utiliser OpenVPN.
pihole-FTL --config webserver.port '8080o,8443os,[::]:8080o,[::]:8443os' Utilisez les ports 8080 et 8443. Nécessaire si vous utilisez Pi-hole et Apache sur la même machine.
pihole-FTL --config webserver.tls.cert '/etc/pihole/combined.pem' Emplacement du certificat SSL.
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.


Installer OpenVPN

Sécurisez l'accès distant

À ce stade, le serveur n'est accessible que depuis votre réseau domestique, puisque le pare-feu l’isole d'Internet. Permettre l'accès à distance implique généralement de « percer » des trous dans le pare-feu. Cependant, exposer plusieurs ports à la toile augmente la vulnérabilité du serveur.

Un réseau privé virtuel (en anglais, « Virtual Private Network ou VPN ») permet un accès à distance sécurisé tout en limitant l'exposition. Avec un VPN, un seul port est rendu accessible. Les connexions nécessitent une préautorisation via certificat et mot de passe.

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: /home/gofossadmin/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: /home/gofossadmin/telephone_vpn.ovpn

Enfin, déplacez le(s) certificat(s) dans le dossier personnel gofossadmin et définissez les autorisations correctes :

cd
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

Finalement, autorisez Pi-hole à écouter sur toutes les interfaces:

pihole-FTL --config dns.listeningMode 'ALL'

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électionnez Proceed ‣ All service ports et vérifiez que le port 53 n'apparaît pas comme open

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. 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

Testez votre serveur

Désormais, chaque fois que vous consultez une adresse via un appareil connecté au VPN, Pi-hole bloque les publicités et traqueurs. Si l'adresse pointe vers un service auto-hébergé, Pi-hole redirige les requêtes vers votre serveur. Les demandes vers des sites externes sont redirigées vers les serveurs DNS de votre choix. Tout le trafic est chiffré via HTTPS pour renforcer la sécurité. Suivez les étapes ci-dessous pour vérifier le bon fonctionnement de votre configuration.

Guide étape par étape
  • Visitez ads-blocker.com ou voici.fr pour vérifier le blocage des publicités.
  • Accédez à https://mypihole.gofoss.duckdns.org:8443/admin (ajustez en conséquence) pour confirmer la bonne résolution des services locaux.
  • Naviguez sur dnsleaktest.com ou bash.ws pour vérifier l’absence de fuites DNS.


Assistance

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, Let's Encrypt ou la OpenVPN.

https