Приложение Б. Шаблоны конфигурационных файлов

Приложение Б. Шаблоны и примеры конфигурационных файлов

В данном приложении приведены детальные примеры конфигурационных файлов компонентов Alertix-NTA. Примеры содержат типовые значения параметров для продуктивной эксплуатации и могут использоваться как основа для настройки системы.

Все конфигурационные файлы имеют формат JSON (UTF-8) и располагаются в директории /opt/alertixnta/config/. После установки из deb/rpm-пакетов файлы создаются автоматически со значениями по умолчанию; файл ipc.json пакет не содержит — его записывает служба sensor-watcher при запуске, если файла нет.

Значения IP-адресов, портов, токенов, UUID и путей в примерах необходимо заменить на актуальные для вашей инфраструктуры.

1. ethercap.json — Служба захвата трафика (sensor-ethercap)

Путь: /opt/alertixnta/config/ethercap.json. Служба: sensor-ethercap — захват сетевого трафика с сетевых интерфейсов в реальном времени.

Структура файла

{
  version, cpuSet,
  controlSection {
    flowCount, flowBuffCount, flowBuffSize,
    ipSessions, tcpSessions, udpSessions, ip4Fragments,
    ndpiEngine, nativeParsers, luaParsers,
    trafficRecordSessions, captureMode, controlIf,
    tcpLimits { init, soft, hard },
    hugePages { enabled, count, mount },
    capture { mode, cpuSet, hugePages { enabled, count, mount } }
  },
  networkAdapters [ ... ],
  nativeParsers [ { protocol, enabled, processData }, ... ],
  luaParsers [ { script, enabled }, ... ],
  recordingRules [ { script, enabled }, ... ],
  filters [ { name, groups [ { enabled, name, rules [ ... ] } ] } ],
  debug { dumps { log, dump }, memoryTrack { runtime, lua } }
}

Ключевые параметры

Таблица Б.1 — Параметры ethercap.json

ПараметрТипУмолчаниеОписание

version

string

"6.2"

Версия формата конфигурации

cpuSet

string

"5-7"

CPU affinity (формат Linux cpuset) — ядра для основного потока службы, потоков обработки пакетов (сборка сессий и разбор протоколов; число потоков задаёт flowCount) и потоков служебных таймеров (статистика, контроль ресурсов, журналы, такт подсистемы обнаружения аномалий). Потоки чтения пакетов с сетевых интерфейсов закрепляются отдельно — параметром controlSection.capture.cpuSet. Рекомендуется выделять ядра, не используемые службами sensor-analyser и sensor-transfer

controlSection.flowCount

int

4

Количество параллельных потоков захвата. Увеличивайте при работе с несколькими интерфейсами или высокой скорости трафика

controlSection.flowBuffCount

int

1024

Количество буферов на поток. Общий объём памяти = flowCount * flowBuffCount * flowBuffSize

controlSection.flowBuffSize

int

65536

Размер одного буфера (байт). 64 КБ покрывает Jumbo Frames

controlSection.ipSessions

bool

true

Отслеживание IP-сессий для корреляции пакетов

controlSection.tcpSessions

bool

true

Сборка TCP-потоков. Необходимо для анализа HTTP, SMTP, FTP и других TCP-протоколов. Отключение резко снижает качество анализа

controlSection.udpSessions

bool

true

Группировка UDP-пакетов в логические сессии (DNS, SIP, DHCP)

controlSection.ip4Fragments

bool

true

Реассемблирование фрагментированных IPv4-датаграмм

controlSection.ndpiEngine

bool

false

Классификация через nDPI. Увеличивает нагрузку на CPU, улучшает детектирование шифрованных протоколов

controlSection.nativeParsers

bool

true

Включение встроенных парсеров протоколов (36 парсеров)

controlSection.luaParsers

bool

true

Включение Lua-парсеров сессий (19 скриптов: 18 парсеров протоколов и сигнатурный движок p2-lwdpi.lua)

controlSection.trafficRecordSessions

bool

false

Запись сессий трафика на диск по правилам из recordingRules[]

controlSection.captureMode

string

"afpkt"

Режим захвата: "afpkt" (AF_PACKET, универсальный), "afxdp" (AF_XDP, ускоренный без обхода стека) или "dpdk" (DPDK, максимальная производительность; только в пакетах с поддержкой DPDK, требует hugepages и привязки интерфейсов к DPDK-драйверу). Нераспознанное значение приводит к режиму "afpkt"

controlSection.controlIf

string

""

Управляющий интерфейс. Пустая строка — управление только через IPC

controlSection.tcpLimits.init

int

1500000

Порог числа полуоткрытых TCP-сессий, при достижении которого новые сессии учитываются без разбора протоколов

controlSection.tcpLimits.soft

int

6000000

Порог числа TCP-сессий, при достижении которого новые сессии учитываются без разбора протоколов

controlSection.tcpLimits.hard

int

9000000

Порог числа TCP-сессий, при достижении которого новые TCP-сессии не отслеживаются до освобождения ресурсов. Пороги tcpLimits действуют на экземпляр службы и делятся поровну между потоками захвата (flowCount); изменение порогов применяется командой systemctl reload

controlSection.hugePages.enabled

bool

—

Выделение hugepages при запуске службы sensor-ipc. Объект в поставляемом файле отсутствует; добавляется для режимов DPDK и AF_XDP

controlSection.hugePages.count

int

—

Число страниц по 2 МиБ, выделяемых на каждом узле NUMA

controlSection.hugePages.mount

string

"/home/alertixnta/huge"

Каталог монтирования hugepages

controlSection.capture.cpuSet

string

—

Ядра процессора (формат Linux cpuset) для потоков чтения пакетов с сетевых интерфейсов в режимах AF_PACKET, AF_XDP и DPDK (DPDK — в пакетах с поддержкой DPDK). Служба запускает flowCount потоков чтения и закрепляет их за ядрами набора по кругу. Параметр в поставляемом файле отсутствует: при первом запуске служба записывает в него диапазон всех ядер процессора, начиная с ядра 0; значение, заданное с ошибкой, служба заменяет диапазоном из flowCount ядер, начиная с ядра 0

Объект capture. Поставляемый файл задаёт режим захвата и hugepages ключами controlSection.captureMode и controlSection.hugePages. При первом запуске служба sensor-ethercap переносит эти значения в объект controlSection.capture (ключи mode, cpuSet и hugePages) и сохраняет файл; ключи captureMode и hugePages блока controlSection в сохранённом файле отсутствуют. Если объект capture в файле есть, служба читает режим захвата, ядра потоков чтения и hugepages только из него, поэтому после первого запуска изменяйте эти параметры внутри controlSection.capture.

Нативные парсеры (nativeParsers[]) — массив параметров 36 встроенных парсеров. Каждый элемент содержит protocol (идентификатор), enabled (вкл/выкл) и processData (разбирать payload или только фиксировать наличие протокола). Идентификаторы встроенных парсеров:

dc, dcerpc, dns, ftp, http, http2, icap, icmp, icq, imap4, irc, kafka, kerberos, ldap, lotus, mra, msn, mysql, ntp, oracle, pop3, postgres, quic, skype, smb, smtp, socks, ssh, ssl, stun, tds, torrent, websocket, xmpp, yahoo, sip2.

Массив не ограничивает набор парсеров, а переопределяет их параметры: парсер, для которого в массиве нет записи, работает с параметрами enabled: true и processData: true. Поставляемый ethercap.json перечисляет 33 парсера; записей для quic, ssh и stun в нём нет, и эти парсеры включены по умолчанию. Чтобы выключить парсер, добавьте для него запись с "enabled": false; выключить все встроенные парсеры сразу можно параметром controlSection.nativeParsers: false.

Lua-парсеры (luaParsers[]) — 19 скриптов каталога /opt/alertixnta/scripts/eth-sessions/: 18 парсеров и детекторов протоколов — MTProto (Telegram), SSH, DCE/RPC, DNS, DRDA, ФПСУ-IP (клиентский VPN поверх UDP), ICMP, IPsec, Kafka, Kerberos, LDAP, MS-TDS, MySQL, OpenVPN, Oracle, PostgreSQL, PPTP, WireGuard — и сигнатурный движок lwDPI (p2-lwdpi.lua). В базовой поставке протокол gSocket распознаётся движком lwDPI; отдельный скрипт p2-gsocket.lua поставляется только в OEM DPI редакции для NDR. Запись массива содержит ключи script (имя файла в каталоге eth-sessions) и enabled.

Синхронизация списка со скриптами каталога. При каждом запуске служба sensor-ethercap (и sensor-pcap для своего файла pcap.json) приводит список luaParsers к содержимому каталога /opt/alertixnta/scripts/eth-sessions/: скрипт, для которого нет записи, добавляется в список (p2-lwdpi.lua — включённым, остальные — выключенными), а записи, для которых нет файла, удаляются; изменённая конфигурация сохраняется в файл. После первого запуска в поставляемой конфигурации включены p2-lwdpi.lua, p2-mtproto.lua и p2-ssh.lua, остальные 16 скриптов выключены и включаются параметром "enabled": true. Скрипты опрашиваются в порядке записей списка; чтобы движок lwDPI проверял сессию после выделенных парсеров, переместите запись p2-lwdpi.lua в конец списка.

Пример: типовая продуктивная конфигурация

