Cloudflare Zero Trust
- Comprendre le principe des Tunnels Cloudflare
- Paramétrer son compte cloudflare
- Paramétrer SWAG
- Gérer plusieurs tunnels
Introduction
L'architecture Zero Trust est la pratique consistant à concevoir des systèmes fondés sur le principe de « ne jamais faire confiance, toujours vérifier », par opposition au principe traditionnel de « confiance, mais vérifier ». Ce concept est devenu très populaires récemment, à la suite des attaques toujours plus nombreuses concernant les données des utilisateurs. C'est un concept très large, nous nous concentrerons sur l’application du Zero Trust aux services Web que nous hébergeons.
Les tunnels Cloudflare offrent un moyen simple d'arriver au Zero Trust, en s'appuyant sur SWAG et Authentik.
Pour le dire simplement, les Tunnels Cloudflare permettent notamment de :
- Masquer l'IP de votre serveur (et donc de votre box s'il est hébergé chez vous).
- D'authentifier le traffic.
- De bénéficier des protection de Cloudflare (attaques DDOS, etc, blacklist, requêtes malveillantes, etc...).
- De bénéficier du CDN, c'est à dire du serveur de cache de Cloudlfare, qui permet d'augmenter les performances de vos sites web.
- De ne plus avoir besoin de l'ouverture de ports de votre routeur pour les services exposés par SWAG.
Ici, nous expliquerons comment associer SWAG aux tunnels Cloudflare.
- Attention :
- N'utilisez pas les tunnels Cloudflare pour exposer un serveur mail
- N'utilisez pas les tunnels Cloudflare pour exposer un service vidéo, comme Plex (si vous avez suivi ce guide, Plex n'est pas exposé, c'est donc valide)
- N'utilisez pas les tunnels Cloudflare pour utiliser le protocole bittorrent (si vous avez suivi ce guide, tout est bon)
Configuration Cloudflare
Zone DNS
Avant toute chose, vous devez définir Cloudflare comme gestionnaire de votre zone DNS. Si vous avez réservé votre nom de domaine chez Cloudflare, c'est déjà le cas. Sinon, renseignez vous auprès de votre registrar sur comment ajouter des DNS externes. Cloudflare dispose d'une documentation expliquant pas à pas comment paramétrer une Zone DNS, que vous ayez un domaine externe ou reservé chez Cloudflare.
Si vous avez qu'un seul serveur à protéger derrière Cloudflare, vous pouvez supprimer l'ensemble des enregistrement DNS existant, par défaut le domaine et tout ses sous-domaines seront directement redirigés vers le tunnel.
Si vous avez des sous-domaines à rediriger vers d'autres serveurs, vous pourrez toujours les déclarer dans la zone DNS à l'aide d'un enregistrement A.
Si vous avez plusieurs serveurs et donc plusieurs tunnels pour un meme domaine principal, voyez ici.
Clé API
Pour commencer, nous devons créer un nouveau jeton API pour Cloudflare et récupérer nos identifiants de zone et de compte.
Sur le tableau de bord de Cloudflare, dans la page de présentation de votre domaine, vous pouvez voir les identifiants de zone
et de compte
en bas à droite de l'écran. Copiez précieusement ces deux identifiants.
Juste en dessous d'eux, il y a un lien intitulé Obtenez votre jeton API. Cliquez dessus. Le périmètre dont nous avons besoin pour le jeton doit inclure Zone:DNS:Edit
et Account:Cloudflare Tunnel:Edit
. Assurez-vous que votre page de création de token ressemble à celle illustrée dans la capture d'écran ci-dessous.
Une fois que nous aurons enregistré, notre jeton sera affiché une fois. copiez le précieusement, car vous ne pourrez plus le revoir après la fermeture.
Cloudflare Zero Trust
Vous devez vous inscrire à Cloudflare Teams pour pouvoir accéder au tableau de bord Zero Trust qui gère les tunnels et les politiques d'accès. Il s'agit d'un service premium, mais ils proposent un forfait gratuit pour un maximum de 50 utilisateurs, ce qui devrait suffire pour votre Home Lab. Gardez à l’esprit que puisqu’il s’agit d’une fonctionnalité premium, ils demandent une carte de crédit valide lors de l’inscription, mais avec le forfait gratuit, il n'y aura aucun frais.
Inscrivez-vous via ce lien.
Configuration de Swag
- Nous partons du principe que vous avez le domaine
mondomaine.fr
avec les DNS qui pointent bien vers ceux de Cloudflare, comme vu précédemment.
SWAG dispose de deux Docker Mods
permettant d'y intégrer :
- Cloudflared, le conteneur qui permet de créer et de gérer les tunnels
- Cloudflared Real IP, un conteneur qui permet à SWAG d'obtenir la vraie source IP des requêtes depuis internet plutot que celle de Docker (ce qui pourrait entrer en conflit avec le mod de géolocalisatioN DBIP).
Ces deux mods, fusionnés dans le conteneur de SWAG, nécessitent un peu de configuration.
Configuration du tunnel
Pour configurer les tunnels, nous aurons besoin de créer un fichier tunnelconfig.yml
auquel nous ferons appel dans le compose.yaml
de SWAG.
sudo vi /docker/swag/config/tunnelconfig.yml
Entrez en modification avec la touche i
et collez la configuration ci-dessous
ingress:
- hostname: mondomaine.fr
service: https://mondomaine.fr
- hostname: "*.mondomaine.fr"
service: https://mondomaine..fr
- service: http_status:404
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entrée
.
Configuration de Cloudflare Real IP
A présent, nous allons configurer le bon fonctionnement du mode Cloudflare Real IP
Ouvrez le fichier nginx.conf
sudo vi /docker/swag/config/nginx/nginx.conf
Entrez en modification avec la touche i
et collez la configuration ci-dessous à la fin de la section http
real_ip_header X-Forwarded-For;
real_ip_recursive on;
include /config/nginx/cf_real-ip.conf;
set_real_ip_from 127.0.0.1;
Appuyez sur Echap
puis sauvegardez et quittez en tapant :x
puis en appuyant sur Entrée
.
Docker compose
Ouvrez Dockge, éditez la stack SWAG avec cette configuration
version: "3.8"
services:
swag:
image: lscr.io/linuxserver/swag:latest
container_name: swag
cap_add:
- NET_ADMIN
env_file:
- .env
environment:
- DOCKER_MODS=linuxserver/mods:swag-dbip|linuxserver/mods:swag-dashboard|linuxserver/mods:swag-auto-reload|linuxserver/mods:universal-cloudflared|linuxserver/mods:swag-cloudflare-real-ip
- PUID=${PUID}
- PGID=${PGID}
- TZ=Europe/Paris
- URL=${DOMAIN}
- SUBDOMAINS=wildcard
- VALIDATION=dns
- DNSPLUGIN=${PLUGIN}
- EMAIL=${EMAIL}
- CF_ZONE_ID=${ZONE_ID}
- CF_ACCOUNT_ID=${ACCOUNT_ID}
- CF_API_TOKEN=${API_TOKEN}
- CF_TUNNEL_NAME=${TUNNEL_NAME}
- CF_TUNNEL_PASSWORD=${TUNNEL_PW}
- FILE__CF_TUNNEL_CONFIG=/config/tunnelconfig.yml
extra_hosts:
- ${DOMAIN}:127.0.0.1
ports:
- 81:81
volumes:
- /docker/swag/config:/config
- /docker/swag/config/fail2ban/fail2ban.sqlite3:/dashboard/fail2ban.sqlite3:ro
restart: unless-stopped
services:
swag:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
Et renseignez le .env
les infos que vous avez trouvées et notées tout au long de ce guide
PUID=
PGID=
DOMAIN=
PLUGIN=
EMAIL=
ZONE_ID=
ACCOUNT_ID=
API_TOKEN=
TUNNEL_NAME=
TUNNEL_PW=
Variable | Valeur | Exemples |
---|---|---|
PUID | A renseigner avec les infos de votre user (trouvables via la commande id nomdutilisateur ) | 1000 |
GUID | A renseigner avec les infos de votre user (trouvables via la commande id nomdutilisateur ) | 1000 |
DOMAIN | Le domaine que vous avez réservé | mondomaine.fr |
PLUGIN | Le fournisseur de zone DNS, ici Cloudflare. Pensez à renseigner cloudflare.ini (voir guide de swag) | cloudflare |
EMAIL | Votre email pour le certificat | [email protected] |
ZONE_ID | L'ID de Zone que vous avez noté précédemment | aNhcz1l3JfWbFZo2XMpzQlP2iOqk |
ACCOUNT_ID | L'ID de Compte que vous avez noté précédemment | buKsjNHLyzKMM1qYnzOy4s7SHfly |
API_TOKEN | Le jeton d'API que vous avez noté précédemment | 53ydYus9TFFk1DOXNdP87iIcJtQjoW |
TUNNEL_NAME | Le nom de votre tunnel | mon_tunnel |
TUNNEL_PW | Un mot de passe fort généré aléatoirement | iSzKRmP4VbnlsMvdSdgBEJiJi |
Une fois fait, déployez la stack. Cela prendra un peu de temps, vérifiez les logs, vous devriez arriver à serveur ready
Une fois le conteneur en ligne, vérifiez dans cloudflare que votre tunnel est bien présent dans la section Networks > Tunnels de Cloudflare Zero Trust. Par défaut, l'ensemble des sous domaine sont redirigés vers le tunnel, sans avoir besoin de les déclarer dans votre zone DNS.
sous.mondomaine.fr

