Как я обновил свой проект в пентесте

Всем хай! Ранее я уже рассказывал про Pentester Dashboard — open source проект, который мы развиваем как локальное рабочее пространство для ведения пентеста.

Идея появилась из простой боли: во время тестирования данные быстро превращаются в хаос. Активы лежат в одном месте, эндпоинты — в другом, заметки — в третьем, а связи между ними приходится держать в голове.

Поэтому в дашборде я собрал единую структуру: Recon, Tech Stack, Features, Endpoints, Vulnerabilities, общий и локальный граф связей, Worklog, Backlog, а также импорт и экспорт проектов.

Подробнее про идею и предыдущие этапы писал здесь: ➥ https://setka.ru/posts/019c9fd6-fd07-7d90-a88c-cc416f471d4dhttps://setka.ru/posts/019d2fd1-0e73-73b3-84ed-4df21d50267b

━━━━━━━━━━ Как я полез в архитектуру ━━━━━━━━━━

До версии 1.1.0 backend был монолитом: один Express-сервис, общий слой работы с БД и общие контракты. Для небольшого проекта это удобно: всё рядом, быстро запускается и не требует сложной инфраструктуры.

Но по мере роста существующего и заложенного появились проблемы. Изменение одного блока затрагивает и общие файлы, что приводило к конфликтам/ошибкам и траты доп. времени на поиск ошибок. Recon, Endpoints, Features, Vulnerabilities и другие модули были логически разделены, но технически всё ещё жили внутри одного backend.

И я осознал, что дальше развивать проект в таком формате будет очень неприятно. Поэтому решил сделать одно из самых крупных обновлений за всё время — распилить монолит на микросервисы.

━━━━━━━━━━ Что получилось ━━━━━━━━━━

Теперь backend состоит из 12 сервисов: • Projects • Mission Status • Recon • Tech Stack • Features • Endpoints • Vulnerabilities • Worklog • Backlog • Graph • Local Graph • Migration

У каждого сервиса теперь свои: • бизнес-логика и API-контракты; • package.json и зависимости; • Dockerfile; • Swagger/OpenAPI; • PostgreSQL-схема и отдельный пользователь; • миграции БД.

При этом для пользователя ничего не усложнилось. Есть одна точка входа через Nginx Gateway, а весь проект по-прежнему поднимается одной командой

━━━━━━━━━━ Самое интересное — связи ━━━━━━━━━━

Раньше один модуль мог напрямую читать таблицы другого. Теперь каждый сервис владеет только своими данными, а взаимодействие идёт через Internal API.

Например, Endpoints Service больше не лезет в таблицу Recon, чтобы проверить Asset. Он спрашивает Recon Service через внутренний API.

Mission Status, Graph и Local Graph стали отдельными агрегаторами: они собирают данные из нужных сервисов и отдают frontend уже готовое представление.

Migration Service тоже больше не имеет полного доступа ко всей БД. Он стал оркестратором и собирает проект через API отдельных сервисов.

Из-за новой структуры изменился и формат миграции проектов. Для переноса экспортов из версии 1.0.5 я сделал Python-скрипт, который залил так же себе на гитхаб и указал его при релизе

━━━━━━━━━━ С чем столкнулся ━━━━━━━━━━

Микросервисы не делают проект автоматически проще.

Поддерживать один процесс объективно легче, чем Gateway, 12 сервисов, отдельные схемы БД, миграции и межсервисные запросы.

Но моя цель была другой: сделать каждый функциональный блок независимым и понятным для дальнейшего развития.

Теперь Recon можно развивать отдельно от Backlog, менять внутреннюю реализацию Vulnerabilities без переписывания всего backend, а при необходимости — полностью заменить отдельный сервис, сохранив его API-контракт.

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

━━━━━━━━━━ Что дальше ━━━━━━━━━━

В планах продолжать улучшать, развивать проект через уже заложенные задачи и заработать миллионы)

Сам проект: https://github.com/eZer-Net/pentester-dashboard

Буду рад обратной связи, идеям по развитию и звёздочке на GitHub⭐ ЗВЁЗДОЧКИ ЭТО ВАЖНО!)

#AppSec #Pentest #BugBounty #Hacking #OpenSource #IT #CyberSecurity #GitHub

Как я обновил свой проект в пентесте | Сетка — социальная сеть от hh.ru