{
  "version": "6.2",
  "cpuSet": "5-7",
  "controlSection": {
    "flowCount": 4,
    "flowBuffCount": 1024,
    "flowBuffSize": 65536,
    "ipSessions": true,
    "tcpSessions": true,
    "udpSessions": true,
    "ip4Fragments": true,
    "ndpiEngine": false,
    "nativeParsers": true,
    "luaParsers": true,
    "trafficRecordSessions": false,
    "captureMode": "afpkt",
    "controlIf": "",
    "tcpLimits": { "init": 1500000, "soft": 6000000, "hard": 9000000 }
  },
  "networkAdapters": [],
  "nativeParsers": [
    { "protocol": "dc", "enabled": true, "processData": true },
    { "protocol": "dcerpc", "enabled": true, "processData": true },
    { "protocol": "dns", "enabled": true, "processData": true },
    { "protocol": "ftp", "enabled": true, "processData": true },
    { "protocol": "http", "enabled": true, "processData": true },
    { "protocol": "http2", "enabled": true, "processData": true },
    { "protocol": "icap", "enabled": true, "processData": true },
    { "protocol": "icmp", "enabled": true, "processData": true },
    { "protocol": "icq", "enabled": true, "processData": true },
    { "protocol": "imap4", "enabled": true, "processData": true },
    { "protocol": "irc", "enabled": true, "processData": true },
    { "protocol": "ldap", "enabled": true, "processData": true },
    { "protocol": "lotus", "enabled": true, "processData": true },
    { "protocol": "mra", "enabled": true, "processData": true },
    { "protocol": "msn", "enabled": true, "processData": true },
    { "protocol": "ntp", "enabled": true, "processData": true },
    { "protocol": "pop3", "enabled": true, "processData": true },
    { "protocol": "skype", "enabled": true, "processData": true },
    { "protocol": "smb", "enabled": true, "processData": true },
    { "protocol": "smtp", "enabled": true, "processData": true },
    { "protocol": "socks", "enabled": true, "processData": true },
    { "protocol": "ssl", "enabled": true, "processData": true },
    { "protocol": "torrent", "enabled": true, "processData": true },
    { "protocol": "websocket", "enabled": true, "processData": true },
    { "protocol": "xmpp", "enabled": true, "processData": true },
    { "protocol": "yahoo", "enabled": true, "processData": true },
    { "protocol": "sip2", "enabled": true, "processData": true },
    { "protocol": "kafka", "enabled": true, "processData": true },
    { "protocol": "kerberos", "enabled": true, "processData": true },
    { "protocol": "mysql", "enabled": true, "processData": true },
    { "protocol": "oracle", "enabled": true, "processData": true },
    { "protocol": "postgres", "enabled": true, "processData": true },
    { "protocol": "tds", "enabled": true, "processData": true }
  ],
  "luaParsers": [
    { "script": "p2-mtproto.lua", "enabled": true },
    { "script": "p2-ssh.lua", "enabled": true },
    { "script": "p2-dcerpc.lua", "enabled": false },
    { "script": "p2-dns.lua", "enabled": false },
    { "script": "p2-drda.lua", "enabled": false },
    { "script": "p2-fpsu.lua", "enabled": false },
    { "script": "p2-icmp.lua", "enabled": false },
    { "script": "p2-ipsec.lua", "enabled": false },
    { "script": "p2-kafka.lua", "enabled": false },
    { "script": "p2-kerberos.lua", "enabled": false },
    { "script": "p2-ldap.lua", "enabled": false },
    { "script": "p2-mstds.lua", "enabled": false },
    { "script": "p2-mysql.lua", "enabled": false },
    { "script": "p2-openvpn.lua", "enabled": false },
    { "script": "p2-oracle.lua", "enabled": false },
    { "script": "p2-postgres.lua", "enabled": false },
    { "script": "p2-pptp.lua", "enabled": false },
    { "script": "p2-wireguard.lua", "enabled": false },
    { "script": "p2-lwdpi.lua", "enabled": true }
  ],
  "recordingRules": [
    { "script": "p1-record_unknown.lua", "enabled": false }
  ],
  "filters": [
    {
      "name": "default",
      "groups": [
        {
          "enabled": true,
          "name": "Accept all",
          "rules": [
            {
              "type": "accept",
              "comment": "Accept all tcp or udp traffic",
              "code": "tcp or udp"
            }
          ]
        }
      ]
    }
  ],
  "debug": {
    "dumps": { "log": true, "dump": false },
    "memoryTrack": { "runtime": false, "lua": false }
  }
}

Пример: высокопроизводительная конфигурация с DPDK и BPF-фильтрами

Для сетей 10+ Гбит/с с фильтрацией по корпоративной подсети; режим "dpdk" работает только в пакетах с поддержкой DPDK. Объект hugePages задаёт выделение 1024 страниц по 2 МиБ на каждом узле NUMA при запуске службы sensor-ipc. Массив nativeParsers перечисляет 13 парсеров, но не ограничивает набор: остальные 23 встроенных парсера остаются включёнными, и для их отключения добавьте записи с "enabled": false. В массив luaParsers при запуске служба сама добавит остальные скрипты каталога eth-sessions (p2-lwdpi.lua — включённым, прочие — выключенными):

{
  "version": "6.2",
  "cpuSet": "4-7",
  "controlSection": {
    "flowCount": 8,
    "flowBuffCount": 4096,
    "flowBuffSize": 65536,
    "ipSessions": true,
    "tcpSessions": true,
    "udpSessions": true,
    "ip4Fragments": true,
    "ndpiEngine": true,
    "nativeParsers": true,
    "luaParsers": true,
    "trafficRecordSessions": false,
    "captureMode": "dpdk",
    "controlIf": "eth0",
    "hugePages": {
      "enabled": true,
      "count": 1024,
      "mount": "/home/alertixnta/huge"
    }
  },
  "networkAdapters": [],
  "nativeParsers": [
    { "protocol": "dns", "enabled": true, "processData": true },
    { "protocol": "http", "enabled": true, "processData": true },
    { "protocol": "http2", "enabled": true, "processData": true },
    { "protocol": "smtp", "enabled": true, "processData": true },
    { "protocol": "ssl", "enabled": true, "processData": true },
    { "protocol": "smb", "enabled": true, "processData": true },
    { "protocol": "ftp", "enabled": true, "processData": true },
    { "protocol": "imap4", "enabled": true, "processData": true },
    { "protocol": "pop3", "enabled": true, "processData": true },
    { "protocol": "ldap", "enabled": true, "processData": true },
    { "protocol": "kerberos", "enabled": true, "processData": true },
    { "protocol": "kafka", "enabled": true, "processData": true },
    { "protocol": "websocket", "enabled": true, "processData": true }
  ],
  "luaParsers": [
    { "script": "p2-mtproto.lua", "enabled": true },
    { "script": "p2-ssh.lua", "enabled": true }
  ],
  "recordingRules": [],
  "filters": [
    {
      "name": "production",
      "groups": [
        {
          "enabled": true,
          "name": "Corporate traffic",
          "rules": [
            { "type": "accept", "comment": "Corporate subnet",
              "code": "net 198.51.100.0/24" },
            { "type": "accept", "comment": "DMZ", "code": "net 172.16.0.0/12" }
          ]
        },
        {
          "enabled": true,
          "name": "Drop noise",
          "rules": [
            {
              "type": "drop", "comment": "Drop multicast",
              "code": "multicast"
            },
            {
              "type": "drop", "comment": "Drop broadcast",
              "code": "broadcast"
            }
          ]
        }
      ]
    }
  ],
  "debug": {
    "dumps": { "log": true, "dump": false },
    "memoryTrack": { "runtime": false, "lua": false }
  }
}

Рекомендации по настройке

  • Число потоков (flowCount) не должно превышать число ядер процессора: при большем значении служба запускает один поток и записывает предупреждение в журнал. Служба запускает flowCount потоков чтения пакетов (ядра — controlSection.capture.cpuSet) и столько же потоков обработки пакетов (ядра — cpuSet); чтобы каждый поток получил собственное ядро, задавайте в каждом наборе не меньше flowCount ядер — при меньшем числе ядер потоки распределяются по ядрам набора по кругу.

  • Общий объём буферов: flowCount * flowBuffCount * flowBuffSize. По умолчанию: 4 * 1024 * 64 КБ = 256 МБ. Убедитесь, что сервер располагает достаточным объёмом RAM.

  • Режим DPDK доступен в пакетах с поддержкой DPDK. Hugepages для него задаются объектом controlSection.hugePages в ethercap.json (после первого запуска службы — объектом controlSection.capture.hugePages) и выделяются автоматически при каждом запуске службы sensor-ipc; вручную администратор выполняет только привязку сетевых адаптеров к DPDK-драйверу (vfio-pci или igb_uio).

  • BPF-фильтры компилируются при запуске. Невалидное BPF-выражение блокирует запуск сервиса.

  • Если протокол не представляет интереса, установите processData: false — это снизит нагрузку на CPU при сохранении фиксации факта наличия протокола.

2. analyser.json — Служба анализа (sensor-analyser)

Путь: /opt/alertixnta/config/analyser.json. Служба: sensor-analyser — ядро анализа сетевого трафика. Принимает через IPC события, сформированные службами захвата (разбор протоколов выполняют sensor-ethercap и sensor-pcap), и выполняет классификацию, детектирование контента и сопоставление с индикаторами компрометации.

Структура файла