Gérer plusieurs tunnels pour plusieurs serveurs
Par défaut, l'ensemble des sous domaine de votre nom de domaine pointent vers le tunnel que vous avez créé. Mais si vous avez un second serveur, vous pouvez avoir un second tunnel en changeant seulement le nom de tunnel dans la configuration de l'instance swag de votre serveur.
Vous devrez ensuite dans votre zone DNS rediriger les sous domaine souhaité vers le bon tunnel. Pour cela, faites comme suit.
Rendez-vous dans dans la section Networks > Tunnels de Cloudflare Zero Trust.
Notez les deux ID des tunnels
Rendez-vous à présent dans la section DNS de cloudflare, après avoir cliqué sur le nom de domaine concerné.
Cliquez sur ajouter un enregistrement
et ajoutez deux enregistrements comme suit en ajoutant bien .cfargotunnel.com
après vos id de tunnels.
Type | Nom | Cible |
---|---|---|
CNAME | sousdomaine1 | votreiddetunnel1.cfargotunnel.com |
CNAME | sousdomaine2 | votreiddetunnel2.cfargotunnel.com |
Si vous avez de nombreux sous-domaines, vous pouvez déclarer un seul sous domaine par tunnel comme ci-dessus, puis déclarer vos autres sous domaine en les faisant pointer vers ces sous domaines de référence.
Ainsi, en cas de changement d'id de tunnel, vous n'aurez qu'à le changer que pour un seul sous-domaine. Par exemple :
- Le serveur de
sousdomaine1
doit egalement etre la cible de sub1, et sub2 :Type Nom Cible CNAME
sub1
sousdomaine1
CNAME
sub2
sousdomaine1
- Le serveur de
sousdomaine2
doit egalement etre la cible de sub3, et sub4 :Type Nom Cible CNAME
sub3
sousdomaine2
CNAME
sub4
sousdomaine2