diff --git a/.gitignore b/.gitignore index 7d81695..2761f85 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,9 @@ homepages/forust_files/assets/images/team/* # Traefik files traefik/letsencrypt/acme.json traefik/logs/* + +# SSL Certificates +adguardhome/certs/* traefik/certs/* # Monitoring @@ -83,3 +86,4 @@ replacements.txt # Temp files edu_master/temp/ +temp/* diff --git a/adguardhome/compose.yaml b/adguardhome/compose.yaml index 2e3b7c6..e2d40f6 100644 --- a/adguardhome/compose.yaml +++ b/adguardhome/compose.yaml @@ -3,45 +3,51 @@ services: image: adguard/adguardhome:latest container_name: adguardhome restart: unless-stopped - environment: - - TZ=${TZ} ports: - "53:53/tcp" - "53:53/udp" + - "853:853/tcp" # DNS over TLS # - "67:67/udp" # DHCP # - "68:68/tcp" # DHCP - "3000:3000/tcp" volumes: - ./data/work:/opt/adguardhome/work - ./data/conf:/opt/adguardhome/conf + - ./certs:/certs:ro networks: - proxy labels: - "traefik.enable=true" - "traefik.docker.network=proxy" + - "traefik.http.services.adguard.loadbalancer.server.port=3000" # Prod Router - - "traefik.http.routers.adguard.rule=Host(`adguard.forust.xyz`)" + - "traefik.http.routers.adguard.rule=Host(`dns.forust.xyz`) || Host(`adguard.forust.xyz`)" - "traefik.http.routers.adguard.entrypoints=websecure" - "traefik.http.routers.adguard.middlewares=security-headers@file" - "traefik.http.routers.adguard.service=adguard" - "traefik.http.routers.adguard.tls=true" - - "traefik.http.services.adguard.loadbalancer.server.port=3000" # Local Router - - "traefik.http.routers.adguard-local.rule=Host(`adguard.workstation.internal`) || Host(`adguard.internal`)" + - "traefik.http.routers.adguard-local.rule=Host(`dns.workstation.internal`) || Host(`adguard.internal`) || Host(`adguard.workstation.internal`)" - "traefik.http.routers.adguard-local.entrypoints=websecure" - "traefik.http.routers.adguard-local.middlewares=security-headers@file" - "traefik.http.routers.adguard-local.service=adguard" - "traefik.http.routers.adguard-local.tls=true" # Dev Router - - "traefik.http.routers.adguard-dev.rule=Host(`adguard.gigaforust.internal`)" + - "traefik.http.routers.adguard-dev.rule=Host(`dns.gigaforust.internal`) || Host(`adguard.gigaforust.internal`)" - "traefik.http.routers.adguard-dev.entrypoints=websecure" - "traefik.http.routers.adguard-dev.middlewares=security-headers@file" - "traefik.http.routers.adguard-dev.service=adguard" - "traefik.http.routers.adguard-dev.tls=true" + # DoH + - "traefik.http.routers.dns.rule=(Host(`dns.forust.xyz`) && PathPrefix(`/dns-query`))" + - "traefik.http.routers.dns.entrypoints=websecure" + - "traefik.http.routers.dns.service=adguard" + - "traefik.http.routers.dns.tls.certresolver=letsencrypt" + - glance.name=adguard - glance.url=https://adguard.forust.xyz/ - glance.description=AdGuard Home is a network-wide software for blocking ads. diff --git a/traefik/compose.yaml b/traefik/compose.yaml index 4f29341..eff00c3 100644 --- a/traefik/compose.yaml +++ b/traefik/compose.yaml @@ -19,16 +19,14 @@ services: - "--entryPoints.web.address=:80" - "--entryPoints.websecure.address=:443" - "--entryPoints.websecure.http.tls=true" - - "--entryPoints.web.http.redirections.entryPoint.to=websecure" - - "--entryPoints.web.http.redirections.entryPoint.scheme=https" - "--entryPoints.ssh.address=:2221" - # Let's Encrypt STAGING. CURRENTLY USING CF ORIGIN CA INSTEAD - # - "--certificatesresolvers.letsencrypt.acme.email=${EMAIL}" - # - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" + # Let's Encrypt + - "--certificatesresolvers.letsencrypt.acme.email=${EMAIL}" + - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" + - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" + # # STAGING # - "--certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory" - # - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true" - # - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" # Cloudflare - "--entryPoints.web.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22" @@ -77,7 +75,7 @@ services: - ./dynamic:/etc/traefik/dynamic:ro - ./certs:/certs:ro - ./logs:/var/log/traefik - # - ./traefik/letsencrypt:/letsencrypt + - ./letsencrypt:/letsencrypt networks: - proxy @@ -87,4 +85,4 @@ services: networks: proxy: - external: true \ No newline at end of file + external: true diff --git a/traefik/dynamic/middlewares.yml b/traefik/dynamic/middlewares.yml index 28d552b..0dba63f 100644 --- a/traefik/dynamic/middlewares.yml +++ b/traefik/dynamic/middlewares.yml @@ -1,33 +1,5 @@ http: middlewares: - # HTTPS Redirect - redirect-https: - redirectScheme: - scheme: https - permanent: true - - # Metube Basic Auth - metube-auth: - basicAuth: - users: - - "vv:$2y$05$JdT8AGUO9bd.E/PiCmKaoOJS1RFlXkrrmZ5mJ4f8/a1bEW39L3FbS" - - realm: "MeTube Access" - - # Basic Auth Traefik Dashboard - auth: - basicAuth: - users: - - "admin:$2y$05$.CKDD82sNUxcpaRrLbHuK.dopqt1fgurc2yfTKAT5OFzT7RvPrJHK" - realm: "Traefik Dashboard" - - # Basic Auth Dockmon - dockmon-auth: - basicAuth: - users: - - "admin:$2y$05$.CKDD82sNUxcpaRrLbHuK.dopqt1fgurc2yfTKAT5OFzT7RvPrJHK" - realm: "Dockmon Access" - # Cloudflare IP Whitelist cloudflare-ipwhitelist: ipWhiteList: diff --git a/traefik/dynamic/redirect.yml b/traefik/dynamic/redirect.yml new file mode 100644 index 0000000..fdcea94 --- /dev/null +++ b/traefik/dynamic/redirect.yml @@ -0,0 +1,23 @@ +http: + middlewares: + redirect-https: + redirectScheme: + scheme: https + permanent: true + + routers: + acme-challenge-exempt: + rule: "PathPrefix(`/.well-known/acme-challenge`)" + entryPoints: + - web + service: noop@internal + priority: 100 + + http-catchall: + rule: "HostRegexp(`{host:.+}`)" + entryPoints: + - web + middlewares: + - redirect-https + service: noop@internal + priority: 1