Документация / Руководство по установке / Подготовка
Сетевое взаимодействие
Пользователи, CI и внешние системы приходят на платформу через внешний прокси площадки по HTTPS. Внутри кластера компоненты общаются по HTTP и протоколам брокеров. Наружу платформа обращается к серверу лицензий, к системам контроля версий и к тем интеграциям, которые вы включили.
Порты компонентов
| Компонент | Порт | Протокол |
|---|---|---|
Фронт Core (sf-core-front) |
80 | HTTP |
Core web: интерфейс и API (sf-core-back, MODE=web) |
8000 | HTTP |
Core: приём отчётов (sf-core-back, MODE=importer) |
8001 | HTTP |
Фронт Radar (sf-radar-front) |
8080 | HTTP |
Radar back (sf-radar-back) |
8090 | HTTP |
| RabbitMQ Core, RabbitMQ Radar | 5672 | AMQP |
| Redis Radar | 6379 | Redis |
| PostgreSQL (общий адрес HAProxy) | 5432 | PostgreSQL |
| NFS на служебной ВМ | 2049 | NFS |
Входящие потоки
| Откуда | Куда | Порт | Протокол | Зачем |
|---|---|---|---|---|
| Браузеры пользователей | внешний прокси → Core, Radar | 443 | HTTPS | интерфейсы и API |
| CI-раннеры: Security checker, загрузка отчётов | внешний прокси → Core | 443 | HTTPS, Authorization: Token |
POST /, POST /, чтение настроек, ассетов, находок и аудитов - см. Security checker |
| GitLab, GitHub, Bitbucket, Azure Repos | внешний прокси → Core | 443 | HTTPS | вебхуки / - см. Системы контроля версий |
| Реестр контейнеров GitLab | внешний прокси → Core | 443 | HTTPS | вебхук / |
| Jira | внешний прокси → Core | 443 | HTTPS | вебхук / - см. Jira |
Если вебхуки и CI не нужны, достаточно доступа пользователей.
Потоки внутри площадки
| Откуда | Куда | Порт | Протокол | Зачем |
|---|---|---|---|---|
| Внешний прокси | ingress-nginx | по договорённости с площадкой | HTTP | TLS снимается на прокси |
| ingress-nginx | фронт Core; фронт Radar | 80; 8080 | HTTP | маршрут по имени хоста |
| Фронт Core | Core web; приём отчётов | 8000; 8001 | HTTP | /api/v1/, /admin/, /oauth2/callback - на 8000; /api/v1/scan/import/ - на 8001 |
| Фронт Radar | Radar back | 8090 | HTTP | /api/v1/, /admin/ |
Процессы sf-core-back, sf-core-db-helper |
PostgreSQL, база Core | 5432 | PostgreSQL | данные Core |
Процессы sf-core-back, sf-core-importer, sf-core-db-helper, sf-core-jira-helper |
RabbitMQ Core | 5672 | AMQP | очереди задач и тела отчётов |
| Radar back | PostgreSQL, база Radar | 5432 | PostgreSQL | джобы, пайплайны, логи завершённых джоб |
| Radar back, воркеры Radar | RabbitMQ Radar | 5672 | AMQP | pipeline_queue, utils_queue |
| Radar back, воркер сканирования | Redis | 6379 | Redis | живые логи джоб |
| Воркеры Radar | Radar back | 8090 | HTTP, Authorization: Bearer <токен Radar> |
статусы пайплайнов и джоб, логи, настройки очистки. Адрес - переменная AUDITOR_HOST |
| Core web, Core worker | Radar back | 8090 или адрес Radar | HTTP(S), Authorization: Bearer <токен Radar> |
запуск пайплайнов пачками по 100 ассетов, проверка связи, просмотр джоб и пайплайнов из Core |
| Воркер сканирования | Core, "Внутренний URL приложения" | 80 или 443 | HTTP(S), Authorization: Token |
отчёт сканера POST api/v1/scan/import/, ответ 202, таймаут 20 с |
| Docker в поде воркера | реестр образов площадки | порт реестра | HTTPS или HTTP | образы сканеров и служебный образ UTILITY_IMAGE |
| Узлы app | служебная ВМ | 2049 | NFS | файлы Core (media) |
Воркеры Radar к PostgreSQL не подключаются: всё, что им нужно, они получают через API Radar back.
Исходящие потоки
| Откуда | Куда | Порт | Протокол | Зачем | Нужно, когда |
|---|---|---|---|---|---|
| Core web, Core worker | securityflow.ru |
443 | HTTPS | активация POST / и сверка лицензии POST /: по расписанию раз в 300 с и при работе пользователей, не чаще раза в 60 с на процесс |
всегда |
| Контейнеры джоб в узлах scan | системы контроля версий | 22 или 443 | SSH или HTTPS | клонирование репозитория джобой Code Downloader. Порт зависит от адреса репозитория | сканирование кода |
| Контейнеры джоб в узлах scan | gitlab.com, github.com |
22 | SSH | Code Downloader при каждом запуске заполняет known_hosts командой ssh-keyscan для этих двух хостов |
всегда, если команда джобы не изменена - см. Закрытый контур |
| Контейнеры джоб в узлах scan | цели сканирования: домены, хосты, облачные API | зависит от джобы | зависит от джобы | DAST, проверка периметра, облачные проверки | если такие джобы используются |
| Core web, Core worker | API GitLab, GitHub, Bitbucket, Azure Repos | 443 | HTTPS | импорт репозиториев, проверка интеграции; комментарии и статусы quality gate - только GitLab, GitHub, Bitbucket | если настроена интеграция с VCS |
| Core worker | API реестра контейнеров GitLab | 443 | HTTPS | список новых тегов образов | если настроена интеграция с реестром |
sf-core-jira-helper |
Jira | 443 | HTTPS | синхронизация задач, проверка учётных данных, справочники проекта. Core web обращается к Jira только через очередь Jira-помощника | если настроена интеграция с Jira |
| Core worker | URL уведомлений | из настройки | HTTP(S) POST JSON | уведомления | если настроены уведомления |
| Core web | OIDC-провайдер | 443 | HTTPS | /., обмен кода на токен |
если настроен вход через SSO |
| Команда SecurityFlow | kube-apiserver; реестр образов площадки | 6443; порт реестра | HTTPS | установка и обновления | на время работ |
| Команда SecurityFlow | хосты площадки | 22 | SSH | первичная установка | на время установки |
Для узлов scan исходящий трафик ограничивают системами контроля версий, реестром образов и Core. Если используются DAST и проверки периметра, добавьте в разрешения цели сканирования.
Закрытый контур
Кроме образов сканеров (о них - ниже), код платформы обращается во внешнюю сеть в трёх местах. Каждое закрывается настройкой.
| Обращение | Откуда | Как закрыть |
|---|---|---|
securityflow.ru:443 |
Core | Нужно для активации. Если связь пропала после активации, Core продолжает работать до окончания срока лицензии: срок проверяется локально по подписи ключа. Сверка без ответа сервера лицензию не снимает |
Служебный образ alpine с Docker Hub |
воркер сканирования | Задайте переменную UTILITY_IMAGE воркера: копия alpine во внутреннем реестре. Воркер скачивает этот образ при чтении каждого отчёта, через него же читает артефакты и копирует файлы между томами |
ssh-keyscan gitlab.com и github.com |
джоба Code Downloader | Измените "Команду запуска" джобы в Radar: уберите эти строки или замените хосты на свою систему контроля версий. Меняйте джобу после создания токена Radar: до этого Radar при старте пересоздаёт джобы из каталога |
Образы сканеров берутся только из реестра, указанного в джобе. Укажите в джобах образы из реестра площадки - см. Первичная настройка.
Отдельные сканеры сами обращаются к внешним сервисам. По командам джоб из каталога Radar:
| Джоба | Внешнее обращение |
|---|---|
| Vulners Trivy | ставит плагин с github.com при запуске; использует API Vulners с ключом VULNERS_API_KEY |
| Snyk Go, Snyk Iac, Snyk Nodejs, Snyk Python | сервис Snyk с токеном SNYK_TOKEN |
| Prowler AWS | API AWS |
| AI SAST | команда по умолчанию запускает локальную модель; варианты с внешними LLM-провайдерами есть в команде закомментированными |
| Semgrep | набор правил задаёт переменная SEC_SEMGREP_CONFIG, по умолчанию p/default - набор из реестра правил Semgrep, в образе сканера правил нет. Для закрытого контура укажите путь к локальным правилам |
| Trivy Code Dependencies, Trivy Image Dependencies | Trivy скачивает базу уязвимостей при запуске, если она не подготовлена заранее |
| Nuclei Scan, Nuclei Scan CVE | шаблоны nuclei-templates; если их нет в образе, Nuclei скачивает их при запуске |
Проверьте источник правил и баз для каждого сканера, который вы включаете в последовательности.
Сервер лицензий и белый список
На сервере лицензий может быть включён белый список адресов. Тогда в нём должен быть внешний адрес, с которого кластер выходит в интернет: иначе сервер отвечает 403 и активация не проходит. Адрес сообщите команде SecurityFlow.
DNS
| Имя | Где разрешается | Что это |
|---|---|---|
Имена Core и Radar, например core.example.ru, radar.example.ru |
DNS площадки | адреса на внешнем прокси |
| Сервисы интерфейса и API и приёма отчётов Core | в пространстве Core | фронт Core передаёт на них запросы API на порт 8000 и отчёты на порт 8001. Имена задаются при установке - см. Маршрутизация запросов |
| Сервис Radar back | в пространстве Radar | фронт Radar передаёт на него запросы API на порт 8090; воркеры обращаются к нему по адресу из AUDITOR_HOST |
| "Внутренний URL приложения" Core | из пространства Radar | адрес, на который воркер отправляет отчёты |
| Системы контроля версий, реестр образов, цели сканирования | из узлов scan | клонирование, образы, сканирование |
securityflow.ru |
из кластера | сервер лицензий |
TLS
- TLS терминирует внешний прокси площадки. Внутри кластера трафик идёт по HTTP.
- Переменная
DOMAINCore должна начинаться сhttps://: тогда cookie получают признак Secure и адрес попадает в доверенные для CSRF. Подробнее - Безопасная конфигурация. - Core проверяет сертификат Radar, если в настройках Radar в Core включено "Проверять SSL".
- Воркер проверяет сертификат Core при отправке отчёта, если не задан
HTTP_SSL_SKIP_VERIFY.
Проверка связности
Доступ к серверу лицензий из кластера. Ответ 200 и PEM-ключ - доступ есть; 403 - адрес кластера не в белом списке.
kubectl -n securityflow-core run net-check --rm -it --restart=Never \
--image=registry.example.ru/<образ с curl> -- \
curl -sS -o /dev/null -w '%{http_code}\n' https://securityflow.ru/api/public-key
Доступ к Core и Radar через прокси:
curl -sS -o /dev/null -w '%{http_code}\n' https://core.example.ru/admin/login/
curl -sS https://radar.example.ru/api/v1/health-check/
Ожидаемый результат: 200 и {"is_healthy":true}.
Связь Core с Radar проверяется в интерфейсе Core: "Radar" → "Настройки" → "Статус подключения". Связь воркеров с Radar back - на странице Мониторинг и журналы.