Пост

Организация защищенных виртуальных сетей с помощью OpenZiti. Часть 1

Система управления распределенными сетевыми ресурсами с широкими возможностями кастомизации

Пополню коллекцию систем для организации защищенных виртуальных сетей еще одним, вероятно, самым мощным opensource решением - OpenZiti.

В настройке OpenZiti значительно сложнее, чем рассмотренные ранее ZeroTier или Nebula ввиду обширных возможностей контроля и управления сетями, хостами, маршрутами, политиками доступа и т.д. Именно поэтому я выделил под эту тему несколько запланированных публикаций, дабы на примере некоторых несложных топологий разобрать на практике варианты организации взаимодействия между распределенными машинами.

💎 Ключевые особенности

🔻 Zero Trust сегментация сети

Каждый клиент в сети имеет свой идентификатор и сертификат доступа. Сертификаты используются для установления безопасных каналов связи, а также для прохождения этапов аутентификации и авторизации. Каждая попытка доступа начинается с проверки наличия прав на подключение к тому или иному ресурсу, что позволяет изолировать клиентские приложения и сервисы и настраивать политики индивидуально. Связь между компонентами сети OpenZiti также подлежит обязательной авторизации.

🔻 End-to-End шифрование

Каждое соединение зашифровано даже в случае, если ваши приложения или сервисы не использую защищенные протоколы сами по себе.

🔻 Гибкая настройка режимов доступа

  • Прямой доступ приложения к приложению
  • Доступ от хоста к хосту
  • Доступ к приватной сети

🔻 Интеграция с внешними провайдерами доступа.

🔻 Сбор метрик системы, включая Prometheus и Grafana.

🔻 Для организации подключения можно использовать как готовые приложения под большинство систем, так называемые Tunnelers, так и SDK под популярные языки для интеграции защищенного взаимодействия прямо в собственное приложение.

🔎 Основные компоненты

monid-screenshot Рис. 1 - Пример сети из официальной документации

  • Контроллер (Controller) - центральный пункт управления идентификационными данными пользователей, устройствами и узлами, отвечает за аутентификацию и авторизацию каждого соединения в сети.
  • Маршрутизаторы (Routers) - точки входа в сеть для клиентских подключений. Отвечают за передачу трафика между узлами, включают в себя функцию мониторинга для выбора оптимальной маршрутизации трафика.
  • Конечные клиенты (Edge clients) - программы на базе Ziti SDK (готовые клиенты или пакеты для собственной разработки), обеспечивающие безопасное подключение к сети.
  • BrowZer - набор дополнительных компонентов для доступа к защищенным ресурсам через веб-браузер без необходимости устанавливать специализированное клиентское приложение.

📚 QuickStart версия для ознакомления с работой платформы

Документация очень проработанная, поэтому сразу начну с варианта установки с помощью Docker.

➡️ Скачиваем compose и .env файлы с официального сайта

1
2
curl -so docker-compose.yaml https://get.openziti.io/dock/docker-compose.yml
curl -so .env https://get.openziti.io/dock/.env

➡️ В конфигурационном файле .env можно указать пароль администратора (если оставить пустым, то он будет сгенерирован автоматически при первом запуске). Все остальные параметры по умолчанию.

1
2
3
4
5
6
7
8
9
10
11
ZITI_IMAGE=openziti/quickstart
ZITI_VERSION=latest

ZITI_USER=admin
ZITI_PWD=admin

ZITI_INTERFACE=0.0.0.0

ZITI_CTRL_NAME=ziti-controller
ZITI_CTRL_EDGE_ADVERTISED_ADDRESS=ziti-edge-controller
ZITI_CTRL_ADVERTISED_ADDRESS=ziti-controller

➡️ Запускаем весь набор компонентов, включая ZAC (Ziti Admin Console) - веб панель администратора.

1
docker compose up -d

➡️ По адресу машины, где было развернуто решение, на порту 8443 будет доступна консоль.

openziti-screenshot-1

openziti-screenshot-2

  • В консоли администратора в разделе Identities создаем новый идентификатор специально под рабочую машину, с которой хотим подключиться. Забираем сформированный файл JWT.

openziti-screenshot-3

  • На клиентскую машину ставим приложение-клиента (например, под Windows) для проверки подключения.
  • ADD IDENTITY - With JWT
  • Подгружаем JWT файл и проверяем подключение нового устройства.
  • Аналогично поступаем и с другими клиентскими машинами, чтобы связать устройства в сеть через единый контроллер и дефолтные роутеры.

openziti-screenshot-4

openziti-screenshot-5

Больше полезной информации в Telegram-канале