Безопасность

Что обеспечивает сам relay

  • Конфиденциальность транзитного трафика. Между узлами — gRPC поверх стандартного TLS 1.3. Собственных криптопримитивов нет: только устоявшиеся реализации из стандартной библиотеки и crypto/tls.
  • Унифицированный транспорт с HTTPS. Релейный канал и обычный веб-канал слушают один и тот же порт 443 и используют один и тот же транспортный профиль — TLS 1.3, тот же ALPN, та же конфигурация handshake. Невалидные и неавторизованные обращения получают штатную веб-страничку, не 403 и не connection reset.
  • Аутентификация соседних узлов. Каждый соседний узел подтверждается HMAC-токеном, выданным мастером. Подменить узел или подставить чужой не получится: токен проверяется на каждом RPC. Токены хранятся в bootstrap-конфиге узла, не в общем доступе.
  • Защита от перебора. Anti-abuse: больше 10 неудачных попыток аутентификации с одного IP за час — адрес уходит в бан-лист на 24 часа. Бан-лист сохраняется на диск и переживает перезапуск. Распределённый перебор по разным выходным узлам не обходит порог: бан работает на каждом узле локально, атакующему придётся попасть в бан-лист у всех узлов поочерёдно.
  • Минимум привилегий процесса. Сервис работает от непривилегированного системного пользователя ololo-relay (без shell). Сетевые возможности (управление TUN-устройством, слушание привилегированных портов) выданы через Linux capabilities (cap_net_admin, cap_net_bind_service) — не от root.
  • Изоляция через systemd. В юните включены NoNewPrivileges=true, ProtectSystem=strict, ProtectHome=true, PrivateTmp=true, ограниченный набор сетевых семейств (AF_INET, AF_INET6, AF_UNIX, AF_NETLINK). Файловая система видна только на чтение, кроме /var/lib/ololo-relay/. Доступа к /home нет.

GPG-ключ репозитория

Все пакеты и метаданные подписаны одним ключом:

  • Fingerprint: 7996 8800 C963 EE63 2443 8ADA 2E81 F9E2 E462 1CF2
  • Key ID: 2E81F9E2E4621CF2
  • UID: ololo-relay repo <repo@ololo.tech>
  • Действителен до: 2028-05-22

Скачать публичный ключ: repo.ololo.tech/pubkey.asc.

Проверить отпечаток вручную:

curl -fsSL https://repo.ololo.tech/pubkey.asc | gpg --show-keys

Вывод должен содержать тот же fingerprint, что указан выше.

Что подписывается

  • .deb-пакеты — через подпись APT-метаданных. Файлы apt/dists/stable/Release и apt/dists/stable/InRelease содержат хэши Packages и Packages.gz. APT отвергает изменённый или повреждённый артефакт автоматически.
  • .rpm-пакеты — подпись внутри RPM-заголовка (rpm --addsign). Плюс отдельная подпись repodata/repomd.xml.asc для метаданных репозитория. dnf проверяет обе при установке.

При обновлении репозитория ключом подписываются и пакеты, и метаданные за одну CI-операцию.

Сообщения об уязвимостях

Для ответственного раскрытия уязвимостей в ololo-relay и других продуктах — security@ololo.tech.

При сообщении полезно указать:

  • версию пакета (apt-cache policy ololo-relay или dnf info ololo-relay);
  • дистрибутив и версию ядра;
  • по возможности — минимальный воспроизводящий пример или PoC;
  • ожидаемое и фактическое поведение.