{
  version, cpuSet, maxFileSizeInMemory, maxFileSizeOnDisk,
  rawFilter { enabled, fileName },
  messageFilter { enabled, fileName },
  iocAttributes {
    enabled, domain, url,
    fileHash { md5, sha1, sha256, sha512, tlsh, ssdeep },
    cookies, userAgent, email,
    ja3, ja4, ja3s, ja4s, ja4x, ja4h, ja4ssh
  },
  workFlow {
    settings {
      preFilter { threadCount, maxEventCount },
      detect { threadCount, maxEventCount },
      postFilter { threadCount, maxEventCount }
    },
    preFilter [ { name, enabled, on_error }, ... ],
    detect [ { name, enabled, on_error }, ... ],
    postFilter [ { name, enabled, on_error }, ... ],
    analyseIPC [ { name, enabled, on_error }, ... ],
    onTimer [ { name, enabled, on_error }, ... ]
  },
  debug { dumps { log, dump }, memoryTrack { runtime, lua } }
}

Массив workFlow.onTimer в поставляемом файле отсутствует и добавляется администратором при подключении скриптов стадии L5.

Ключевые параметры

Таблица Б.2 — Параметры analyser.json

ПараметрТипУмолчаниеОписание

version

string

"6.4"

Версия формата конфигурации

cpuSet

string

"5-8"

CPU affinity для потоков анализатора. Количество ядер должно быть не менее суммы threadCount всех этапов workflow

maxFileSizeInMemory

int

10485760 (10 МБ)

Порог размера файла в RAM. Файлы крупнее сбрасываются на диск (spill-to-disk)

maxFileSizeOnDisk

int

536870912 (512 МБ)

Максимальный размер файла на диске. Сверх этого предела объект не дособирается: событие обрабатывается дальше с собранной частью и атрибутом error_collect = 1. Защита от исчерпания дискового пространства

rawFilter.enabled

bool

false

Фильтрация сырых пакетов по правилам из XML-файла до передачи в workflow

rawFilter.fileName

string

"http.filter.xml"

XML-файл с правилами фильтрации пакетов (в /opt/alertixnta/config/filter/http/)

messageFilter.enabled

bool

true

Фильтрация на уровне разобранных сообщений

messageFilter.fileName

string

"msg.filter.xml"

XML-файл с правилами фильтрации сообщений (в /opt/alertixnta/config/filter/)

iocAttributes.enabled

bool

false

Главный переключатель сопоставления атрибутов событий с индикаторами компрометации, загруженными службой sensor-identity. Совпадение порождает событие threat/ioc-match в канале threat:ti_match

iocAttributes.domain, iocAttributes.url

bool

true

Сопоставление доменных имён (DNS-запросы и ответы, SNI TLS и QUIC, заголовок Host HTTP) и URL

iocAttributes.fileHash.md5, iocAttributes.fileHash.sha256

bool

true

Сопоставление хэшей MD5 и SHA-256 извлечённых файлов

iocAttributes.fileHash.sha1, iocAttributes.fileHash.sha512

bool

false

Сопоставление хэшей SHA-1 и SHA-512 извлечённых файлов

iocAttributes.fileHash.tlsh, iocAttributes.fileHash.ssdeep

bool

false

Присутствуют в поставляемом файле; оставляйте выключенными — хэши файлов сопоставляются по алгоритмам MD5, SHA-1, SHA-256 и SHA-512

iocAttributes.ja3, iocAttributes.ja4

bool

true

Сопоставление отпечатков JA3 и JA4 клиента TLS и QUIC

iocAttributes.cookies, userAgent, email, ja3s, ja4s, ja4x, ja4h, ja4ssh

bool

false

Сопоставление cookie и User-Agent HTTP, адресов электронной почты (SMTP, POP3, IMAP), отпечатков сервера TLS (JA3S, JA4S), сертификата клиента TLS (JA4X), HTTP-запроса (JA4H) и SSH (JA4SSH)

iocAttributes.ip, ja4xs, certSha1, certSha1s, hassh, hasshServer, sshBanner

bool

false

В поставляемом файле отсутствуют и добавляются вручную: IP-адреса из DNS-ответов A/AAAA, отпечаток JA4X сертификата сервера TLS, SHA-1 сертификатов клиента и сервера TLS, отпечатки HASSH клиента и сервера SSH, баннер SSH

workFlow.settings.preFilter.threadCount

int

10

Потоки предварительной классификации

workFlow.settings.preFilter.maxEventCount

int

100000

Размер очереди событий перед preFilter. При заполнении новые события отбрасываются

workFlow.settings.detect.threadCount

int

10

Потоки детектирования. Наиболее ресурсоёмкий этап — рекомендуется наибольшее количество потоков

workFlow.settings.detect.maxEventCount

int

100000

Размер очереди событий перед detect

workFlow.settings.postFilter.threadCount

int

1

Потоки постобработки. Обычно достаточно одного

workFlow.settings.postFilter.maxEventCount

int

100000

Размер очереди событий перед postFilter

Конвейер Lua-скриптов (workFlow) состоит из пяти этапов. Скрипт этапа исполняется, только если его имя внесено в список этапа с признаком "enabled": true; в скобках указано число записей в поставляемом analyser.json:

  • preFilter (префикс l1-, каталог an-prefilter/, 25 записей, все включены) — предварительная классификация по протоколам. Каталог содержит 31 скрипт; при запуске служба добавляет отсутствующие в списке скрипты каталога выключенными

  • detect (префикс l2-, каталог an-detect/, 74 записи, включены 72; выключены l2-kerberos-golden.lua и l2-mapi-http.lua) — детектирование протоколов, веб-сервисов, контента и угроз. Детекторы вызываются по возрастанию номера записи: 69 детекторов встроенного перечня стадии L2 получают фиксированный номер независимо от места своей записи в массиве, остальные детекторы, в том числе детекторы угроз, кроме l2-doh.lua, — номер позиции своей записи (счёт с нуля); взаимный порядок детекторов с равными номерами не определён. Детекторы протоколов l2-ldap.lua, l2-sip2.lua, l2-smb.lua и l2-ssl.lua (фиксированные номера 4, 6, 7 и 8) завершают кодом DROP обработку каждого события своего типа, поэтому детектор угроз получает событие, только если номер позиции его записи меньше номера детектора протокола того же типа события. Записи детекторов угроз ставятся в начало массива; перенос записи на строку выше записи детектора протокола требуемого номера не гарантирует, поскольку номер детектора протокола от места его записи не зависит: например, запись над записью l2-smb.lua, стоящей в поставляемом файле на позиции 69, получает номер 69. Скрипты l2-tls-anomaly.lua и l2-sip-anomaly.lua по умолчанию не подключены; их записи также вносятся в начало массива.

  • postFilter (префикс l3-, каталог an-postfilter/, 2 записи; включён l3-dropall.lua, выключен l3-check-malware.lua) — постобработка (malware-проверка, финальная очистка)

  • analyseIPC (префикс l4-, каталог an-ipcchannels/, 11 записей, включены 10; выключен l4-slow-tcp.lua) — обработка IPC-событий жизненного цикла сессий

  • onTimer (префикс l5-, каталог an-timers/) — периодически вызываемые скрипты (таймерные задачи). В поставляемом файле массива нет, поэтому 5 скриптов стадии L5 по умолчанию не исполняются; для включения добавьте массив onTimer с их именами

Каждый скрипт: name (имя .lua-файла из каталога своего этапа в /opt/alertixnta/scripts/), enabled (вкл/выкл), on_error (true — при ошибке вызывать функцию-обработчик on_error(desc, param1) скрипта, false — не вызывать обработчик). Изменённое содержимое зарегистрированных скриптов стадий L1–L4 применяется без перезапуска службы командой sudo systemctl reload sensor-analyser. Той же командой применяется новая или включённая запись списка detect; перестановка существующих записей этого списка применяется перезапуском службы командой sudo systemctl restart sensor-analyser, а не перечитыванием конфигурации.

Пример: типовая продуктивная конфигурация

