Procrastination Killer : bloquer les sites distractifs avec Docker, Nginx et une PKI locale

Une solution IaC qui redirige les sites distractifs vers une page locale via Docker, Nginx et une PKI auto-signée.
7 March 2026 668 words Reading: 4 min Authors:
  • Loïs Dutour

🛡️ Procrastination Killer

Docker Nginx OpenSSL Linux

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.

graph LR User(Utilisateur) -->|Tape youtube.com| OS(Fichier Hosts) OS -->|Redirige vers 127.0.0.1| Docker(Conteneur Nginx) Docker -->|Sert index.html| Screen(Page de Blocage) Docker -.->|Bloque| Real(Vrai YouTube)

En pratique :

  1. Vous tapez youtube.com
  2. Le fichier /etc/hosts redirige vers 127.0.0.1
  3. Docker reçoit la requête
  4. 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
  • git
  • docker
  • docker compose

Installation :

sudo apt update
sudo apt install -y docker.io docker-compose-plugin git

Installation rapide

1. Cloner le projet

git clone https://github.com/cacti-lfs/procrastination-killer.git
cd procrastination-killer

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

3. Importer le certificat dans le navigateur

Dernière étape manuelle importante :

  1. Ouvrir Firefox ou Chrome
  2. Aller dans les paramètres de certificats
  3. Importer le fichier suivant dans les Autorités
./certs/rootCA.pem
  1. Cocher “Faire confiance pour identifier des sites web”

4. Lancer le système

docker compose up -d

Activation 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

  1. Modifier setup.sh dans la section [alt_names]
  2. Relancer le script
./setup.sh
  1. Ajouter les domaines dans /etc/hosts
  2. Redémarrer les conteneurs
docker compose restart

Modifier la page de blocage

La page affichée est un simple fichier HTML :

./content/index.html

Grâ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/hosts seule 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.com

Option 2 : arrêter le conteneur

docker compose stop

Conclusion

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.