Ce projet fournit une configuration de base pour déployer Traefik v3 avec un support SSL via Let's Encrypt et l'intégration de l'API OVH pour la gestion des certificats DNS. Il inclut également l'utilisation de l'authentification basique via htpasswd
.
Voici la structure des fichiers et dossiers du projet :
.
├── .htpasswd/ # Contient les fichiers d'authentification pour sécuriser l'accès
├── config/ # Fichiers de configuration de Traefik
│ ├── traefik.yaml # Configuration statique de Traefik
│ └── dynamic.yaml # Configuration dynamique (middlewares, routers, etc.)
├── letsencrypt/ # Contient le fichier acme.json pour les certificats SSL
├── secrets/ # Stocke les secrets pour l'API OVH
│ └── ovh*.secret # Fichiers secrets contenant les clés pour l'API OVH
-
.htpasswd/
: Ce répertoire contient les fichiers d'authentification générés parhtpasswd
, qui sont utilisés pour sécuriser l'accès à certaines routes dans Traefik (par exemple, l'accès au tableau de bord ou à des services sensibles). -
config/
:traefik.yaml
: Fichier de configuration statique de Traefik où sont définies les options de base (API, points d'entrée, certificats SSL, etc.).dynamic.yaml
: Fichier de configuration dynamique pour les middlewares, routeurs, et autres règles spécifiques à appliquer lors de l'exécution de Traefik.
-
letsencrypt/
: Ce répertoire contient le fichieracme.json
utilisé par Let's Encrypt pour gérer les certificats SSL. Veillez à restreindre les permissions d'accès à ce fichier pour des raisons de sécurité (chmod 600 letsencrypt/acme.json
). -
secrets/
: Ce répertoire contient les fichiers de secrets liés à l'API OVH, nécessaires pour l'intégration avec Let's Encrypt pour le défi DNS. Ces fichiers doivent être sécurisés et ne doivent pas être exposés publiquement.
- Accès à l'API OVH : Vous devez créer une application OVH et obtenir les identifiants pour pouvoir gérer vos entrées DNS via l'API.
- Docker : Pour déployer votre infrastructure.
Exécuter le fichier setup.sh
bash setup.sh
Remplissez le fichier .env avec votre nom de domaine et l'email propriétaire de celui-ci.
#############################################################
# This file is a template for the .env file that should be #
# domain name for the acme challenge (ex : sample.com)
ACME_DOMAIN_NAME=
# email for the acme challenge (ex : test@sample.com)
ACME_EMAIL=
Les fichiers secrets dans le répertoire secrets/
contiennent vos identifiants API OVH :
ovh_application_key.secret
ovh_application_secret.secret
ovh_consumer_key.secret
ovh_endpoint.secret
Ces fichiers sont utilisés par Traefik pour interagir avec l'API OVH et valider le défi DNS pour Let's Encrypt. Assurez-vous que ces fichiers sont sécurisés et non accessibles publiquement.
Pour ajouter une protection par authentification de base sur certaines routes, vous devez générer un fichier htpasswd
contenant les utilisateurs et mots de passe chiffrés. Utilisez la commande suivante pour générer un utilisateur :
htpasswd -c .htpasswd/users <username>
Ce fichier sera ensuite référencé dans la configuration dynamique de traefik pour ajouter une couche de sécurité supplémentaire.
traefik.yaml
: Ce fichier contient la configuration statique de Traefik, y compris l'activation de l'API Traefik, les points d'entrée (ports HTTP et HTTPS), ainsi que la gestion des certificats SSL via Let's Encrypt.dynamic.yaml
: Ce fichier gère la configuration dynamique des middlewares et routeurs, comme les listes blanches IP, les redirections HTTPS, et les règles d'authentification.
Par défaut, les accès à mes différents sites privés sont sécurisés via une liste blanche d'adresse IP
Modifier le fichier config/dynamic.yaml
pour les connexions HTTP ou HTTPS : exemple dashboard de traefik. j'ai créé 2 listes blanches.
- webSecureByIp qui n'autorise que mon adresse ip fixe
- webSecureByIpLarge qui autorise plusieurs adresses ip.
webSecureByIp:
ipAllowList:
sourceRange:
- 127.0.0.1
# ajouter ici votre IP - 1.1.1.1
webSecureByIpLarge:
ipAllowList:
sourceRange:
- 127.0.0.1
- 192.168.0.1/24
# ajouter ici votre IP - 1.1.1.1
pour les connexions TCP : exemple mariadb, postgresql, mongo, ..
## TCP
# Accepts request from defined IP
tcp:
middlewares:
tcpSecureByIp:
ipAllowList:
sourceRange:
- 127.0.0.1
# ajouter ici votre IP - 1.1.1.1
# ajouter ici votre IP - 1.1.1.1
à utiliser si vous n'avez pas d'adresse IP fixe.
Par défaut, le dashboard traefik est sécurisé via une liste blanche d'IP. en commantant et décommentant les lignes dans le docker-compose.yaml, il est possible de passer en basic auth.
labels:
- 'traefik.enable=true'
- 'traefik.docker.network=traefik_proxy'
- 'traefik.http.routers.traefik.entrypoints=websecure'
# uncomment the following line to enable basic auth
# - "traefik.http.middlewares.traefik.basicauth.usersfile=.htpasswd/users"
# comment the following line to disable white list by IP
- 'traefik.http.routers.traefik.middlewares=webSecureByIp@file'
- 'traefik.http.routers.traefik.rule=Host(`traefik.${ACME_DOMAIN_NAME}`)'
- 'traefik.http.routers.traefik.service=api@internal'
- 'traefik.http.routers.traefik.tls.certresolver=lets-encrypt'
- 'traefik.http.routers.traefik.tls.options=mintls12@file'
Une fois tous les fichiers configurés, vous pouvez démarrer Traefik. Si vous utilisez Docker, assurez-vous que les volumes montés correspondent à la structure de votre projet et que les certificats et secrets sont bien pris en charge.
Exemple de commande Docker pour lancer Traefik :
docker compose up -d
Si vous souhaitez contribuer à ce projet, n'hésitez pas à proposer des modifications via des pull requests ou à ouvrir des issues pour signaler des bugs ou proposer des améliorations.