{
  "version": "6.4",
  "cpuSet": "5-8",
  "maxFileSizeInMemory": 10485760,
  "maxFileSizeOnDisk": 536870912,
  "rawFilter": {
    "enabled": false,
    "fileName": "http.filter.xml"
  },
  "messageFilter": {
    "enabled": true,
    "fileName": "msg.filter.xml"
  },
  "iocAttributes": {
    "enabled": false,
    "domain": true,
    "url": true,
    "fileHash": {
      "md5": true,
      "sha1": false,
      "sha256": true,
      "sha512": false,
      "tlsh": false,
      "ssdeep": false
    },
    "cookies": false,
    "userAgent": false,
    "email": false,
    "ja3": true,
    "ja4": true,
    "ja3s": false,
    "ja4s": false,
    "ja4x": false,
    "ja4h": false,
    "ja4ssh": false
  },
  "workFlow": {
    "settings": {
      "preFilter": { "threadCount": 10, "maxEventCount": 100000 },
      "detect": { "threadCount": 10, "maxEventCount": 100000 },
      "postFilter": { "threadCount": 1, "maxEventCount": 100000 }
    },
    "preFilter": [
      { "name": "l1-ldap.lua", "enabled": true, "on_error": false },
      { "name": "l1-dns.lua", "enabled": true, "on_error": false },
      { "name": "l1-icmp.lua", "enabled": true, "on_error": false },
      { "name": "l1-ssl.lua", "enabled": true, "on_error": false },
      { "name": "l1-http.lua", "enabled": true, "on_error": false },
      { "name": "l1-sip2.lua", "enabled": true, "on_error": false },
      { "name": "l1-smb.lua", "enabled": true, "on_error": false },
      { "name": "l1-mysql.lua", "enabled": true, "on_error": false },
      { "name": "l1-lotus.lua", "enabled": true, "on_error": false },
      { "name": "l1-oracle.lua", "enabled": true, "on_error": false },
      { "name": "l1-torrent.lua", "enabled": true, "on_error": false },
      { "name": "l1-imap4.lua", "enabled": true, "on_error": false },
      { "name": "l1-ftp.lua", "enabled": true, "on_error": false },
      { "name": "l1-pop3.lua", "enabled": true, "on_error": false },
      { "name": "l1-pcap.lua", "enabled": true, "on_error": false },
      { "name": "l1-tds.lua", "enabled": true, "on_error": false },
      { "name": "l1-xmpp.lua", "enabled": true, "on_error": false },
      { "name": "l1-kafka.lua", "enabled": true, "on_error": false },
      { "name": "l1-kerberos.lua", "enabled": true, "on_error": false },
      { "name": "l1-smtp.lua", "enabled": true, "on_error": false },
      { "name": "l1-websocket.lua", "enabled": true, "on_error": false },
      { "name": "l1-postgres.lua", "enabled": true, "on_error": false },
      { "name": "l1-irc.lua", "enabled": true, "on_error": false },
      { "name": "l1-ssh.lua", "enabled": true, "on_error": false },
      { "name": "l1-drop-100MB.lua", "enabled": true, "on_error": false }
    ],
    "detect": [
      { "name": "l2-pcap.lua", "enabled": true, "on_error": false },
      { "name": "l2-dns.lua", "enabled": true, "on_error": false },
      { "name": "l2-icmp.lua", "enabled": true, "on_error": false },
      { "name": "l2-ssl.lua", "enabled": true, "on_error": false },
      { "name": "l2-sip2.lua", "enabled": true, "on_error": false },
      { "name": "l2-postgres.lua", "enabled": true, "on_error": false },
      { "name": "l2-mysql.lua", "enabled": true, "on_error": false },
      { "name": "l2-oracle.lua", "enabled": true, "on_error": false },
      { "name": "l2-mstds.lua", "enabled": true, "on_error": false },
      { "name": "l2-kafka.lua", "enabled": true, "on_error": false },
      { "name": "l2-kerberos-roasting.lua", "enabled": true, "on_error": false },
      { "name": "l2-kerberos-golden.lua", "enabled": false, "on_error": false },
      { "name": "l2-dcerpc-lateral.lua", "enabled": true, "on_error": false },
      { "name": "l2-ftp.lua", "enabled": true, "on_error": false },
      { "name": "l2-xmpp.lua", "enabled": true, "on_error": false },
      { "name": "l2-websocket-slack.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-websocket-skype.lua", "enabled": true, "on_error": false },
      { "name": "l2-websocket-whatsapp.lua", "enabled": true, "on_error": false },
      { "name": "l2-websocket-ok.ru.lua", "enabled": true, "on_error": false },
      { "name": "l2-websocket-xmpp.lua", "enabled": true, "on_error": false },
      { "name": "l2-websocket-generic.lua", "enabled": true, "on_error": false },
      { "name": "l2-slack.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-connect.lua", "enabled": true, "on_error": false },
      { "name": "l2-doh.lua", "enabled": true, "on_error": false },
      { "name": "l2-search-query.lua", "enabled": true, "on_error": false },
      { "name": "l2-mapi-http.lua", "enabled": false, "on_error": false },
      { "name": "l2-livejournal.lua", "enabled": true, "on_error": false },
      { "name": "l2-ok.ru.lua", "enabled": true, "on_error": false },
      { "name": "l2-vk.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-rabota.ru.lua", "enabled": true, "on_error": false },
      { "name": "l2-hh.ru.lua", "enabled": true, "on_error": false },
      { "name": "l2-superjob.ru.lua", "enabled": true, "on_error": false },
      { "name": "l2-dropbox.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-cloud.mail.ru.lua", "enabled": true, "on_error": false },
      { "name": "l2-mail.ru.lua", "enabled": true, "on_error": false },
      { "name": "l2-rambler.ru.lua", "enabled": true, "on_error": false },
      { "name": "l2-ydisk.lua", "enabled": true, "on_error": false },
      { "name": "l2-yandex.ru.lua", "enabled": true, "on_error": false },
      { "name": "l2-blogger.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-facebook.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-gdrive.lua", "enabled": true, "on_error": false },
      { "name": "l2-gmail.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-instagram.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-linkedin.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-onedrive.lua", "enabled": true, "on_error": false },
      { "name": "l2-live.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-twitter.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-web-icq.lua", "enabled": true, "on_error": false },
      { "name": "l2-web-mra.lua", "enabled": true, "on_error": false },
      { "name": "l2-web-skype.lua", "enabled": true, "on_error": false },
      { "name": "l2-yahoo.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-owa.lua", "enabled": true, "on_error": false },
      { "name": "l2-mamba.lua", "enabled": true, "on_error": false },
      { "name": "l2-loveplanet.lua", "enabled": true, "on_error": false },
      { "name": "l2-ipboard.lua", "enabled": true, "on_error": false },
      { "name": "l2-vbulletin.lua", "enabled": true, "on_error": false },
      { "name": "l2-mybb.lua", "enabled": true, "on_error": false },
      { "name": "l2-phpbb.lua", "enabled": true, "on_error": false },
      { "name": "l2-wordpress.lua", "enabled": true, "on_error": false },
      { "name": "l2-dropmefiles.com.lua", "enabled": true, "on_error": false },
      { "name": "l2-webdav.lua", "enabled": true, "on_error": false },
      { "name": "l2-accounts.lua", "enabled": true, "on_error": false },
      { "name": "l2-generic.lua", "enabled": true, "on_error": false },
      { "name": "l2-file-upload.lua", "enabled": true, "on_error": false },
      { "name": "l2-file-download.lua", "enabled": true, "on_error": false },
      { "name": "l2-imap4.lua", "enabled": true, "on_error": false },
      { "name": "l2-pop3.lua", "enabled": true, "on_error": false },
      { "name": "l2-smtp.lua", "enabled": true, "on_error": false },
      { "name": "l2-torrent.lua", "enabled": true, "on_error": false },
      { "name": "l2-smb.lua", "enabled": true, "on_error": false },
      { "name": "l2-smb-lateral.lua", "enabled": true, "on_error": false },
      { "name": "l2-lotus.lua", "enabled": true, "on_error": false },
      { "name": "l2-ldap-recon.lua", "enabled": true, "on_error": false },
      { "name": "l2-ldap.lua", "enabled": true, "on_error": false }
    ],
    "postFilter": [
      { "name": "l3-check-malware.lua", "enabled": false, "on_error": false },
      { "name": "l3-dropall.lua", "enabled": true, "on_error": false }
    ],
    "analyseIPC": [
      { "name": "l4-open-ip.lua", "enabled": true, "on_error": false },
      { "name": "l4-open-udp.lua", "enabled": true, "on_error": false },
      { "name": "l4-open-tcp.lua", "enabled": true, "on_error": false },
      { "name": "l4-close-ip.lua", "enabled": true, "on_error": false },
      { "name": "l4-close-udp.lua", "enabled": true, "on_error": false },
      { "name": "l4-close-tcp.lua", "enabled": true, "on_error": false },
      { "name": "l4-update-ip.lua", "enabled": true, "on_error": false },
      { "name": "l4-update-udp.lua", "enabled": true, "on_error": false },
      { "name": "l4-update-tcp.lua", "enabled": true, "on_error": false },
      { "name": "l4-slow-tcp.lua", "enabled": false, "on_error": false },
      { "name": "l4-mtproto.lua", "enabled": true, "on_error": false }
    ]
  },
  "debug": {
    "dumps": { "log": true, "dump": false },
    "memoryTrack": { "runtime": false, "lua": false }
  }
}

Детекторы горизонтального перемещения. Включённые в примере детекторы l2-smb-lateral.lua и l2-ldap-recon.lua выпускают находки только после заполнения списка whitelist_admin_hosts своей секции (anomaly.smb, anomaly.ldap) в файле /opt/alertixnta/config/anomaly.json; детектор l2-dcerpc-lateral.lua — после заполнения списков anomaly.dcerpc.domain_controllers (для выявления DCSync) и anomaly.dcerpc.whitelist_admin_hosts (для остальных классов). В списки вносятся IP-адреса или подсети в нотации CIDR: легитимных узлов администрирования и контроллеров домена соответственно. Кроме того, событие должно дойти до детектора: номер позиции записи детектора угроз в списке detect должен быть меньше фиксированного номера детектора протокола, который завершает кодом DROP обработку событий того же типа, — 7 у l2-smb.lua и 4 у l2-ldap.lua. В примере, как и в поставляемом файле, записи l2-smb-lateral.lua и l2-ldap-recon.lua стоят на позициях 70 и 72, поэтому события raw/smb и raw/ldap до них не доходят, пока записи не перенесены в начало списка; перенос записи на строку выше записи l2-smb.lua или l2-ldap.lua условия не выполняет. Запись l2-dcerpc-lateral.lua переносить не требуется: у событий raw/dcerpc завершающего детектора протокола нет. Детектор l2-kerberos-golden.lua зарегистрирован выключенным: включайте его в средах, где Alertix-NTA получает трафик выдачи билетов Kerberos от всех контроллеров домена.

Пример: высоконагруженная конфигурация

Для серверов с 16+ ядрами и интенсивным трафиком — увеличенные пулы потоков, фильтрация пакетов, расширенные буферы. Скрипты каталога an-prefilter/, не внесённые в сокращённый список preFilter, служба при запуске добавит в список выключенными:

