Je vous ai parlé de Pangolin comme alternative libre à Cloudflare et depuis que j'ai mis en production la solution s'est bien étoffée avec une communauté qui grandit et propose tout un tas d'extensions ou de façon de gérer sa stack. Ici je vous présente la mienne.
On va partir sur une stack Docker qui va contenir toutes les briques nécessaires:
- Gerbil: qui va gérer les tunnels
- Pangolin: l'orchestrateur
- Traefik: le reverse proxy bien connu
Avant de créer la stack il y a quelques prérequis :
- un domaine vers lequel faire pointer l'interface
- les ports 80, 443 et 51820 ouverts, voire 21820 si vous voulez faire de l'accès à des ressources privées via VPN
- Une arborescence de fichiers précise qui est détaillée ici
Ensuite il n'y a plus qu'à lancer l'installeur:
curl -fsSL https://static.pangolin.net/get-installer.sh | bash
sudo ./installer
En répondant correctement à toutes les questions cela devrait vous donner une stack comme ceci:
name: pangolin
networks:
default:
driver: bridge
enable_ipv6: true
name: pangolin
services:
crowdsec:
command: -t
container_name: crowdsec
environment:
COLLECTIONS: crowdsecurity/traefik crowdsecurity/appsec-virtual-patching crowdsecurity/appsec-generic-rules
ENROLL_INSTANCE_NAME: pangolin-crowdsec
ENROLL_TAGS: docker
GID: "1000"
PARSERS: crowdsecurity/whitelists
healthcheck:
interval: 10s
retries: 3
test:
- CMD
- cscli
- lapi
- status
timeout: 5s
start_period: 30s
image: docker.io/crowdsecurity/crowdsec:latest
labels:
- traefik.enable=false
ports:
- 6060:6060
restart: unless-stopped
volumes:
- ./config/crowdsec:/etc/crowdsec
- ./config/crowdsec/db:/var/lib/crowdsec/data
- ./config/traefik/logs:/var/log/traefik
gerbil:
cap_add:
- NET_ADMIN
- SYS_MODULE
command:
- --reachableAt=http://gerbil:3003
- --generateAndSaveKeyTo=/var/config/key
- --remoteConfig=http://pangolin:3001/api/v1/gerbil/get-config
- --reportBandwidthTo=http://pangolin:3001/api/v1/gerbil/receive-bandwidth
container_name: gerbil
depends_on:
pangolin:
condition: service_healthy
image: docker.io/fosrl/gerbil:latest
ports:
- 51820:51820/udp
- 21820:21820/udp
- 443:443
- 80:80
restart: unless-stopped
volumes:
- ./config/:/var/config
pangolin:
container_name: pangolin
healthcheck:
interval: 10s
retries: 15
test:
- CMD
- curl
- -f
- http://localhost:3001/api/v1/
timeout: 10s
image: fosrl/pangolin:latest
#image: docker.io/fosrl/pangolin:1.15.4
restart: unless-stopped
volumes:
- ./config:/app/config
traefik:
command:
- --configFile=/etc/traefik/traefik_config.yml
container_name: traefik
depends_on:
crowdsec:
condition: service_healthy
pangolin:
condition: service_healthy
image: docker.io/traefik:v3.6.8
network_mode: service:gerbil
restart: unless-stopped
volumes:
- ./config/traefik:/etc/traefik:ro
- ./config/letsencrypt:/letsencrypt
- ./config/traefik/logs:/var/log/traefik
- ./config/traefik/rules:/rulesVous noterez que si je laisse Gerbil et Crowdsec en latest, je préfère contrôler moi-même la version de Traefik et Pangolin.
Important aussi: on sort bien les logs de Traefik dans un volume que Crowdsec va pouvoir venir lire, sinon cela ne sert à rien : les attaques ne seront pas repérées et donc pas bloquées. Les règles sont aussi exposées dans un volume accessible, ça nous permettra plus tard de les modifier au besoin.
Normalement avec cette stack vous devriez vous retrouver avec un Pangolin fonctionnel !
Il reste maintenant à se connecter au tableau de bord pour la première fois. Rendez-vous sur https://<votre-domaine>/auth/initial-setup, récupérez le setup token affiché dans les logs (docker compose logs pangolin), puis créez votre compte admin et votre organisation.
Avant de créer une ressource, il faut un site pour la rattacher : dans la section Sites de votre organisation, créez-en un et Pangolin vous affiche aussitôt sa conf Newt, un ID et un secret propres au site, plus l'endpoint, l'URL de votre Pangolin. Il ne reste qu'à lancer Newt sur la machine qui héberge vos services que ce soit via Docker ou via le binaire. Dans tous les cas Pangolin vous fournit la conf toute faite !
Ensuite, on peut créer une ressource (c'est-à-dire exposer un service) que Pangolin va exposer en reverse proxy à votre place, TLS compris. On lui donne une target, l'IP et le port du service en interne, rattachée au site qu'on vient de créer. Selon l'install de Newt choisie on peut faire pointer directement vers un conteneur Docker.
Et voilà Pangolin s'occupe ensuite de tout : certificats, règles d'accès et même de l'authentification.