traefik が https にリダイレクトされない

traefik が https にリダイレクトされない

私は、docker、letsencrypt、traefik を使用してホーム オートメーション サーバーをセットアップしようとしています。また、ddns には duckdns を使用しています。同じマシンに sickrage などの他のコンテナーもいくつかあります。

ルーターのポート 80 と 443 を開いて、Ubuntu 18.04 サーバーに転送しました。http で sickrage.myserver.duckdns.org に接続しようとすると、次のエラーが発生します。

**Your connection is not private**
Attackers might be trying to steal your information from sabnzbd.myserver.duckdns.org 
NET::ERR_CERT_AUTHORITY_INVALID

これが私のtraefik.tomlファイルです:

    logLevel = "WARN" #DEBUG, INFO, WARN, ERROR, FATAL, PANIC
defaultEntryPoints = ["http", "https"]

# WEB interface of Traefik - it will show web page with overview of frontend and backend configurations 
[api]
  entryPoint = "traefik"
  dashboard = true
  address = ":8080"

# Force HTTPS
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
     entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

[retry]


[file]
  watch = true
  filename = "${USERDIR}/docker/traefik/rules.toml"

# Let's encrypt configura
[acme]
caServer = "https://acme-v02.api.letsencrypt.org/directory"
email = "[email protected]"     #any email id will work
storage="${USERDIR}/docker/traefik/acme/acme.json"
entryPoint = "https"
acmeLogging=true 
onDemand = false #create certificate when container is created
onHostRule = true
  # Use a HTTP-01 acme challenge rather than TLS-SNI-01 challenge
  # uncomment 2 lines for subdirs
#[acme.httpChallenge]
[acme.dnsChallenge]
provider = "duckdns"
entryPoint = "https"
  # uncomment follwoing for suubsomains
#[[acme.domains]]
  #main = "myserver.duckdns.org"
#[[acme.domains]]
  #main = "*.myserver.duckdns.org"
#[acme.dnsChallenge]
  #provider = "duckdns"
  #delayBeforeCheck = 0

# Connection to docker host system (docker.sock)
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "myserver.duckdns.org"
watch = true
# This will hide all docker containers that don't have explicitly  
# set label to "enable"
exposedbydefault = false

そして私の docker-compose ファイルの一部:

    ---
version: "3.6"
services:
  #############################################   Frontends               ############################
  #############################################   Traefik - Reverse proxy  ###########################
  traefik:
    hostname: traefik
    image: traefik:latest
    container_name: traefik
    restart: always
    domainname: ${DOMAINNAME} 
    command: --api --docker --docker.domain=${DOMAINNAME} --docker.watch --loglevel=DEBUG
    #command: --api --docker --docker.domain=docker.localhost --docker.watch --loglevel=DEBUG
    networks:
      - default
      - traefik_proxy
    depends_on:
      - duckdns
    environment:
      - TOKEN=${DUCKDNS_TOKEN}
    ports:
      - "80:80"
      - "443:443"
      - "8008:8080"
    labels:
      - "traefik.enable=true"
      - "traefik.backend=traefik"
      - "traefik.port=8080"
      - "traefik.protocol=http"
        #- "traefik.frontend.auth.basic=patrick:$$2y$$05$$a8dtYfcMqH.kUFq3zZPGqe9kq7Tyok7.3/mKdMa1NaCuSwAZ0InOq"
        #- "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefixStrip: /traefik"
      - "traefik.frontend.rule=Host:traefik.${DOMAINNAME}"  
      - "traefik.docker.network=traefik_proxy"
      - "traefik.frontend.entryPoints=https"
      - "traefik.frontend.headers.SSLRedirect=true"
      - "traefik.frontend.headers.STSSeconds=315360000"
      - "traefik.frontend.headers.browserXSSFilter=true"
      - "traefik.frontend.headers.contentTypeNosniff=true"
      - "traefik.frontend.headers.forceSTSHeader=true"
      - "traefik.frontend.headers.SSLHost=dellubuntu.duckdns.org"
      - "traefik.frontend.headers.STSIncludeSubdomains=false"
      - "traefik.frontend.headers.STSPreload=true"
      - "traefik.frontend.headers.frameDeny=true"
        #- "traefik.frontend.auth.basic.users=${HTTP_USERNAME}:${HTTP_PASSWORD}"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${USERDIR}/docker/traefik/acme/acme.json:/acme.json
      - ${USERDIR}/docker/traefik/traefik.toml:/traefik.toml
      - ${USERDIR}/docker/letsencrypt/config/etc/letsencrypt:/le-ssl
      - ${USERDIR}/docker/traefik:/etc/traefik
      - ${USERDIR}/docker/shared:/shared
  #Letsencrypt                                                    ------------------------ Letsencrypt
  letsencrypt:
    image:  linuxserver/letsencrypt
    container_name: le
    #ports:
      #- "447:443"
    networks:
      - default
      - traefik_proxy
    volumes:
      - ${USERDIR}/docker/letsencrypt/config:/config
    restart: always
    depends_on:
      - portainer
      - heimdall
      - organizr2
      - lazylibrarian
      - plex
      - tautulli
      - headphones
        #- lidarr
      - couchpotato
        #- radarr
      - sickrage
        #- sonarr
        #- airsonic
      - glances
      - ghost
      - transmission-vpn
      - sabnzbd
      - huginn
      - netdata
        #- nextcloud
        #- hydra2
        #- nzbget
        #- jackett
        ##- duplicati
        ##- bazarr
        ##- homeassistant
        ##- filebrowser
        ##- ombi
        ##- elkarbackup
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
      - URL=${DOMAINNAME}
      - EMAIL=${EMAIL}
      - SUBDOMAINS=wildcard
      - VALIDATION=duckdns
      - DUCKDNSTOKEN=${DUCKDNS_TOKEN}
      - ONLY_SUBDOMAINS=false
      - DHLEVEL=4096

私が試した例には、letsencrypt コンテナが含まれていません。削除する必要がありますか? その場合、letsencrypt は停止したコンテナと開始したコンテナをどのように追跡するのでしょうか? これを実行する別の方法はありますか?

答え1

Traefik には letsencrypt 統合が含まれているため、別の letsencrypt コンテナーは必要ありません。

Traefik はデフォルトで TLS 接続を終了し、docker 内部ネットワーク経由で HTTP でアプリケーションにリクエストを渡します。インターネット経由での接続は引き続き安全ですが、接続先のアプリケーションはそれを認識しません。サービスで指定することで接続を再暗号化できますtraefik.protocol=httpsが、その場合、アプリケーションは独自の TLS 証明書を維持しなければならず、Traefik はこれを信頼するように構成する必要があります。これは、これらの証明書が LetsEncrypt から取得されないためです。

関連情報