{
  "version": "6.4",
  "cpuSet": "8-15",
  "maxFileSizeInMemory": 52428800,
  "maxFileSizeOnDisk": 1073741824,
  "rawFilter": {
    "enabled": true,
    "fileName": "custom-raw.filter.xml"
  },
  "messageFilter": {
    "enabled": true,
    "fileName": "msg.filter.xml"
  },
  "workFlow": {
    "settings": {
      "preFilter": { "threadCount": 4, "maxEventCount": 500000 },
      "detect": { "threadCount": 8, "maxEventCount": 500000 },
      "postFilter": { "threadCount": 2, "maxEventCount": 200000 }
    },
    "preFilter": [
      { "name": "l1-http.lua", "enabled": true, "on_error": false },
      { "name": "l1-dns.lua", "enabled": true, "on_error": false },
      { "name": "l1-ssl.lua", "enabled": true, "on_error": false },
      { "name": "l1-smtp.lua", "enabled": true, "on_error": false },
      { "name": "l1-drop-100MB.lua", "enabled": true, "on_error": false }
    ],
    "detect": [
      { "name": "l2-dns.lua", "enabled": true, "on_error": false },
      { "name": "l2-ssl.lua", "enabled": true, "on_error": false },
      { "name": "l2-smtp.lua", "enabled": true, "on_error": false },
      { "name": "l2-imap4.lua", "enabled": true, "on_error": false },
      { "name": "l2-pop3.lua", "enabled": true, "on_error": false },
      { "name": "l2-generic.lua", "enabled": true, "on_error": false },
      { "name": "l2-file-upload.lua", "enabled": true, "on_error": false },
      { "name": "l2-file-download.lua", "enabled": true, "on_error": false }
    ],
    "postFilter": [
      { "name": "l3-check-malware.lua", "enabled": true, "on_error": true },
      { "name": "l3-dropall.lua", "enabled": true, "on_error": false }
    ],
    "analyseIPC": [
      { "name": "l4-open-tcp.lua", "enabled": true, "on_error": false },
      { "name": "l4-close-tcp.lua", "enabled": true, "on_error": false },
      { "name": "l4-update-tcp.lua", "enabled": true, "on_error": false },
      { "name": "l4-mtproto.lua", "enabled": true, "on_error": false }
    ]
  },
  "debug": {
    "dumps": { "log": true, "dump": false },
    "memoryTrack": { "runtime": false, "lua": false }
  }
}

Рекомендации по настройке

  • Суммарный threadCount (preFilter + detect + postFilter) не должен превышать количество ядер в cpuSet.

  • maxFileSizeOnDisk должен быть строго больше maxFileSizeInMemory.

  • Этап detect — самый ресурсоёмкий. Выделяйте ему наибольшее количество потоков.

  • Если все скрипты определённого этапа отключены, потоки всё равно выделяются — ресурсы расходуются впустую.

  • В продуктивной среде отключайте debug.dumps.dump и оба флага memoryTrack — они существенно снижают производительность.

3. transfer.json — Служба доставки (sensor-transfer)

Путь: /opt/alertixnta/config/transfer.json. Служба: sensor-transfer — передача обработанных данных во внешние системы по различным протоколам.

Структура файла

{
  version, sensorID, transportThreads,
  profiles [
    { name, enabled, default, protocol, comment, ...параметры протокола... },
    ...
  ],
  debug { dumps { log, dump }, memoryTrack { runtime, lua } }
}

Глобальные параметры

Таблица Б.3 — Глобальные параметры transfer.json

ПараметрТипУмолчаниеОписание

version

string

"6.2"

Версия формата конфигурации

sensorID

string

—

UUID v4, уникальный идентификатор экземпляра сенсора. Встраивается во все исходящие события

transportThreads

int

2

Количество потоков транспортного пула. Ограничено количеством CPU. Рекомендуется >= количества активных профилей

Общие поля каждого профиля

Таблица Б.4 — Общие поля профиля transfer.json

ПараметрТипОписание

name

string

Уникальное имя профиля

enabled

bool

Активность профиля

default

bool

Профиль по умолчанию — получает все события, не назначенные конкретным профилям

protocol

string

Тип протокола: filedrop, smtp, ftp, sftp, imap, syslog, netflow, kafka, gprofile, virtotal, athena, ptsb, icap, statflow, dbstat, ipfix, cyberprotego; smb — только в редакции для Windows Server

comment

string

Комментарий администратора

Пример: профиль filedrop (локальный файловый вывод)

Сохранение событий в локальную файловую систему в формате JSON с организацией по дате:

{
  "name": "local_filedrop",
  "enabled": true,
  "default": true,
  "protocol": "filedrop",
  "comment": "Локальное хранение перехваченных событий",
  "file_drop_path": "/opt/alertixnta/events/filedrop",
  "save_format": "json",
  "save_zip": false,
  "quota": "50Gb",
  "file_drop_mask": "%Y-%m-%d/%H",
  "enable_tmp": false
}

Параметры filedrop:

Таблица Б.5 — Параметры профиля filedrop

ПараметрУмолчаниеОписание

file_drop_path

—

Базовый путь для записи файлов

save_format

"json"

Формат: "eml", "json", "xml", "attachments" (только вложения без конверта) или "syslog"

save_zip

false

Сжатие ZIP. Экономит место, увеличивает нагрузку CPU

quota

"10Gb"

Квота. "0" — без ограничения. При превышении запись останавливается

file_drop_mask

"%Y-%m-%d/%H"

Маска поддиректорий (strftime). По умолчанию: YYYY-MM-DD/HH

enable_tmp

false

Атомарная запись через .tmp + rename

Пример: профиль syslog (экспорт в SIEM)

Отправка событий в формате CEF через Syslog для интеграции с SIEM-системами:

{
  "name": "siem_syslog_cef",
  "enabled": true,
  "default": false,
  "protocol": "syslog",
  "comment": "Экспорт событий в SIEM (CEF через Syslog UDP)",
  "syslog_server": "192.0.2.100",
  "syslog_port": 514,
  "syslog_tcp": false,
  "enable_ssl": false,
  "script_name": "alertixnta_lua_cef.lua",
  "tcp_timeout": 10
}

Вариант с TCP и SSL для надёжной передачи:

{
  "name": "siem_syslog_cef_tls",
  "enabled": true,
  "default": false,
  "protocol": "syslog",
  "comment": "Экспорт событий в SIEM (CEF через Syslog TCP+TLS)",
  "syslog_server": "siem.company.local",
  "syslog_port": 6514,
  "syslog_tcp": true,
  "enable_ssl": true,
  "keep_connection": true,
  "script_name": "alertixnta_lua_cef.lua",
  "tcp_timeout": 10,
  "octet_counting": false
}

Вариант для Wazuh (CEF через TCP+TLS с non-transparent framing):

{
  "name": "wazuh_syslog_cef",
  "enabled": true,
  "default": false,
  "protocol": "syslog",
  "comment": "CEF в Wazuh (remoted не поддерживает RFC 5425 octet counting)",
  "syslog_server": "wazuh.company.local",
  "syslog_port": 6514,
  "syslog_tcp": true,
  "enable_ssl": true,
  "keep_connection": true,
  "script_name": "alertixnta_lua_cef.lua",
  "tcp_timeout": 10,
  "octet_counting": false
}

Важно для Wazuh. Параметр octet_counting: false обязателен для доставки в Wazuh Manager (remoted). При true сообщения предваряются длиной в октетах (RFC 5425) — Wazuh такой формат не распознаёт и отбрасывает события. См. 7.4.4.2 «Доставка CEF в SIEM».

Пример: профили syslog для событий угроз

Профиль протокола syslog, у которого параметр channel_name равен имени подканала канала threat, передаёт события угроз — находки детекторов в формате JSON, по одному событию в сообщении; сценарий из параметра script_name к этим событиям не применяется. Один профиль читает один подканал.

В поставляемом файле transfer.json для событий угроз предусмотрен профиль syslog_threat_ioc_match: он читает подканал threat:ti_match (совпадения с индикаторами компрометации) и поставляется выключенным. Ниже профиль приведён в поставляемом виде, адрес приёмника заменён заполнителем <адрес-SIEM>. После установки "enabled": true, указания адреса приёмника и перечитывания конфигурации службы sensor-transfer каждое совпадение с индикатором передаётся на приёмник отдельным сообщением по UDP:

{
  "name": "syslog_threat_ioc_match",
  "enabled": false,
  "default": false,
  "comment": "",
  "protocol": "syslog",
  "syslog_server": "<адрес-SIEM>",
  "syslog_port": 514,
  "syslog_tcp": false,
  "enable_ssl": false,
  "keep_connection": true,
  "script_name": "syslog_native.lua",
  "channel_name": "threat:ti_match",
  "tcp_timeout": 10,
  "go_profile_weight": 1,
  "go_profile_reserve": false
}

По UDP сообщение длиннее 1472 байт усекается, а событие с развёрнутыми свидетельствами может превысить этот предел, поэтому для событий угроз предпочтителен TCP ("syslog_tcp": true) с подсчётом октетов ("octet_counting": true). Профили для подканалов threat:behavioral (поведенческие находки) и threat:protocol_anomaly (нарушения спецификаций протоколов) в поставку не входят: администратор создаёт их по образцу поставляемого профиля. Профиль принимает события только из подканала, объявленного в файле ipc.json, поэтому перед добавлением профиля объявите оба подканала в секции subchannels канала threat и перезапустите службы Alertix-NTA командой sudo systemctl restart sensor.target.

Пример профиля для подканала threat:behavioral с доставкой по TCP. Ожидаемый результат — после добавления профиля в массив profiles и перечитывания конфигурации службы sensor-transfer поведенческие находки передаются на приёмник, каждое сообщение предваряется его длиной; профиль для подканала threat:protocol_anomaly отличается только именем и значением channel_name:

