Procrastination Killer : bloquer les sites distractifs avec Docker, Nginx et une PKI locale
- Loïs Dutour
Table of Contents
🛡️ Procrastination Killer
La procrastination sur Internet est un problème classique : on ouvre YouTube “juste deux minutes”… et une heure plus tard on est toujours devant l’écran.
Pour lutter contre ça, j’ai construit Procrastination Killer, une solution Infrastructure-as-Code qui redirige automatiquement les sites distractifs vers une page de rappel à l’ordre auto‑hébergée.
L’idée est simple : lorsque vous essayez d’ouvrir un site comme YouTube ou Instagram, votre machine est trompée volontairement et vous envoie vers un serveur local qui affiche une page de “Reality Check”.
Le tout fonctionne avec :
- Docker
- Nginx
- une PKI locale
- un peu de manipulation DNS
📁 Code source : github.com/cacti-lfs/procrastination-killer
Architecture
Le système intercepte les requêtes DNS au niveau du système d’exploitation et renvoie l’adresse d’un conteneur Docker local au lieu du vrai site.
Nginx sert ensuite une page HTML de blocage via HTTPS, grâce à une autorité de certification locale.
En pratique :
- Vous tapez
youtube.com - Le fichier
/etc/hostsredirige vers127.0.0.1 - Docker reçoit la requête
- Nginx sert une page locale de rappel à l’ordre
Stack technique
Le projet reste volontairement simple et reproductible.
- 🐳 Conteneurisation : Docker & Docker Compose
- 🌐 Serveur web : Nginx (image Alpine Linux)
- 🛡️ Sécurité : OpenSSL pour générer une Root CA et des certificats
- 🌍 Réseau : redirection DNS via
/etc/hosts - 💻 Frontend : HTML / CSS pour la page de blocage
Ce que ce projet démontre
- Compréhension du fonctionnement DNS et de la résolution de noms
- Génération et gestion d’une PKI locale (Root CA, certificats signés, chaîne de confiance)
- Déploiement d’un service HTTPS auto-signé sans erreur navigateur
- Utilisation de Docker Compose pour une infrastructure reproductible
- Approche Infrastructure-as-Code : tout est scriptable et versionné
Prérequis
Pour faire tourner le projet, il faut :
- Linux (Ubuntu/Debian recommandé) ou WSL2
gitdockerdocker compose
Installation :
sudo apt update
sudo apt install -y docker.io docker-compose-plugin gitInstallation rapide
1. Cloner le projet
git clone https://github.com/cacti-lfs/procrastination-killer.git
cd procrastination-killer2. Générer l’autorité de certification
Pour éviter les erreurs HTTPS dans le navigateur, on génère une PKI locale.
Le script setup.sh automatise toute la génération des certificats.
chmod +x setup.sh
./setup.sh3. Importer le certificat dans le navigateur
Dernière étape manuelle importante :
- Ouvrir Firefox ou Chrome
- Aller dans les paramètres de certificats
- Importer le fichier suivant dans les Autorités
./certs/rootCA.pem- Cocher “Faire confiance pour identifier des sites web”
4. Lancer le système
docker compose up -dActivation du piège
Il faut maintenant rediriger certains domaines vers votre machine locale.
On modifie simplement le fichier /etc/hosts.
echo -e "\n# PROCRASTINATION-KILLER\n127.0.0.1 youtube.com\n127.0.0.1 www.youtube.com\n127.0.0.1 instagram.com\n127.0.0.1 www.instagram.com\n127.0.0.1 tiktok.com" | sudo tee -a /etc/hostsÀ partir de ce moment-là, ces sites pointeront vers votre serveur local.
Personnalisation
Ajouter de nouveaux sites à bloquer
- Modifier
setup.shdans la section[alt_names] - Relancer le script
./setup.sh- Ajouter les domaines dans
/etc/hosts - Redémarrer les conteneurs
docker compose restartModifier la page de blocage
La page affichée est un simple fichier HTML :
./content/index.htmlGrâce au montage de volume Docker, les modifications sont immédiates. Il suffit de rafraîchir la page.
Difficultés rencontrées
- Faire accepter le certificat auto-signé par les navigateurs modernes sans déclencher d’avertissement de sécurité – résolu en générant une Root CA importée dans le store du navigateur plutôt qu’un certificat self-signed direct
- Certains sites (YouTube notamment) utilisent HSTS et des connexions persistantes – la redirection
/etc/hostsseule ne suffit pas toujours, il faut vider le cache DNS du navigateur
Désactivation
Pour désactiver temporairement le système :
Option 1 : modifier /etc/hosts
Commenter les lignes correspondantes :
#127.0.0.1 youtube.comOption 2 : arrêter le conteneur
docker compose stopConclusion
Ce projet est un petit exercice de self‑discipline technique :
- un peu de réseau
- un peu de sécurité
- un peu de Docker
Mais surtout une manière efficace de reprendre le contrôle de son temps en ligne.
Si l’idée vous plaît, n’hésitez pas à forker le projet et à l’adapter à votre propre environnement.
Licence
Projet distribué sous licence MIT.