Приватные подключения между серверами без VPN и открытых портов

Как сервисы, базы данных и серверы в разных облаках связываются в Opfield: исходящие подключения с mTLS, Secure Links через реле, приватные базы со своим пользователем на каждую связь и то, что Opfield оставляет вам.

Автор: команда Opfield4 мин чтенияОбновлено

Обычная картина: API работает у одного облачного провайдера, его база — у другого, а публичный сайт — на третьем сервере. Чтобы их связать, команды обычно поднимают VPN между серверами или открывают порт базы и ограничивают его списком адресов. Оба способа работают, и оба добавляют то, что нужно поддерживать, и то, что можно атаковать.

Opfield идёт другим путём. Ваши серверы подключаются только наружу, а приватный трафик между ними идёт через реле по аутентифицированным соединениям. Ниже о том, как это устроено и где у этого границы.

Серверы подключаются сами, на них ничто не ждёт подключений

Открытые порты управления на серверах не нужны. На каждом сервере работают небольшие демоны Opfield, которые сами подключаются к реле Opfield, обычно на 9443/tcp. Соединение всегда идёт по TLS, а демоны не открывают в сеть никакого API управления. Сервер в любом облаке или за NAT может подключиться, если ему доступно реле.

Opfieldeu-fra-01Ingress · mTLSeu-fra-02Docker · mTLSus-ash-01Docker · mTLSdb-fra-01Database · mTLSedge-ams-01Ingress · draining
Каждый сервер сам подключается к Opfield по mTLS.

Каждый сервер подтверждает, кто он

Чтобы добавить сервер, достаточно одной команды установки. В ней есть одноразовый токен регистрации и отпечаток сертификата Opfield. При первом запуске демон проверяет этот сертификат, прежде чем что-либо отправить. Токен уходит только при совпадении отпечатка, поэтому неверная DNS-запись или прокси на пути не смогут его перехватить.

Затем Opfield выдаёт серверу собственный mTLS-сертификат от внутреннего центра сертификации Opfield. Демон удаляет токен из своей конфигурации и переподключается уже с сертификатом. С этого момента сертификат и есть удостоверение сервера, и Opfield проверяет его на каждом потоке. Общего секрета, который мог бы утечь, нет, а удаление сервера отзывает его сертификат, так что старый демон не сможет снова подключиться от имени этого сервера.

Публичный трафик доходит до сервиса без опубликованного порта

Маршрут на публичном nginx-сервере может вести к контейнеру, деплойменту или сервису Compose на другом сервере. Opfield соединяет их через Secure Link — аутентифицированное приватное подключение через реле. Сервис не публикует порт на хосте, а маршрут находит его по идентичности, поэтому перезапуск или новый релиз не требуют менять маршрут. Secure Links доступны на всех планах, включая Community.

Routes3 of 41
HostUpstreamTLSHealth
api.northwind.iopayments-api ×3valid · 84 dayspassing
app.northwind.ioweb ×2valid · 61 dayspassing
status.northwind.iostatus pagevalid · 84 dayspassing
ACME · auto-renewinternal PKIaccess policy · 2health check · 10 s
Маршруты указывают на сервисы по имени, а трафик к ним несут Secure Links.

Базы данных остаются приватными

Управляемые PostgreSQL, хранилища ключ-значение и ClickHouse по умолчанию приватны. Когда вы связываете приложение с базой, Opfield добавляет контейнеру приватную сеть, передаёт ему переменные подключения и пускает трафик через аутентифицированный туннель через реле. База не слушает публичный порт.

Каждая связь получает своего пользователя базы: отдельную роль Postgres, ACL-пользователя хранилища ключ-значение или пользователя ClickHouse. Приложение никогда не получает учётные данные владельца, а удаление связи отзывает этого пользователя. Если внешнему инструменту нужен прямой доступ, публикация порта базы — явный выбор. Для неё нужна аутентификация в базе, и Opfield не открывает для неё файрвол хоста. Управляемые базы данных доступны с плана Personal.

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

Private connections2 links
payments-apius-ash-01Virginia
payments-dbdb-fra-01Frankfurt
webeu-fra-02Frankfurt
sessionsdb-fra-01Frankfurt
no open portsno VPNacross servers and clouds
payments-api обращается к payments-db, а web — к sessions на других серверах через реле.

Больше одного реле

Приватный трафик не обязан зависеть от одной машины. Помимо реле, которое идёт вместе с Opfield, можно добавить реле на других хостах и собрать Relay Pool. Зоной отказа каждого реле считается его физический хост, поэтому два реле на одном хосте не дают резерва.

Новые подключения распределяются между готовыми реле. Если вывести реле из работы, новые подключения пойдут на другие, а уже открытые потоки продолжатся. Обновления реле подписаны и раскатываются по одному реле за раз. Приложения видят одну логическую связь, и им не нужно знать, какое реле её несёт. Opfield остаётся плоскостью управления: ваши данные идут через реле, а не через приложение Opfield.

Чего Opfield не делает

Это не VPN и не попытка его заменить. Opfield не открывает файрволы, не обходит NAT и не создаёт оверлейную сеть. Серверы остаются независимыми, доверие между ними не настраивается.

Кое-что остаётся за вами:

  • Каждый сервер должен достучаться до назначенных ему реле, по умолчанию на 9443/tcp. Реле — единственное место, которое принимает входящие подключения от ваших серверов.
  • Публичным nginx-серверам нужны открытые 80/tcp и 443/tcp для веб-трафика.
  • Secure Link защищает транспорт и выбор цели. Кто может обращаться к приложению, по-прежнему решает само приложение.

Подробнее

В документации по шагам описаны регистрация узлов, Relay Pool, защищённые upstream и связи с базами данных, включая правила файрвола для каждого типа сервера.