{
  "name": "syslog_threat_behavioral",
  "enabled": true,
  "default": false,
  "comment": "",
  "protocol": "syslog",
  "syslog_server": "<адрес-SIEM>",
  "syslog_port": 514,
  "syslog_tcp": true,
  "enable_ssl": false,
  "keep_connection": true,
  "octet_counting": true,
  "script_name": "syslog_native.lua",
  "channel_name": "threat:behavioral",
  "tcp_timeout": 10,
  "go_profile_weight": 1,
  "go_profile_reserve": false
}

Пример: профиль kafka

Передача завершённых TCP-сессий (канал sessions:tcp) в Apache Kafka по TLS с аутентификацией клиентским сертификатом и сжатием LZ4; так настроены три поставляемых профиля kafka-tcp-traff, kafka-udp-traff и kafka-ip-traff, различающиеся каналом сессий и скриптом (kafka_sessions_tcp.lua, kafka_sessions_udp.lua, kafka_sessions_ip.lua):

{
  "name": "kafka_events",
  "enabled": true,
  "default": false,
  "protocol": "kafka",
  "comment": "Экспорт событий в Kafka",
  "kafka_bootstrap_servers":
    "kafka-1.company.local:9093,kafka-2.company.local:9093",
  "kafka_topic": "alertixnta-events",
  "kafka_security_protocol": "ssl",
  "kafka_ssl_key_location": "/opt/alertixnta/certs/client.key",
  "kafka_ssl_key_password": "",
  "kafka_ssl_certificate_location": "/opt/alertixnta/certs/client.pem",
  "kafka_ssl_ca_location": "/opt/alertixnta/certs/ca.pem",
  "kafka_compression_codec": "lz4",
  "kafka_batch_num_messages": 10000,
  "kafka_request_required_acks": 1,
  "kafka_log_level": 7,
  "kafka_enable_ssl_certificate_verification": true,
  "script_name": "kafka_sessions_tcp.lua",
  "channel_name": "sessions:tcp",
  "keep_connection": true,
  "tcp_timeout": 10
}

Параметры kafka:

Таблица Б.6 — Параметры профиля kafka

ПараметрУмолчаниеОписание

kafka_bootstrap_servers

—

Брокеры: host1:port,host2:port

kafka_topic

—

Целевой топик

kafka_security_protocol

"ssl" (в поставляемых профилях)

Протокол: plaintext (без шифрования) или ssl (TLS; с проверкой сертификата брокера по kafka_ssl_ca_location, со взаимной аутентификацией — при заданных kafka_ssl_certificate_location, kafka_ssl_key_location, kafka_ssl_key_password). Аутентификация SASL в Alertix-NTA не настраивается

kafka_compression_codec

"lz4"

Сжатие: none, gzip, snappy, lz4, zstd

kafka_batch_num_messages

10000

Размер батча сообщений

kafka_request_required_acks

1

ACK: 0 (без), 1 (leader), -1 (все ISR)

Пример: профиль smtp

Отправка перехваченных писем на выделенный почтовый ящик:

{
  "name": "smtp_archive",
  "enabled": true,
  "default": false,
  "protocol": "smtp",
  "comment": "Архив перехваченных писем",
  "smtp_server": "mail.company.local",
  "smtp_port": 587,
  "enable_ssl": true,
  "mail_from": "sensor@company.local",
  "mail_to": "archive@company.local",
  "tcp_timeout": 10,
  "keep_connection": false
}

Пример: профиль statflow (экспорт метрик)

Экспорт статистики парсеров сенсора для мониторинга через Telegraf/InfluxDB. Профиль соответствует поставляемому профилю statflow-parser-statistics: канал statistics:parser, скрипт ipc_statistics_parser.lua каталога tr-statflow, порт 6314 приёмника Telegraf. Остальные каналы статистики экспортируются аналогичными профилями со скриптами ipc_statistics_proc.lua (порт 6514), ipc_statistics_netif.lua (6414), ipc_statistics_script.lua (6214), ipc_statistics_transport.lua (6114) и ipc_statistics_icap.lua (6014):

{
  "name": "statflow_telegraf",
  "enabled": true,
  "default": false,
  "protocol": "statflow",
  "comment": "Статистика парсеров для Telegraf",
  "statflow_server": "127.0.0.1",
  "statflow_port": 6314,
  "statflow_tcp": false,
  "channel_name": "statistics:parser",
  "script_name": "ipc_statistics_parser.lua",
  "octet_counting": false
}

Пример: профиль athena (интеграция с песочницей)

Отправка файлов на проверку в песочницу Athena. Для PT Sandbox используется отдельный протокол ptsb со скриптом sandbox_ptsb.lua:

{
  "name": "athena_sandbox",
  "enabled": true,
  "default": false,
  "protocol": "athena",
  "comment": "Проверка файлов в песочнице Athena",
  "athena_server": "sandbox.company.local",
  "athena_port": 443,
  "enable_ssl": true,
  "athena_scenario": "1",
  "athena_force": false,
  "athena_token": "<ATHENA_TOKEN>",
  "script_name": "sandbox_athena.lua"
}

Пример: профиль icap (удалённая проверка контента)

Передача объектов внешнему ICAP-серверу DLP-системы Zecurion скриптом icap_zecurion.lua — единственным скриптом каталога tr-icap в поставке; для ICAP-серверов других производителей укажите в script_name собственный скрипт:

{
  "name": "icap_dlp",
  "enabled": true,
  "default": false,
  "protocol": "icap",
  "comment": "Передача объектов в DLP по ICAP",
  "icap_server": "dlp-gateway.company.local",
  "icap_port": 1344,
  "icap_preview": true,
  "icap_allow204": true,
  "enable_ssl": false,
  "script_name": "icap_zecurion.lua"
}

Пример: полная конфигурация transfer.json

{
  "version": "6.2",
  "sensorID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "transportThreads": 4,
  "profiles": [
    {
      "name": "local_filedrop",
      "enabled": true,
      "default": true,
      "protocol": "filedrop",
      "comment": "Локальное хранение",
      "file_drop_path": "/opt/alertixnta/events/filedrop",
      "save_format": "json",
      "save_zip": false,
      "quota": "50Gb",
      "file_drop_mask": "%Y-%m-%d/%H",
      "enable_tmp": false
    },
    {
      "name": "siem_syslog",
      "enabled": true,
      "default": false,
      "protocol": "syslog",
      "comment": "CEF в SIEM",
      "syslog_server": "192.0.2.100",
      "syslog_port": 514,
      "syslog_tcp": false,
      "script_name": "alertixnta_lua_cef.lua"
    },
    {
      "name": "statflow_telegraf",
      "enabled": true,
      "default": false,
      "protocol": "statflow",
      "comment": "Статистика парсеров для Telegraf",
      "statflow_server": "127.0.0.1",
      "statflow_port": 6314,
      "statflow_tcp": false,
      "channel_name": "statistics:parser",
      "script_name": "ipc_statistics_parser.lua"
    }
  ],
  "debug": {
    "dumps": { "log": true, "dump": false },
    "memoryTrack": { "runtime": false, "lua": false }
  }
}

Примеры выходных форматов событий

Ниже приведены примеры событий, генерируемых службой sensor-transfer при использовании различных значений параметра save_format в профилях filedrop, ftp, sftp, imap и (в редакции для Windows Server) smb.

Формат JSON (save_format: "json")
{
  "guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "time": "2025-03-15T14:32:05.123Z",
  "type": "msg_send",
  "detector": "smtp_detector",
  "subsystem": "email",
  "session": {
    "id": 847291,
    "protocol": "smtp",
    "netif": "eth0",
    "vlan_id": 100,
    "srcaddress": "192.0.2.50:45812",
    "dstaddress": "198.51.100.25:25",
    "starttime": "2025-03-15T14:31:58.456Z",
    "level": 7,
    "attributes": {
      "tls_version": "TLSv1.2",
      "ja3": "e7d705a3286e19ea42f587b344ee6865"
    }
  },
  "attributes": {
    "message-id": "<20250315143205.ABC123@mail.company.local>",
    "x-mailer": "Thunderbird 128.0"
  },
  "headers": {
    "Received": "from mail.company.local (192.0.2.50) by mx.company.local",
    "MIME-Version": "1.0",
    "Content-Type": "multipart/mixed; boundary=\"----=_Part_12345\""
  },
  "from": [
    { "displayname": "Иванов И.И.", "address": "ivanov@company.local" }
  ],
  "to": [
    { "displayname": "Петров П.П.", "address": "petrov@company.local" }
  ],
  "subject": "Отчёт за март 2025",
  "bodies": [
    {
      "type": "detect/message",
      "content-type": "text/plain",
      "sha256": "a1b2c3d4e5f6...fedcba9876543210",
      "text":
        "Добрый день!\n\nВо вложении отчёт за март.\n\nС уважением,\nИванов И.И."
    }
  ],
  "attachments": [
    {
      "content-type":
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
      "filename": "report-2025-03.xlsx",
      "size": 245760,
      "removed": false,
      "sha256": "b2c3d4e5f6a7...0123456789abcdef"
    }
  ]
}

Формат XML (save_format: "xml")

Корневой элемент — <ev_detect>. Кодировка — UTF-8.

