Синхронизация с NetBox¶
DomainScope умеет двусторонне работать с NetBox:
- Импорт целей (NetBox → DomainScope): IP-адреса с указанным тегом становятся targets для сканирования
- Экспорт обнаруженных IP (DomainScope → NetBox): новые IP, найденные через discovery, добавляются в NetBox с тегом
- Экспорт доменов в NetBox DNS (опц., DomainScope → NetBox): обнаруженные домены публикуются как DNS-зоны и A/AAAA-записи в NetBox-DNS plugin
Включение¶
DOMAINSCOPE_NETBOX_ENABLED=true
DOMAINSCOPE_NETBOX_API_ENDPOINT=https://netbox.example.com
DOMAINSCOPE_NETBOX_API_TOKEN=<NetBox API token, формат nbt_...>
После рестарта DomainScope в discovery-цикле появится этап NetBox sync.
Импорт IP-целей (NetBox → DomainScope)¶
DomainScope тянет IP-адреса из NetBox по тегам и добавляет их к targets для port-scan / nuclei / openvas / tlsx.
Конфигурация¶
DOMAINSCOPE_NETBOX_ENABLED=true
DOMAINSCOPE_NETBOX_API_ENDPOINT=https://netbox.example.com
DOMAINSCOPE_NETBOX_API_TOKEN=nbt_xxxxxxxxxxxx
# Фильтрация — какие IP тянуть
DOMAINSCOPE_NETBOX_TAG=security-scope # один основной тег
DOMAINSCOPE_TRUSTED_IP_TAGS=internal,production # доп. теги для маркировки "наших"
Что попадает в targets¶
- Все
ipam.IPAddressс указанным тегом - Все
ipam.Prefixс тегом — разворачиваются до отдельных IP - Ограничение: только сети /20 и меньше (макс 4096 IP)
- Для большего диапазона — создайте дочерние prefix'ы с более узкими масками
Метаданные¶
В БД DomainScope для каждого IP сохраняются NetBox-теги, которые потом попадают в SARIF (как properties.netbox_tags). В Hub их видно в карточке находка'а.
Полезно: owner_team, environment, compliance_zone теги в NetBox автоматически переедут в Hub.
Экспорт обнаруженных IP (DomainScope → NetBox)¶
Когда DomainScope находит новый IP через subfinder + DNS, он опционально пишет его обратно в NetBox с маркер-тегом:
Что записывается¶
- IP-address (если уже существует — обновляется description)
- Tag
domainscope-crawler(для отличия от человеческих записей) description= «Discovered by DomainScope from» custom_fields.discovered_at= timestamp (если custom field существует)
Зачем это нужно¶
- NetBox становится единым inventory всего перимметра — и того, что описано вручную, и того, что DomainScope нашёл
- Админ может ревьюить crawler-теги и решать: подтвердить как
security-scope(попадёт в Hub-scope) или удалить
Отключение экспорта¶
Пустой тег — DomainScope не пишет в NetBox.
Экспорт доменов в NetBox DNS (NetBox-DNS plugin)¶
Опционально DomainScope публикует обнаруженные домены в NetBox через установленный DNS-plugin (направление DomainScope → NetBox, НЕ импорт). Семантика именно экспортная: флаг включает запись discovered-доменов в NetBox как DNS-зон и записей.
DOMAINSCOPE_NETBOX_DNS_EXPORT_ENABLED=true
# Обязателен при enabled=true: FQDN nameserver для SOA MNAME.
DOMAINSCOPE_NETBOX_DNS_EXPORT_SOA_MNAME=ns1.example.com
# Опц. — имя DNS view (default "default").
DOMAINSCOPE_NETBOX_DNS_EXPORT_VIEW=default
# Опц. — email SOA RNAME (default "hostmaster.<zone>", @ конвертируется в точку).
DOMAINSCOPE_NETBOX_DNS_EXPORT_SOA_RNAME=hostmaster@example.com
DomainScope (операция идемпотентна — повторный вызов не плодит дубли):
- Создаёт/находит DNS view и nameserver (из
SOA_MNAME) - Для каждой целевой зоны создаёт/находит Zone
- Для каждого обнаруженного домена записывает A/AAAA-записи по его IP
Требования:
DOMAINSCOPE_NETBOX_DNS_EXPORT_ENABLED=trueтребует включённой основной NetBox-интеграции (DOMAINSCOPE_NETBOX_ENABLED=true)DOMAINSCOPE_NETBOX_DNS_EXPORT_SOA_MNAMEобязателен при enabled — без него конфиг не пройдёт валидацию- NetBox-DNS plugin должен быть установлен; токен должен иметь write-permission на DNS-объекты
Если plugin не установлен или экспорт не нужен — оставьте false (default).
NetBox: что админ должен подготовить¶
1. API token¶
NetBox UI → Profile → API Tokens → Add:
- Description:
domainscope-rw - Permissions:
ipam.view_ipaddress,ipam.add_ipaddress,ipam.change_ipaddress(только если используете экспорт) - Allowed IPs: IP, с которого DomainScope ходит
- Expires: опц. +1 год
Token будет в формате nbt_xxxxxxxxxxxxxx.
2. Теги¶
Создайте теги:
security-scope— для IP, которые DomainScope должен сканироватьdomainscope-crawler— будет проставляться автоматическиproduction,staging,dmz, и т.п. — для классификации (опц.)
3. Custom fields (опционально)¶
Чтобы DomainScope писал метаданные при экспорте, заведите custom fields на ipam.IPAddress:
| Имя | Тип | Назначение |
|---|---|---|
discovered_at |
DateTime | Когда найден DomainScope'ом |
discovered_via |
Text | Какой scanner / источник |
last_seen |
DateTime | Последний раз видели в perimeter scan |
Порядок управления периметром¶
Типовая последовательность:
flowchart TD
A["1 — Администратор заводит в NetBox<br/>корневые DNS-зоны и базовые подсети<br/>с тегом security-scope"]
B["2 — DomainScope импортирует периметр из NetBox"]
C["3 — subfinder и резолвинг DNS"]
D["4 — обнаружены новые поддомены и адреса"]
E["5 — новые адреса пишутся обратно в NetBox<br/>с тегом domainscope-crawler"]
F["6 — сканирование целевых адресов:<br/>порты, nuclei и остальные движки"]
G["7 — результаты уходят в Hub:<br/>отчёты SARIF и предложения по периметру"]
H["8 — разбор в NetBox<br/>адреса с тегом domainscope-crawler — новинки:<br/>наш периметр → поставить security-scope,<br/>чужое или ложное → удалить либо исключить"]
I["9 — разбор предложений в Hub<br/>одобрить → запись входит в периметр и в отчётность,<br/>отклонить → запись помечена и синхронизацией не вернётся"]
A --> B --> C --> D --> E --> F --> G
G --> H
G --> I
H -->|"следующий цикл"| B
I -->|"следующий цикл"| B
classDef ops fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#111827
classDef auto fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#111827
class A,H,I ops
class B,C,D,E,F,G auto
Hub + DomainScope + NetBox: единая картина¶
| Слой | Зачем |
|---|---|
| NetBox | Источник правды по инфраструктуре. Кто чем владеет, какие IP/домены живут |
| DomainScope | Активная разведка. Что НА САМОМ ДЕЛЕ доступно снаружи |
| Hub | Разбор находок и работа по их устранению |
Идеальная схема: NetBox = inventory, DomainScope = recon, Hub = vuln-management. Каждый слой знает только свою часть.
Производительность¶
NetBox sync — лёгкая операция (тысячи объектов читаются за секунды). Запускается в составе discovery-цикла (TIME_LOOP_DISCOVERY=21600).
Если NetBox в той же сети — sync обычно < 5 секунд. Если NetBox в облаке через интернет — несколько десятков секунд.
Безопасность¶
- Read-only по умолчанию: если экспорт не нужен (
DOMAINSCOPE_NETBOX_CRAWLER_TAG=""), token может иметь толькоipam.view_*permissions - IP allowlist в NetBox: ограничьте, откуда DomainScope ходит к API
Проверка интеграции¶
1. Проверка чтения¶
# Из контейнера DomainScope
docker compose exec domain-scope curl -fs \
-H "Authorization: Token $DOMAINSCOPE_NETBOX_API_TOKEN" \
"$DOMAINSCOPE_NETBOX_API_ENDPOINT/api/ipam/ip-addresses/?tag=security-scope" | jq '.count'
Должно вернуть число IP с этим тегом.
2. Проверка sync в логах¶
Ожидаем:
INFO NetBox sync starting (endpoint=https://netbox.example.com)
INFO NetBox sync: pulled 142 IP addresses, 23 prefixes
INFO NetBox sync: pushed 5 new IPs as domainscope-crawler
INFO Discovery cycle finished
3. Проверка в NetBox¶
После цикла зайдите в NetBox UI → IPAM → IP Addresses → filter Tag: domainscope-crawler — должны увидеть новые записи.
Типовые проблемы¶
| Симптом | Что проверить |
|---|---|
401 Unauthorized от NetBox |
Токен неверный / истёк / не имеет permission |
403 Forbidden |
Token имеет IP allowlist — добавьте IP DomainScope |
| Sync долго (>30s) | NetBox медленно отвечает; проверьте load на NetBox-стороне |
| Crawler-теги не появляются | DOMAINSCOPE_NETBOX_CRAWLER_TAG не пустой, токен имеет write-permission |
| Дубликаты в NetBox | DomainScope создаёт через POST — если уже есть, обновляет. Дубль возможен если разные vrf |
Связанные документы¶
- Интеграция с NetBox — NetBox sync со стороны Hub
- Происхождение записей периметра — provenance в DomainScope