Запуск докеризованного сайта за обратным прокси Traefik

#docker #docker-compose #traefik

#docker #docker-compose #traefik

Вопрос:

У меня установлен Traefik версии v1.7.6 в качестве контейнера Docker, следуя инструкциям в этом руководстве.

Все работает нормально, и доступ к этому сайту осуществляется по адресу: https://proxy.hostname.com

Я хочу добавить контейнер контроллера UniFi для запуска за этим обратным прокси, но мне нужна помощь с моей конфигурацией.

Следуя этому руководству, я могу создать функциональный контейнер и получить доступ к этому сайту по адресу: https://unifi.hostname.com:8443

Порт 8443 — это собственный порт веб-управления, на котором работает UniFi, но именно здесь мне нужна помощь.

Насколько я понимаю, я должен иметь доступ к этому сайту через Traefik по адресу https://unifi.hostname.com и быть перенаправленным на соответствующий порт 8443 на задней панели. Во-вторых, теряется преимущество использования Let’s Encrypt, поскольку он предоставляет сертификат только для поддоменов на порту 443.

Вот мой docker-compose.yml файл:

 version: "3.6"
services:

  unifi:
    hostname: unifi
    image: linuxserver/unifi:latest
    restart: always
    container_name: "unifi"
    volumes:
      - /docker/unifi:/config
    ports:
      - target: 3478
        published: 3478
        protocol: udp
        mode: host
      - target: 10001
        published: 10001
        protocol: udp
        mode: host
      - target: 8080
        published: 8080
        protocol: tcp
        mode: host
      - target: 8081
        published: 8081
        protocol: tcp
        mode: host
      - target: 8443
        published: 8443
        protocol: tcp
        mode: host
      - target: 8880
        published: 8880
        protocol: tcp
        mode: host
      - target: 6789
        published: 6789
        protocol: tcp
        mode: host
    networks:
      - proxy
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
    labels:
      - "traefik.enable=true"
      - "traefik.tags=frontend"
      - "traefik.frontend.passHostHeader=true"
      - "traefik.admin.backend=unifi"
      - "traefik.admin.frontend.rule=Host:unifi.hostname.com"
      - "traefik.admin.port=8443"
      - "traefik.admin.protocol=https"

networks:
  proxy:
    external: true

  

Комментарии:

1. Я предполагаю, что из вашего вопроса это https://unifi.hostname.com/ работает не так, как вы ожидаете. Получаете ли вы что-нибудь в своих журналах Traefik при попытке подключиться к этому адресу? Что произойдет, если вы укажете своему браузеру на этот URL-адрес?

2. unifi.hostname.com приводит к ответу «Плохой шлюз», но имеет действительный сертификат. unifi.hostname.com:8443 работает, но не имеет действительного сертификата.

3. Это может быть то, что людям нужно скачать и попробовать — это может быть довольно неудобно. Я добавил награду за это.

Ответ №1:

По моему собственному опыту, проксирование контроллера UniFi было проблемой, потому что он использует встроенный самозаверяющий сертификат. Обычно вы должны указать своему прокси игнорировать недействительные сертификаты при подключении к его серверной части.

Я бы предположил, что вам нужна InsecureSkipVerify опция, которая должна быть включена traefik.toml .

Проверка безопасности: если установлено значение true, для серверных систем принимаются недействительные SSL-сертификаты. Примечание: это отключает обнаружение атак типа «человек посередине», поэтому его следует использовать только в защищенных серверных сетях. — https://docs.traefik.io/configuration/commons /

Комментарии:

1. Если UniFi работает в контейнере Docker, может ли пользователь использовать том для перезаписи самозаверяющего сертификата реальным?

2. @halfer нет, он встроен глубоко в пакет (java IIRC)

3. О, достаточно справедливо. Тем не менее, Traefik может быть настроен на получение зашифрованного соединения по действительному сертификату, и тогда его соединение с UniFi может быть небезопасным в серверной части, если путь между Traefik и UniFi не подвержен перехвату.

4.Это потенциально связанный поток.

5. @halfer точно 🙂 В этом причина вышеприведенной директивы InsecureSkipVerify. Лично я использую traefik -> oauth_proxy (открытый текст) -> Контроллер UniFi (самоподписанный), чтобы добавить еще один уровень аутентификации