<?xml version="1.0" encoding="utf-8"?>
<ev_detect guid="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
           time="2025-03-15T14:32:05.123Z"
           type="msg_send"
           detector="smtp_detector"
           subsystem="email">
  <session id="847291" protocol="smtp">
    <netif>eth0</netif>
    <vlan_id>100</vlan_id>
    <srcaddress>192.0.2.50:45812</srcaddress>
    <dstaddress>198.51.100.25:25</dstaddress>
    <starttime>2025-03-15T14:31:58.456Z</starttime>
    <level>7</level>
    <attributes>
      <attribute name="tls_version" value="TLSv1.2"/>
      <attribute name="ja3" value="e7d705a3286e19ea42f587b344ee6865"/>
    </attributes>
  </session>
  <attributes>
    <attribute name="message-id"
               value="&lt;20250315143205.ABC123@mail.company.local&gt;"/>
    <attribute name="x-mailer" value="Thunderbird 128.0"/>
  </attributes>
  <headers>
    <header name="Received"
            value="from mail.company.local (192.0.2.50) by mx.company.local"/>
    <header name="MIME-Version" value="1.0"/>
    <header name="Content-Type"
            value="multipart/mixed; boundary=&quot;----=_Part_12345&quot;"/>
  </headers>
  <from>
    <item displayname="Иванов И.И." address="ivanov@company.local"/>
  </from>
  <to>
    <item displayname="Петров П.П." address="petrov@company.local"/>
  </to>
  <subject>Отчёт за март 2025</subject>
  <bodies>
    <body type="detect/message" content-type="text/plain">
      <sha256>a1b2c3d4e5f6...fedcba9876543210</sha256>
      <text>Добрый день!
Во вложении отчёт за март.
С уважением,
Иванов И.И.</text>
      <attributes/>
    </body>
  </bodies>
  <attachments>
    <attachment content-type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                filename="report-2025-03.xlsx"
                size="245760"
                removed="false">
      <sha256>b2c3d4e5f6a7...0123456789abcdef</sha256>
      <fileimage>847291_0001.report-2025-03.xlsx</fileimage>
      <attributes/>
    </attachment>
  </attachments>
</ev_detect>

Формат EML (save_format: "eml")

Стандартный формат RFC 5322 (MIME). Служебные заголовки X-Sensor-* обеспечивают трассируемость до конкретного сетевого события.

MIME-Version: 1.0
Date: Sat, 15 Mar 2025 14:32:05 +0000
From: =?utf-8?B?0JjQstCw0L3QvtCyINCYLtCYLg==?= <ivanov@company.local>
To: =?utf-8?B?0J/QtdGC0YDQvtCyINCfLtCfLg==?= <petrov@company.local>
Subject: =?utf-8?B?0J7RgtGH0ZHRgiDQt9CwINC80LDRgNGCIDIwMjU=?=
X-Sensor-EventID: a1b2c3d4-e5f6-7890-abcd-ef1234567890
X-Sensor-Protocol: smtp
X-Sensor-Source: 192.0.2.50:45812
X-Sensor-Destination: 198.51.100.25:25
X-Sensor-Timestamp: 2025-03-15T14:32:05.123Z
X-Sensor-SessionID: 847291
X-Sensor-Detector: smtp_detector
Content-Type: multipart/mixed; boundary="----=_SensorBoundary_a1b2c3d4"

------=_SensorBoundary_a1b2c3d4
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

0JTQvtCx0YDRi9C5INC00LXQvdGMIQoK0JLQviDQstC7
0L7QttC10L3QuNC4INC+0YLRh9GR0YIg0LfQsCDQvNCw
0YDRgi4KCiDQoSDRg9Cy0LDQttC10L3QuNC10LwsCiDQ
mNCy0LDQvdC+0LIg0Jgu0Jgu

------=_SensorBoundary_a1b2c3d4
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Content-Disposition: attachment; filename="report-2025-03.xlsx"
Content-Transfer-Encoding: base64

UEsDBBQAAAAIAGhIZ1kAAAAAAAAAAAAAABIAHABbQ29u
dGVudF9UeXBlc10ueG1sVVQJAAP...
(содержимое файла в кодировке Base64)
------=_SensorBoundary_a1b2c3d4--
"address": "0.0.0.0:1345", "ssl": true, "syncMode": true,
"comment": "ICAPS (TLS)"
}
]
},
"clients": {
"default": {
"action": "ALLOW",
"denial_method": "DROP",
"limits": { "max_connections": 4000, "max_request_size": "10G" }
},
"rules": []
},
"icap": {
"alwaysOk": { "enabled": false },
"allow204": { "enabled": true },
"preview": { "enabled": false, "size": 4096 },
"rawLog": { "enabled": false, "path": "./log/icap-dump/" },
"requestLog": {
"enabled": false, "httpEnabled": true, "channel": "icap-request"
}
},
"debug": {
"dumps": { "log": true, "dump": false },
"memoryTrack": { "runtime": false, "lua": false }
}
}

При работе с несколькими прокси-серверами потоки можно разделять по адресам привязки: каждый элемент listenAddresses задаёт собственные значения ssl и syncMode. В синхронном режиме (syncMode: true) копия каждого возвращаемого сообщения временно сохраняется на диске в каталоге cache.path; учитывайте это при планировании дискового пространства.

10. anomaly.json — Обнаружение аномалий и детекторы угроз (общий файл служб)

Путь: /opt/alertixnta/config/anomaly.json Шаблон поставки: /opt/alertixnta/config/init/anomaly.json-default Службы: sensor-ethercap и sensor-pcap — встроенный движок обнаружения аномалий; sensor-identity — сопоставление сеансов средств удалённого доступа с индикаторами компрометации и список доменов-исключений для сценариев загрузки индикаторов; sensor-analyser — детекторы угроз стадии L2.

При установке пакета шаблон копируется в /opt/alertixnta/config/anomaly.json, только если такого файла ещё нет: при обновлении пакета действующий файл сохраняется, а новый шаблон доступен по пути шаблона поставки. Каждая из четырёх служб читает файл самостоятельно и перечитывает его по собственной команде systemctl reload.

Структура файла

Схема ниже показывает вложенность секций файла; значения параметров приведены в примере поставляемой конфигурации:

{
version,
anomaly {
enabled, profile, whitelist_subnets, episode_idle_window_sec,
scan { ... }, flood { ... }, fragmentation { ... }, ip { ... },
tcp { ... }, arp { ... }, rat_ioc { ... }, tls { ... },
dcerpc { ... }, ldap { ... }, smb { ... },
transport { behavioral { ... }, protocol_anomaly { ... } },
secfeeds { domain_whitelist }
},
debug { dumps { log, dump }, memoryTrack { runtime, lua } }
}

Ключевые параметры

Таблица 1. Секции anomaly.json
СекцияСлужбыНазначение и значения в поставляемом файле

anomaly (корень)

sensor-ethercap, sensor-pcap, sensor-identity

enabled — главный выключатель детекторов сканирования, флуда, Slowloris, межпоточного агрегатора и сопоставления сеансов удалённого доступа; false и в поставляемом файле, и при отсутствии ключа. episode_idle_window_sec = 60 — окно простоя эпизода. profile = "office" и whitelist_subnets = [] записываются в журнал службы при изменении и на детекторы не влияют.

scan

sensor-ethercap, sensor-pcap

Пороги вертикального, горизонтального и блочного сканирования и окна их учёта (6 параметров).

flood

sensor-ethercap, sensor-pcap

Пороги флуда SYN, UDP, ICMP, отражённого усиления, накопительного алгоритма CUSUM и атаки Slowloris (13 параметров).

fragmentation

sensor-ethercap, sensor-pcap

Проверки фрагментации IPv4 и IPv6 (8 параметров, проверки включены).

ip

sensor-ethercap, sensor-pcap

Проверки атак Land и Smurf (включены).

tcp

sensor-ethercap, sensor-pcap

Скрытое сканирование пакетами TCP вне сессии и обратное рассеяние (включены).

arp

sensor-ethercap, sensor-pcap

Подмена ARP: один MAC-адрес на многих IP-адресах, смена MAC-адреса у IP-адреса; списки исключений whitelist_macs, whitelist_ips (7 параметров).

rat_ioc

sensor-identity

Протоколы удалённого доступа rdp, vnc, ssh, teamviewer, anydesk, направление any, подсети-исключения whitelist_remote_admin_subnets.

tls

sensor-analyser

Проверки детектора l2-tls-anomaly.lua: устаревшие версии, слабые наборы шифров, самоподписанный и просроченный сертификат, несовпадение SNI, оборванное рукопожатие, фатальные сообщения alert (11 параметров).

dcerpc

sensor-analyser

Детектор l2-dcerpc-lateral.lua; списки domain_controllers и whitelist_admin_hosts в поставке пусты.

ldap

sensor-analyser

Детектор l2-ldap-recon.lua; список whitelist_admin_hosts в поставке пуст.

smb

sensor-analyser

Детектор l2-smb-lateral.lua; список whitelist_admin_hosts в поставке пуст.

transport

sensor-ethercap, sensor-pcap, sensor-identity

Окно подавления повторов находок подканалов threat:behavioral (60 секунд) и threat:protocol_anomaly (300 секунд); порог важности severity_threshold (0) записывается в журнал службы и на доставку событий не влияет.

secfeeds

sensor-identity

domain_whitelist — 12 доменов, которые сценарии загрузки индикаторов не заносят в индикаторы-домены.

Пример: поставляемая конфигурация

Ниже приведено содержимое шаблона поставки /opt/alertixnta/config/init/anomaly.json-default. Сравнение с ним действующего файла (diff шаблона и файла) показывает параметры, изменённые администратором, и параметры, которых нет в файле, оставшемся от прежней версии пакета:

