Cloudflare Zero Trust

Cloudflare Zero Trust

В эпоху самостоятельного хостинга обеспечение безопасного и надежного доступа к вашему серверу имеет решающее значение. Cloudflare Zero Trust предлагает бесшовное решение. Эта запись в блоге проведет вас через настройку Cloudflare Tunnel, сделав ваши сервисы доступными и защищенными.

Предварительные условия:

  • Docker установлен на вашем сервере
  • Учетная запись Cloudflare
  • Доменное имя, зарегистрированное/управляемое Cloudflare

Туннели Cloudflare предоставляют безопасный способ раскрыть ваши локальные веб-серверы для Интернета без необходимости открывать порты или изменять настройки брандмауэра. Создавая только исходящее соединение с вашего сервера в Cloudflare, эти туннели гарантируют, что весь трафик будет зашифрован и направлен через глобальную сеть Cloudflare, что повышает как безопасность, так и производительность. Такая настройка не только упрощает развертывание, но и защищает ваш сервер от прямых атак, скрывая его настоящий IP-адрес.

Примечание: некоторые шаги ниже необходимо скорректировать в соответствии с вашей настройкой!

Создать туннель Cloudflare

Теперь нам нужно создать конфигурацию туннеля с Cloudflare

Токен туннеля Cloudflare

Нам нужно получить токен для туннеля, чтобы подключиться к cloudflare.

Для этого:

  • Перейдите на https://dash.cloudflare.com
  • Перейдите на Zero Trust
  • Нажмите Networks -> Tunnels
  • Нажмите Add a Tunnel
  • Выберите Cloudflared и нажмите Next
  • Дайте имя вашему туннелю
  • Нажмите Save Tunnel
  • Выберите Docker в качестве установки
  • Скопируйте команду с помощью кнопки копирования
  • Вставьте ее в блокнот по вашему вкусу

Docker compose

Нам нужно создать папку для хранения docker-compose.yml

mkdir cloudflared
cd cloudflared

В папке мы создадим docker-compose.yml для создания контейнера Docker.

nano docker-compose.yml
services:
  cloudflared:
    image: cloudflare/cloudflared
    container_name: cloudflared
    environment:
      - TZ=Europe/Moscow
      - TUNNEL_TOKEN=${TOKEN}
    restart: unless-stopped
    command: tunnel --no-autoupdate run
    networks:
      - cloudflared

networks:
  cloudflared:
    name: cloudflared

Так как мы не хотим, чтобы токен находился в файле docker-compose, мы создаем файл .env в том же словаре, что и ваш docker-compose.yml.

nano .env

В этот файл .env поместите следующее содержимое.

TOKEN=<Ваш токен>

Замените <Ваш токен> на длинную последовательность символов, которая находится за – токеном команды, которую мы только что скопировали с сайта Cloudflare.

Теперь запустим Cloudlfared, выполнив:

docker compose up -d

Если все правильно, вы увидите подключение к туннелю в течение нескольких секунд.

Подключен туннель Cloudflare

Добавить сервис для проверки

Чтобы убедиться, что все работает, запустим простой сервис для тестирования туннеля. Мы будем использовать приложение whoami. Это просто служба HTTP для отображения некоторых браузеров и информации об ОС.

Для этого мы создадим еще один каталог с именем whoami и docker-compose.yml

cd ..
mkdir whoami
nano whoami/docker-compose.yml
services:
    whoami:
        container_name: simple-service
        image: traefik/whoami
        networks:
            - cloudflared

networks:
  cloudflared:
    name: cloudflared

Чтобы запустить контейнер, выполните команду ниже.

docker compose -f whoami/docker-compose.yml up -d

Теперь, когда это работает, мы можем продолжить настройку туннеля. Вернемся на страницу Cloudflare и нажмем «Далее».

Заполните следующее поле:

  • Поддомен — поддомен для использования, например; тест
  • Домен — выберите доменное имя для использования из списка
  • Тип — выберите HTTP
  • URL — введите IP и порт приложения, к которому вы хотите подключиться
Если приложение находится в той же сети Docker, что и туннель Cloudflare, вы можете использовать имя контейнера simple-service.

В качестве последнего шага нажмите Save Tunnel. Теперь туннель получит конфигурацию, и вы сможете получить доступ к своему сервису через Cloudflare.

Если вы сейчас выполните nslookup и трассируете маршрут для указанного доменного имени, вы увидите, что весь трафик идет в Cloudflare. Нигде не отображается ваш собственный IP-адрес.

Если вы хотите добавить больше служб через тот же туннель. Перейдите на страницу Networks -> Tunnels

  • Нажмите на туннель, в который вы хотите добавить публичное имя хоста.
  • Нажмите Изменить
  • Перейти к публичному имени хоста
  • Нажмите Добавить публичное имя хоста
  • Заполните поля Поддомен, Домен, Тип, URL. Как описано выше.

Одноразовый пароль

Чтобы убедиться, что не все могут получить доступ к вашим услугам, можно использовать аутентификацию на основе одноразового PIN-кода для пользователей, получающих доступ к вашей сети через туннели.

На странице Zero Trust;

  • Перейдите в Access -> Applications.
  • Измените приложение, которое вы хотите изменить.
    Перейдите в Authentication.
  • Убедитесь, что у вас выбран одноразовый PIN-код.
    Нажмите Save Application.

Так же вы можете задавать различные политики доступа в разделе Access Policies.