LINUX.ORG.RU
ФорумAdmin

CloudFlare + Treafik. Настройка HTTPS

 , , , ,


0

1

Добрый день!

Дано

  1. Мой сервер внутри ДМЗ на котором в Докере крутятся различные сервисы.
  2. Учетка на CloudFlare, бесплатный :) тариф. Поддержка моей зоны ДНС (пусть будет mdomain.ru) + Универсальный сертификат на mdomain.ru и *.mdomain.ru. Туннель в ДМЗ. Настройка SSL/TLS encryption mode is Full (strict)

Надо

Настроить traefik чтобы заходя по какому-то доменому имени попадал на запущенный в докере сервис. И что бы все это было по HTTPS с сертификатом CF.

Настройка

Cloudflare tunnel

Туннель запущен в докере, имеет доступ к контейнеру traefik’а. Настроен редирект: traefik.mdomain.ru -> https://traefik

Traefik

docker-traefik.yml

version: "3.9"

networks:
  traefik_net:
    external: true
  private_cf1:
    external: true

secrets:
  mdomain.ru.pem:
    file: ./traefik/mdomain.ru.pem
  mdomain.ru.key:
    file: ./traefik/mdomain.ru.key

services:
  traefik:
    image: traefik:v2.10
    ports:
      - target: 80
        published: 80
        protocol: tcp
      - target: 443
        published: 443
        protocol: tcp
    environment:
      - TZ=$TZ
      - CF_API_EMAIL=*********
      - CF_API_KEY=********
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik/traefik.yml:/etc/traefik/traefik.yml
      - ./traefik/dynamic:/etc/traefik/dynamic
      - ./traefik/acme.json:/etc/traefik/acme.json
    secrets:
      - mdomain.ru.pem
      - mdomain.ru.key
    networks:
      - traefik_net
      - private_cf1:
    deploy:
      mode: global
      placement:
        constraints:
          - node.role == manager
      restart_policy:
        condition: any
      labels:
        - "traefik.http.routers.api.entrypoins=https"
        - "traefik.http.routers.api.rule=Host(`traefik.mdomain.ru`)"
        - "traefik.http.routers.api.service=api@internal"
        - "traefik.http.routers.api.tls=true"
        # - "traefik.http.routers.api.middlewares=traefik_auth@file"
        # Dummy service for Swarm port detection. The port can be any valid integer value.
        - "traefik.http.services.dummy-svc.loadbalancer.server.port=9999"
        - "traefik.http.services.dummy-svc.loadbalancer.server.scheme=http"

traefik.yml

log:
  level: debug
accessLog: {}

api:
  dashboard: true

providers:
  docker:
    swarmMode: true
    network: traefik_net
    exposedByDefault: false

  file:
    directory: /etc/traefik/dynamic
    watch: true

entryPoints:
  http:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: https
          scheme: https
          permanent: false

  https:
    address: ":443"

tls:
  stores:
    default:
      defaultCertificate:
        certFile: /run/secrets/mdomain.ru.pem
        keyFile: /run/secrets/mdomain.ru.key
      defaultGeneratedCert:
        resolver: cfresolver
        domain:
          main: "mdomain.ru"
          sans:
            - "*.mdomain.ru"

certificatesResolvers:
  cfresolver:
    acme:
      email: *******
      storage: /etc/traefik/acme.json
      dnsChallenge:
        provider: cloudflare
        resolvers:
          - "1.1.1.1:53"
          - "1.0.0.1:53"

Проблема

Пытаюсь зайти на адрес https://traefik.mdomain.ru (должен попасть на дашборд Traefik’а). А в ответ: сервис не доступен.

В логах Traefik

time="2023-10-11T20:02:30+06:00" level=debug msg="Serving default certificate for request: \"traefik\""
time="2023-10-11T20:02:30+06:00" level=debug msg="http: TLS handshake error from 10.100.0.4:47280: remote error: tls: bad certificate"
time="2023-10-11T20:02:32+06:00" level=debug msg="Serving default certificate for request: \"traefik\""
time="2023-10-11T20:02:32+06:00" level=debug msg="http: TLS handshake error from 10.100.0.4:47292: remote error: tls: bad certificate"

В логах Cloudflare

