Каждый узел HopeDC (v164 и новее) ведёт журнал безопасности: входы по Kerberos, LDAP, NTLM и в панель (успешные и неудачные), блокировки и разблокировки учётных записей, смену и сброс паролей, изменения каталога и групп, действия администраторов в панели и изменения настроек аудита. Коды событий совпадают с журналом безопасности Windows (4624, 4625, 4740 …), поэтому правила корреляции SIEM, написанные для Active Directory, применимы без переделки.
События можно смотреть в панели, выгружать в CSV/JSON и отправлять в SIEM по syslog. Отдельно узел отдаёт метрики в формате Prometheus — для Prometheus, VictoriaMetrics, Grafana и Zabbix (готовый шаблон).
| Код | Событие | Протокол | Когда |
|---|---|---|---|
| 4768 | Выдан / отказ в билете Kerberos (TGT) | kerberos | AS‑REQ: билет выдан; отказ — учётка не найдена, отключена, заблокирована, пароль истёк, вход с этого компьютера запрещён |
| 4771 | Неверный пароль (Kerberos) | kerberos | Предварительная проверка не прошла (KDC_ERR_PREAUTH_FAILED) |
| 4769 | Выдан служебный билет Kerberos | kerberos | TGS‑REQ — по умолчанию не пишется (очень много событий), включается в настройках |
| 4624 / 4625 | Успешный / неудачный вход | ldap, panel | LDAP bind (простой, SASL GSSAPI/GSS‑SPNEGO, EXTERNAL); вход в панель. Причина неудачи — в поле «Подробности» (неверный пароль, учётка отключена или заблокирована, пароль истёк …) |
| 4776 | Проверка учётных данных NTLM | ntlm | Вход по NTLM (SMB, Windows): подтверждены / отклонены с причиной |
| 4740 | Учётная запись заблокирована | policy | Достигнут порог неверных паролей политики домена (число попыток, порог, длительность) |
| 4767 | Учётная запись разблокирована | panel | Снятие блокировки администратором |
| 4723 / 4724 | Смена пароля пользователем / сброс пароля | kpasswd, ldap | Смена по Kerberos (kpasswd, Ctrl+Alt+Del) и по LDAP (unicodePwd); отказы — нет прав, пароль не соответствует политике |
| 5136 / 5137 / 5141 | Объект каталога изменён / создан / удалён | ldap | Запись по LDAP: кто, какой объект, имена изменённых атрибутов (значения не пишутся); отказы в доступе. С v165 5141 с протоколом dns — удаление устаревшей динамической записи DNS очисткой |
| 4728 / 4729 | Участник добавлен в группу / удалён из группы | ldap | Изменение member группы по LDAP |
| 9100 | Изменение через панель | panel | Любой изменяющий запрос администратора к API панели: метод, раздел, HTTP‑код и текст ошибки |
| 9101 | Отказ в доступе к разделу панели | panel | Не хватает прав роли или раздел вне области доменного администратора |
| 9110 | Второй фактор (MFA) привязан / отказ в привязке | portal | v184: пользователь привязал приложение-аутентификатор на портале /password или ввёл неверный код при привязке |
| 4741 | Создана групповая управляемая учётная запись службы (gMSA) | panel | Создание gMSA в панели: кто создал, имя учётной записи |
| 4713 | Изменены настройки входа по смарт‑картам (PKINIT) | panel | Включение, выключение и перевыпуск сертификата KDC для PKINIT, добавление и удаление доверенных ЦС — кто и что изменил |
| 4719 | Изменены настройки журнала безопасности | panel | Кто и что изменил (включение/выключение журнала, SIEM, срок хранения, состав событий) |
Поля события: время (мс), код, категория (logon, account, directory, panel, audit), результат (success/failure), протокол, кто (учётка или DN вошедшего), объект (DN), IP клиента, домен, узел, подробности.
Журнал узла — файлы <каталог данных>/seclog/ГГГГ-ММ-ДД.jsonl (по строке JSON на событие, права 0600, каталог 0700). Файлы старше срока хранения (по умолчанию 90 дней) удаляются раз в час. Каждый узел кластера ведёт свой журнал — для сводной картины используйте SIEM.
Вкладка «События»: быстрые фильтры (все события, неудачные входы, блокировки, пароли, группы, изменения каталога, действия в панели, все входы), период (час, сутки, 7 и 30 дней, всё время), поиск по пользователю, объекту, IP и тексту (несколько слов — все должны встретиться), обновление каждые 10 секунд. Новые события — сверху, по 200 строк («Показать ещё»). Строка открывает карточку события. Кнопки CSV (для Excel, разделитель «;») и JSON (по строке на событие) выгружают события по текущему фильтру, до 100 000.
API: GET /api/security/events?from=&to=&ids=4625,4771&outcome=failure&cat=logon&proto=ldap&q=alice&limit=200 (время — мс UNIX), выгрузка — /api/security/events/export?…&format=csv|jsonl.
Вкладка «Настройки и SIEM» → «Журнал на узле»:
Счётчики «Записано событий» и «Потеряно (переполнение)» — с момента запуска службы. Настройки узла — файл seclog.json в каталоге данных (зашифрован, как остальные настройки).
«Отправлять события в SIEM»: сервер, порт, протокол, формат и facility. Каждый узел отправляет свои события; настройте одинаково на всех узлах кластера.
| Параметр | Значения |
|---|---|
| Протокол | UDP (514, без гарантии доставки), TCP (514/601, строка на событие), TLS (6514; сервер проверяется по сертификату ЦС SIEM, вставленному в настройки, и по имени из поля «Сервер») |
| Формат | CEF — MaxPatrol SIEM, KUMA, ArcSight, Splunk, Wazuh, QRadar; JSON — Elastic, Graylog, OpenSearch, Loki |
| Facility | authpriv (10, по умолчанию), auth (4), log audit (13), local0–local7 (16–23). Важность syslog: успех — informational, неудача — warning |
| Не отправлять успешные входы | Только неудачи, блокировки и изменения — меньше нагрузка на SIEM; в журнале узла успешные входы остаются |
Обёртка — syslog RFC 5424: <PRI>1 ВРЕМЯ УЗЕЛ hopedc - КОД - СООБЩЕНИЕ. Пример CEF:
<84>1 2026-10-28T16:58:27.845+03:00 dc01 hopedc - 4625 - CEF:0|HopeDC|HopeDC Domain Controller|164|4625|Неудачный вход|5|rt=1793195907845 outcome=failure app=ldap cat=logon suser=alice@corp.local src=10.10.0.15 dvchost=dc01 msg=invalid credentials
Поля CEF: rt — время (мс), outcome, app — протокол, cat — категория, suser — кто, duser — объект (DN), src — IP клиента, dvchost — узел HopeDC, cs1 (метка domain) — домен, msg — подробности. Важность CEF: блокировка — 7, неудачи — 5, сброс пароля, изменение групп и настроек аудита — 5, остальное — 3.
Пример JSON (после заголовка syslog): {"id":4740,"name":"Учётная запись заблокирована","outcome":"success","cat":"account","proto":"policy","user":"alice","target":"CN=alice,CN=Users,DC=corp,DC=local","domain":"corp.local","node":"dc01","msg":"5 неверных попыток (порог 5), блокировка 30 мин","ts":1793195907845}
«Проверить связь с SIEM» отправляет тестовое событие 9199 с текущими (несохранёнными) настройками и показывает ошибку подключения или проверки сертификата. Статистика — отправлено, ошибок, не доставлено, последняя ошибка. При обрыве TCP/TLS узел переподключается не чаще раза в 10 секунд; события, которые за это время не удалось отправить, остаются только в журнале узла (счётчик «Не доставлено»).
Приём на rsyslog (пример для проверки):
module(load="imtcp")
input(type="imtcp" port="514" ruleset="hopedc")
ruleset(name="hopedc") { action(type="omfile" file="/var/log/hopedc-security.log") }
Вкладка «Мониторинг (Prometheus, Zabbix)»: «Отдавать метрики» — узел отвечает на GET https://<узел>:9444/metrics (и на порту панели 9443). Доступ — заголовок Authorization: Bearer <токен>; токен выпускается в панели («Новый токен» — прежний перестаёт действовать). Можно ограничить адреса сборщиков (IP или подсеть IPv4). Список «Сетевой доступ → Панель» на /metrics не действует — у метрик свой токен и свой список. Выключено — ответ 404, неверный токен или адрес — 401. Настройки узла — metrics.json.
| Метрика | Тип | Что показывает |
|---|---|---|
hopedc_build_info{release}, hopedc_uptime_seconds | gauge | Версия, время работы службы |
hopedc_auth_total{protocol,result} | counter | Проверки учётных данных: kerberos (TGT), kerberos_tgs, ldap, ntlm, panel; success/failure |
hopedc_account_lockouts_total, hopedc_password_changes_total{result}, hopedc_directory_changes_total{result} | counter | Блокировки, смены паролей, изменения каталога по LDAP |
hopedc_ldap_operations_total{op}, hopedc_ldap_connections_total | counter | Операции LDAP (bind, search, add, modify, delete, compare, extended), подключения |
hopedc_dns_queries_total, hopedc_api_requests_total, hopedc_linux_agent_reports_total | counter | Запросы DNS, API панели, отчёты агентов Linux |
hopedc_seclog_events_total, …_dropped_total, …_write_errors_total | counter | Журнал безопасности: записано, потеряно, ошибки записи |
hopedc_siem_sent_total, …_errors_total, …_dropped_total | counter | Отправка в SIEM |
hopedc_directory_objects{domain,type}, hopedc_users_locked{domain}, hopedc_users_disabled{domain} | gauge | Пользователи, компьютеры, группы; заблокированные и отключённые учётки (по каждому домену, в том числе нули) |
hopedc_process_resident_memory_bytes, hopedc_process_open_fds, hopedc_data_disk_free_bytes, hopedc_data_disk_size_bytes | gauge | Память и дескрипторы процесса, место на диске каталога данных |
Счётчики — с момента запуска службы (как принято в Prometheus: используйте rate()). Пример настройки Prometheus — на вкладке «Мониторинг» (кнопка «Копировать»):
scrape_configs:
- job_name: hopedc
scheme: https
tls_config: { ca_file: /etc/prometheus/hopedc-ca.pem } # ЦС сертификата узла (или insecure_skip_verify: true)
authorization: { type: Bearer, credentials: hdcm_… }
static_configs:
- targets: ['dc01.corp.local:9444', 'dc02.corp.local:9444']
Полезные запросы: sum by (protocol) (rate(hopedc_auth_total{result="failure"}[5m])) — неудачные входы в секунду; increase(hopedc_account_lockouts_total[1h]) — блокировки за час.
«Скачать шаблон Zabbix» — файл zabbix_template_hopedc.yaml (формат Zabbix 6.0; проверен импортом в Zabbix 7.0). Импорт: «Настройка» (в Zabbix 7 — «Сбор данных») → «Шаблоны» → «Импорт». Затем создайте узел (хост) Zabbix на каждый узел HopeDC, привяжите шаблон «HopeDC by HTTP» и задайте макросы:
| Макрос | По умолчанию | Назначение |
|---|---|---|
{$HOPEDC.URL} | https://dc01.example.local:9444/metrics | Адрес метрик узла |
{$HOPEDC.TOKEN} | — (секретный текст) | Токен мониторинга из панели |
{$HOPEDC.INTERVAL} | 1m | Период опроса |
{$HOPEDC.AUTH.FAIL.MAX} | 5 | Порог неудачных входов в секунду (5 минут подряд) |
{$HOPEDC.LOCKOUT.MAX} | 10 | Порог блокировок учётных записей за 10 минут |
{$HOPEDC.DISK.FREE.MIN} | 2G | Минимум свободного места на диске данных |
Один HTTP‑элемент получает метрики, 26 зависимых элементов разбирают их (предобработка «Шаблон Prometheus», скорость в секунду). Триггеры (12): служба перезапущена; нет данных метрик 5 минут; версия изменилась; много неудачных входов (Kerberos, LDAP, NTLM, панель — отдельно); массовые блокировки учётных записей; журнал безопасности теряет события; ошибки записи журнала; SIEM не принимает события; мало места на диске данных. Проверка сертификата HTTPS в шаблоне выключена (сертификат узла может быть самоподписанным); если сертификат узла выпущен доверенным для Zabbix ЦС, включите проверку в элементе «получение метрик».
| Действие | Право роли |
|---|---|
| Просмотр и выгрузка событий, просмотр настроек журнала | «Журнал безопасности: просмотр» (seclog.view) |
| Изменение настроек журнала и SIEM, проверка связи, токен и настройки метрик, шаблон Zabbix | «Журнал безопасности: изменение» (seclog.edit) |
v184: у раздела своё право в матрице ролей (раньше — права «Логирование»); роли с правами «Логирование» получили его при обновлении автоматически. Доменно‑ограниченным администраторам раздел недоступен: журнал — общий для всех доменов узла.
hopedc_seclog_dropped_total). На стенде 3 200 попыток входа по LDAP за 3 секунды (8 потоков) записаны и отправлены в SIEM без потерь.| Симптом | Причина и решение |
|---|---|
«Проверить связь»: TLS: invalid peer certificate: UnknownIssuer | Вставлен не тот ЦС или у сервера SIEM цепочка от другого ЦС — вставьте корневой ЦС, которым подписан сертификат сборщика. |
«Проверить связь»: certificate not valid for name … | Имя в поле «Сервер» не совпадает с именем в сертификате SIEM — укажите DNS‑имя из сертификата. |
«…: нет ответа за 5 с» / Connection refused | Сборщик не слушает порт или его закрывает межсетевой экран (Документ 4, раздел 7). |
| UDP «отправлено», но в SIEM пусто | UDP без подтверждения: проверьте приём на стороне SIEM (порт, фильтр по источнику). |
| Растёт «Потеряно (переполнение)» | Событий больше, чем успевает записать диск: выключите служебные билеты (4769) и, при необходимости, успешные входы; проверьте диск. |
/metrics отвечает 404 | Метрики выключены на этом узле — включите на вкладке «Мониторинг» (настройка своя у каждого узла). |
/metrics отвечает 401 | Неверный токен (выпущен новый) или адрес сборщика не в списке разрешённых. |
| Zabbix: элементы «Не поддерживается» | Проверьте макросы {$HOPEDC.URL} и {$HOPEDC.TOKEN} и ответ элемента «получение метрик» (Последние данные). |