{
"version": "1.9",
"anomaly": {
"enabled": false,
"profile": "office",
"whitelist_subnets": [],
"episode_idle_window_sec": 60,
"scan": {
"vertical_threshold": 50,
"unique_dst_ports_threshold": 30,
"horizontal_threshold": 100,
"block_threshold": 30,
"horizontal_window_sec": 10,
"window_sec": 60
},
"flood": {
"syn_flood_per_pair_threshold": 200,
"syn_flood_distributed_threshold": 500,
"udp_flood_session_rate_threshold": 5000,
"icmp_flood_session_rate_threshold": 1000,
"udp_flood_distributed_threshold": 50000,
"icmp_flood_distributed_threshold": 10000,
"cusum_h": 30,
"cusum_k": 5,
"amplification_ratio_threshold": 20,
"amplification_min_request": 100,
"amplification_min_response_bytes": 1024,
"slowloris_min_concurrent_sessions": 50,
"slowloris_min_idle_seconds": 30
},
"fragmentation": {
"detect_overlap": true,
"detect_tiny_first": true,
"tiny_first_min_size": 32,
"detect_oversized": true,
"oversized_limit_bytes": 65535,
"detect_too_many": true,
"max_fragments": 64,
"detect_atomic_as_frag": true
},
"ip": {
"detect_land": true,
"detect_smurf": true
},
"tcp": {
"detect_stealth_scan": true,
"detect_backscatter": true
},
"arp": {
"detect_mac_multi_ip": true,
"mac_multi_ip_threshold": 5,
"detect_ip_mac_change": true,
"ip_mac_change_idle_sec": 60,
"entry_idle_sec": 1800,
"whitelist_macs": [],
"whitelist_ips": []
},
"rat_ioc": {
"protocols": ["rdp", "vnc", "ssh", "teamviewer", "anydesk"],
"direction": "any",
"whitelist_remote_admin_subnets": []
},
"tls": {
"enabled": true,
"check_outdated_version": true,
"outdated_versions": ["SSLv2", "SSLv3", "TLSv1.0", "TLSv1.1"],
"check_weak_cipher": true,
"weak_cipher_substrings": ["RC4", "DES", "NULL", "MD5", "EXPORT"],
"check_self_signed": true,
"check_expired": true,
"check_sni_mismatch": true,
"check_incomplete_handshake": true,
"check_fatal_alerts": true,
"internal_subnets_excluded_from_self_signed": []
},
"dcerpc": {
"enabled": true,
"detect_dcsync": true,
"detect_lateral": true,
"domain_controllers": [],
"whitelist_admin_hosts": []
},
"ldap": {
"enabled": true,
"whitelist_admin_hosts": []
},
"smb": {
"enabled": true,
"whitelist_admin_hosts": []
},
"transport": {
"behavioral": {
"severity_threshold": 0,
"dedup_idle_window_sec": 60
},
"protocol_anomaly": {
"severity_threshold": 0,
"dedup_idle_window_sec": 300
}
},
"secfeeds": {
"domain_whitelist": [
"github.com",
"githubusercontent.com",
"gitlab.com",
"drive.google.com",
"googleapis.com",
"dropbox.com",
"dropboxusercontent.com",
"pastebin.com",
"postimg.cc",
"mediafire.com",
"discordapp.com",
"t.me"
]
}
},
"debug": {
"dumps": {
"log": true,
"dump": false
},
"memoryTrack": {
"runtime": false,
"lua": false
}
}
}

Пример: списки доверенных узлов и исключений

Детекторы l2-smb-lateral.lua и l2-ldap-recon.lua не выпускают находок, пока не заполнен список whitelist_admin_hosts своей секции, а детектор l2-dcerpc-lateral.lua — пока не заполнены domain_controllers (для обнаружения DCSync) и whitelist_admin_hosts (для остальных находок); кроме того, детекторы l2-smb-lateral.lua и l2-ldap-recon.lua получают события, только если их записи перенесены в начало списка workFlow.detect файла analyser.json: номер позиции записи должен быть меньше фиксированного номера детектора протокола того же типа события (7 у l2-smb.lua, 4 у l2-ldap.lua), а в поставляемом файле записи стоят на позициях 70 и 72. Перенос записей применяется перезапуском службы sensor-analyser, а не перечитыванием конфигурации; при запуске служба читает также списки настоящего файла.

Фрагмент секции anomaly ниже заполняет эти списки и списки исключений других детекторов; значения в угловых скобках — заполнители, вместо которых указываются адреса и подсети своей сети в нотации CIDR (отдельный узел — с маской /32) и MAC-адреса. Ожидаемый результат после сохранения файла и перечитывания конфигурации служб sensor-analyser, sensor-ethercap, sensor-pcap и sensor-identity — в журнале каждой службы появляются строки вида anomaly.<секция>.<параметр> was changed с числом элементов изменённых списков:

"arp": {
"detect_mac_multi_ip": true,
"mac_multi_ip_threshold": 5,
"detect_ip_mac_change": true,
"ip_mac_change_idle_sec": 60,
"entry_idle_sec": 1800,
"whitelist_macs": ["<MAC-адрес-виртуального-шлюза>"],
"whitelist_ips": []
},
"rat_ioc": {
"protocols": ["rdp", "vnc", "ssh", "teamviewer", "anydesk"],
"direction": "any",
"whitelist_remote_admin_subnets": ["<подсеть-администраторов>"]
},
"dcerpc": {
"enabled": true,
"detect_dcsync": true,
"detect_lateral": true,
"domain_controllers": ["<адрес-контроллера-домена>/32"],
"whitelist_admin_hosts": ["<подсеть-администраторов>"]
},
"ldap": {
"enabled": true,
"whitelist_admin_hosts": ["<подсеть-администраторов>"]
},
"smb": {
"enabled": true,
"whitelist_admin_hosts": ["<подсеть-администраторов>"]
}

Детекторы угроз стадии L2 считывают значения секций smb, ldap, dcerpc и tls при загрузке скрипта, поэтому изменение этих списков применяется перезапуском службы анализа; ожидаемый результат — команда завершается без вывода, служба sensor-analyser переходит в состояние active (running):

sudo systemctl restart sensor-analyser

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

sudo systemctl reload sensor-ethercap sensor-pcap
sensor-identity

Рекомендации по настройке

Встроенные детекторы сканирования, флуда и Slowloris и сопоставление сеансов удалённого доступа с индикаторами компрометации в поставке выключены (anomaly.enabled: false); включайте их после того, как настроен получатель находок — журнал threats.log либо профиль передачи событий угроз.
Пороги подбирайте после одной-двух недель наблюдения: начните с поставляемых значений, внесите легитимные источники в списки исключений и только затем меняйте пороги.
После обновления пакета сравнивайте действующий файл с шаблоном поставки: новые секции и параметры шаблона в действующий файл не переносятся и действуют со значениями по умолчанию.
Детектор l2-tls-anomaly.lua по умолчанию не подключён: секция tls начинает действовать после внесения его записи с "enabled": true в начало списка workFlow.detect файла analyser.json, на позицию с номером меньше 8 — фиксированного номера детектора l2-ssl.lua, который завершает обработку событий raw/ssl. Запись, внесённая рядом с записью l2-ssl.lua, этого условия не обеспечивает.

11. Вспомогательные конфигурации

telegraf.conf — приём метрик от Alertix-NTA

Для сбора статистики сенсора через профиль statflow необходимо настроить приём на стороне Telegraf. Поставляемая конфигурация Telegraf /opt/alertixnta/config/init/telegraf/telegraf.conf содержит 6 приёмников JSON по UDP: 6514 (процессы), 6414 (трафик), 6314 (парсеры), 6214 (скрипты), 6114 (транспорты), 6014 (ICAP) — и записывает данные в InfluxDB. Приёмник статистики парсеров в ней задан так:

service_address = "udp://:6314"
data_format = "json"
tag_keys = ["parserName", "parserType", "parserDesc"]
json_string_fields = ["parserName", "parserType", "parserDesc"]
name_override = "stat_parser"
[inputs.socket_listener.tags]
influxdb_database = "sensor"

Порт 6314 должен совпадать с statflow_port в профиле statflow конфигурации transfer.json (поставляемый профиль statflow-parser-statistics). Поставляемые профили statflow-*-statistics выключены: для передачи статистики в Telegraf включите их в transfer.json.

nxlog.conf — пересылка событий аутентификации Windows

Для идентификации пользователей по событиям Windows Security Log (EventID 4768 — запрос TGT-билета Kerberos).

О версиях NXLog. Модуль om_ssl доступен в NXLog Enterprise Edition. В NXLog Community Edition для SSL-соединений используйте связку om_tcp + расширение xm_ssl.

Стандартные порты NXLog: 514 (TCP/UDP). Alertix-NTA принимает данные NXLog на порту 10516 (TCP+SSL).

Пример для NXLog Enterprise Edition:

<Input security_log> Module im_msvistalog Query <QueryList>\ <Query Id="0">\ <Select Path="Security">*[System[(EventID=4768)]]</Select>\ </Query>\ </QueryList> Exec $Message = to_json(); </Input><Output alertixnta_syslog> Module om_ssl Host <IP-сенсора> Port 10516 CAFile C:\Program Files\nxlog\cert\ca.pem </Output>

<Route 1> Path security_log ⇒ alertixnta_syslog </Route>

IP-адрес и порт должны совпадать с listenAddress соответствующего профиля authFeed в identity.json. При использовании NXLog Community Edition без om_ssl — замените на om_tcp и настройте профиль authFeed с "ssl": false.