2023-10-11T14:02:32Z DBG GET https://traefik.mdomain.ru/favicon.ico HTTP/1.1 cfRay=8147a42dce60b4ee-OSL connIndex=2 content-length=0 event=1 headers={"Accept":["image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"],"Accept-Encoding":["gzip, br"],"Accept-Language":["ru,en-US;q=0.9,en;q=0.8,ja;q=0.7"],"Cdn-Loop":["cloudflare"],"Cf-Connecting-Ip":["*.*.*.*"],"Cf-Ipcountry":["RU"],"Cf-Ray":["8147a42dce60b4ee-OSL"],"Cf-Visitor":["{\"scheme\":\"https\"}"],"Cf-Warp-Tag-Id":["****"],"Priority":["u=1, i"],"Referer":["https://traefik.mdomain.ru/"],"Sec-Ch-Ua":["\"Google Chrome\";v=\"117\", \"Not;A=Brand\";v=\"8\", \"Chromium\";v=\"117\""],"Sec-Ch-Ua-Mobile":["?0"],"Sec-Ch-Ua-Platform":["\"Linux\""],"Sec-Fetch-Dest":["image"],"Sec-Fetch-Mode":["no-cors"],"Sec-Fetch-Site":["same-origin"],"User-Agent":["Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"],"X-Forwarded-For":["*.*.*.*"],"X-Forwarded-Proto":["https"]} host=traefik.mdomain.ru ingressRule=1 path=/favicon.ico
2023-10-11T14:02:32Z ERR  error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: tls: failed to verify certificate: x509: certificate is valid for 99086f145502f9bf969143601bc2499b.d80c8b992178b999171d425802265962.traefik.default, not traefik" cfRay=8147a42dce60b4ee-OSL event=1 ingressRule=1 originService=https://traefik
2023-10-11T14:02:32Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: tls: failed to verify certificate: x509: certificate is valid for 99086f145502f9bf969143601bc2499b.d80c8b992178b999171d425802265962.traefik.default, not traefik" connIndex=2 dest=https://traefik.mdomain.ru/favicon.ico event=0 ip=*.*.*.* type=http

Как я понимаю Траефик не берет универсальный серт от СФ и сезет со своим, сгенерированным. А СФ дает ему отлуп. Как ЭТО ВСЕ НАСТОИТЬ? Что-то всю голову сломал. Куча всяких примеров/описаний почитал. Но там что-то не договаривают или подразумевают, что я все это УЖЕ должен знать. Воотщем не работает :(

Кто настраивал подобную схему, или знает куда копать - ПОМОГИТЕ ПОЖАЛУЙТА!

tls: failed to verify certificate: x509: certificate is valid for 99086f145502f9bf969143601bc2499b.d80c8b992178b999171d425802265962.traefik.default, not traefik

Добавить имя traefik в самоподписанный сертификат traefik.

pekmop1024 ★★★★★
()
Последнее исправление: pekmop1024 (всего исправлений: 1)
1 января 2024 г.

Учетка на CloudFlare

Это самая главная ошибка. Эти ё<цензура> у<цензура> решают за пользователей, когда им следует менять браузеры. Не следует ползоваться говнофронтендами для сайта.

У тебя будет так же:

http://www.gismeteo.ru needs to review the security of your connection before proceeding.
Your browser is out of date!
Update your browser to view this website correctly. More Information.

Ray ID: 83eb3db19d0cb909
Performance & security by Cloudflare

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 2)
Ответ на: комментарий от MagicMirror

Проблема как всегда в прокладке. У меня ничего такого нет.

Проблема именно в прокладках. Считающих, что если у них нет, то и ни у кого нет. Продолжай юзать CloudFlare спокойно.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от MagicMirror

Ты ведь в курсе, что поведение полностью настраивается админом? Видимо нет.

Да мне так-то похрен. Или что, не работать с какой-то версией браузера - это не прихоть клоудфлара, а прихоть недопрограммиста/недоадмина сайта, который через них работает? Ну ладно тогда. Может и зря тогда на клоудфлар гоню. Хотя не зря: сами виноваты, что в этом сообщении об ошибке не пишут, что крайний - это админ сайта.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

Как правило это завышенная паранойя в борьбе с несуществующими атаками, а скрипт проверки не расчитан на маргиналов с браузерами возрастом в 10+ лет. У нормальных админов вся эта заshitа скручена в ноль или около того.

MagicMirror
()
Ответ на: комментарий от AS

По моему опыту, сайт с преимущественно автоматизированными запросами (т.е. некому решать капчу) в количестве примерно 150000-200000 запросов, ловит менее 10 срабатываний waf в месяц, да и те - well-known попытки использования эксплоитов к различным CMS.

MagicMirror
()
Ответ на: комментарий от MagicMirror

а скрипт проверки не расчитан на маргиналов с браузерами возрастом

А что делать, если хочется KMail без Akonadi и KNode... Хотя чую, кончится либо виртуалкой для них, либо ломкой привычек...

AS ★★★★★
()