Skip to content

Instantly share code, notes, and snippets.

@shellshock1953
Created March 3, 2024 08:46
Show Gist options
  • Save shellshock1953/684facabe91dd7957bdc06f70934de12 to your computer and use it in GitHub Desktop.
Save shellshock1953/684facabe91dd7957bdc06f70934de12 to your computer and use it in GitHub Desktop.
traefik reverse-proxy + dns-challenge + basic-auth + whitelist IP
# place in proxy/config.yml
http:
middlewares:
ipwhitelist:
ipWhiteList:
sourceRange:
- "1.2.3.0/24"
auth:
basicAuth:
users:
- "user:$apr1$..vpaN3N$ziY5nKsRRdbH4xv1PGrRy."
routers:
example:
entryPoints:
- websecure
rule: "Host(`vpn.example.com`)"
service: example
middlewares:
- ipwhitelist
- auth
tls:
certResolver: myresolver
services:
example:
loadBalancer:
servers:
- url: "http://site.com:3000"
version: "3.3"
services:
traefik:
image: "traefik:v2.11"
container_name: "traefik"
restart: unless-stopped
command:
- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.file.directory=/dynamic/"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.dnschallenge=true"
- "--certificatesresolvers.myresolver.acme.dnschallenge.provider=cloudflare"
- "--certificatesresolvers.myresolver.acme.email=example@gmail.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
- "--certificatesResolvers.myresolver.acme.dnsChallenge.resolvers=1.1.1.1:53,1.0.0.1:53"
ports:
- "80:80"
- "443:443"
- "8080:8080"
environment:
- "CLOUDFLARE_EMAIL=example@gmail.com"
- "CLOUDFLARE_DNS_API_TOKEN=CloudflareAPIToken123"
volumes:
- "./letsencrypt:/letsencrypt"
- "./proxy/:/dynamic/"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
- shared
whoami:
image: "traefik/whoami"
container_name: "simple-service"
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.tls.domains[0].main=*.vpn.example.com"
- "traefik.http.routers.whoami.tls.domains[0].sans=vpn.example.com"
- "traefik.http.routers.whoami.rule=Host(`whoami.vpn.example.com`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls.certresolver=myresolver"
networks:
- shared
networks:
shared:
driver: bridge
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment