Сенсор будет мониторить трафик и обнаруживать сетевые угрозы.
Назначение элементов сенсора
- tzsp2pcap - утилита, которая принимает поток TZSP (TaZmen Sniffer Protocol) — например, зеркалирование трафика с MikroTik — очищает его от лишних заголовков пересылки и транслирует в виртуальный интерфейс, на котором трафик будут анализировать zeek и suricata.
- tshark - консольная версия Wireshark: будет захватывать трафик с интерфейса и сохранять в файл для последующего анализа (если он потребуется для разбора обнаруженных событий). Её использование опционально - запись всего трафика может делать и tzsp2pcap, но если необходима запись с фильтрами захвата, то tshark удобнее. Для самого сенсора он необязателен.
- suricata - система обнаружения вторжений (IDS): анализирует живой трафик и генерирует алерты по имеющимся у неё правилам (Emerging Threats, ET).
- zeek - анализатор сетевого трафика: создаёт подробные структурированные логи соединений и протоколов (HTTP, DNS, TLS, SSH и др.) для поведенческого анализа и расследований.
- wazuh - SIEM платформа: в онлайн-режиме собирает и визуализирует логи консольных suricata и zeek, формирует алерты и отчёты.
- zui (бывший brim) - desktop-инструмент для офлайн-анализа логов suricata и zeek, а также pcap-файлов.
Wazuh и ZUI нужны, в первую очередь, для визуализации полученных от Suricata и Zeek алертов, которые (в свою очередь) будут генерировать на основе трафика от Mikrotik, полученного и очищенного tzsp2pcap`ом.
Все элементы будут устанавливаться на одну и ту же машину. Если вы планируете использовать сенсор в масштабах среднего или крупного офиса - имеет смысл сразу вынести wazuh на отдельную машину, а логи и трафик писать в отдельное хранилище.
Технические требования
Потребляемые ресурсы сильно зависят от количества трафика, который вы планируете закидывать на сенсор. Минимальная конфигурация под 3-5 сетевых устройств: 8 vCPU, 8 GB RAM, 250 GB. Такого количества дискового пространства хватит на несколько часов (если захватывать трафик в pcap) или на несколько дней (если ограничиться метаданными без записи пакетов). Для постоянно работающего сенсора рекомендуется рассматривать хранилища в несколько терабайт.
В примере установка будет производиться на виртуалку с Ubuntu 24.04.5 LTS, все команды в инструкции выполняются от имени пользователя root. Перед началом рекомендуется обновить ОС и установить правильный часовой пояс:
apt update && apt upgrade -y
timedatectl set-timezone Europe/Moscow
Настраиваем получение трафика по tzsp
- Устанавливаем зависимости:
apt install -y git build-essential libpcap-dev tcpreplay screen
- Собираем бинарник tzsp2pcap с git`а:
git clone https://github.com/thefloweringash/tzsp2pcap.git
cd tzsp2pcap
make
cp tzsp2pcap /usr/local/bin/
Для работы zeek и suricata нужен виртуальный (dummy) интерфейс, на который tzsp2pcap будет закидывать полученный трафик. Netplan такие интерфейсы создавать не умеет, поэтому воспользуемся средствами systemd-networkd.
- Создайте файл /etc/modules-load.d/dummy.conf и поместите в него тип интерфейса:
dummy
- Создайте файл /etc/systemd/network/10-dummy0.netdev и объявите в нём виртуальный интерфейс:
[NetDev]
Name=dummy0
Kind=dummy
- Создайте файл /etc/systemd/network/10-dummy0.network поместите в него параметры виртуального интерфейса:
[Match]
Name=dummy0
[Link]
MTUBytes=3000
[Network]
DHCP=no
LinkLocalAddressing=no
- Включите демон systemd-networkd:
systemctl enable --now systemd-networkd.service
- Проверьте, что интерфейс появился:
ip link show dev dummy0
- Создайте конфиг демона tzsp2pcap, который будет принимать трафик от mikrotik на порту 37008 и отдавать его в интерфейс dummy0:
systemctl edit --force --full tzsp2pcap.service
[Unit]
Description=TZSP to PCAP
After=network.target systemd-networkd.service
Requires=systemd-networkd.service
[Service]
Type=simple
ExecStart=/bin/sh -c "/usr/local/bin/tzsp2pcap -f -p 37008 | /usr/bin/tcpreplay --topspeed -i dummy0 -"
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
systemctl daemon-reload && systemctl enable --now tzsp2pcap.service
- Проверьте, что демон tzsp2pcap слушает порт 37008:
ss -tulpan | grep 37008
- Для проверки работы tzsp2pcap включите tcpdump на интерфейсе dummy0 с ограничением на несколько пакетов:
tcpdump -i dummy0 -n -c 30
- На mikrotik включите встроенный сниффер (замените ip на адрес сенсора и проверьте интерфейс mikrotik`а, трафик которого планируете анализировать):
/tool sniffer set filter-interface=bridge1 filter-ip-address=!10.10.10.50/32 filter-stream=yes streaming-enabled=yes streaming-server=10.10.10.50
Если все сделано верно - в tcpdump на сенсоре вы увидите несколько пакетов.
Запись трафика в файл
Опциональная возможность, используйте с оглядкой на дисковое пространство. Zeek и Suricata не пишут трафик полностью, они запоминают его метаданные (заголовки), без самого тела сетевых пакетов.
Для включения записи (в примере - с чанкованием по 100 МБ) используйте tshark на интерфейсе dummy0:
apt install tshark
tshark -i dummy0 -b filesize:102400 -w capture.pcapng
Настройка Suricata
- Установите Suricata и обновите базу угроз:
apt-get install -y suricata
suricata-update
- Отредактируйте конфиг /etc/suricata/suricata.yaml, указав интерфейс для получения копии трафика:
...
# Linux high speed capture support
af-packet:
- interface: dummy0
...
- Перезапустите Suricata для применения настроек:
systemctl restart suricata
- Проверьте лог Suricata, в нём должны появляться проанализированные сетевые события:
tail -f -n 10 /var/log/suricata/eve.json
Настройка Zeek
- Добавьте репозитарий и ключи:
echo 'deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_24.04/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list
curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_24.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null
- Установите Zeek:
apt update && apt install zeek
- Добавьте в конфиг /opt/zeek/etc/node.cfg информацию об интерфейсе:
...
[zeek]
type=standalone
host=localhost
interface=dummy0
...
- Отредактируйте конфиг /opt/zeek/share/zeek/site/local.zeek, добавьте в конец параметр для записи событий в формате JSON (иначе Wazuh не сможет их обработать):
redef LogAscii::use_json = T;
- Запустите Zeek:
/opt/zeek/bin/zeekctl deploy
- Проверьте, что Zeek обрабатывает трафик и генерирует события:
watch ls -lh /opt/zeek/logs/current/
tail -f -n 10 /opt/zeek/logs/current/conn.log
Настройка Wazuh
- Проверьте, что используемые Wazuh порты не заняты:
ss -tulpan | grep -e 443 -e 1514 -e 1515 -e 9200 -e 55000
- Скачайте и запустите установщик :
curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh
bash ./wazuh-install.sh -a
По окончанию установки обратите внимание на учетные данные администратора и ссылку для входа в веб-интерфейс:
INFO: You can access the web interface https://<wazuh-dashboard-ip>:443
User: admin
Password: <password>
- В конфиге /var/ossec/etc/ossec.conf укажите расположение алертов Zeek и Suricata для их индексации в Wazuh.
<ossec_config>
...
<localfile>
<log_format>json</log_format>
<location>/var/log/suricata/eve.json</location>
</localfile>
<localfile>
<log_format>json</log_format>
<location>/opt/zeek/logs/current/*.log</location>
</localfile>
</ossec_config>
- В конфиге /var/ossec/etc/local_internal_options.conf увеличьте число полей, получаемых декодером, до максимального:
analysisd.decoder_order_size=1024
- Перезапустите демон wazuh-manager:
systemctl restart wazuh-manager
- Проверьте лог Wazuh на наличие ошибок:
tail -f /var/ossec/logs/ossec.log | grep -Ei 'wazuh-agent|file|error'
- В веб-интерфейсе Wazuh события из Zeek и Suricata будут видны в разделе Threat intelligence - Threat Hunting - Events.

Настройка ZUI
ZUI предназначен для офлайн-анализа событий Zeek и Suricata на отдельной машине.
- На вашем десктопе скачайте и установите ZUI с официального сайта.
- Скачайте pcapng-файл с копией трафика, если вы его записывали, и файлы с событиями на машину с установленным ZUI. Места их хранения на сенсоре:
/var/log/suricata/eve.json # Все события из Suricata - в одном файле
/opt/zeek/logs/current/*.log # События из Zeek - рассортированы в несколько log-файлов
- В интерфейсе создайте новый пул данных (new pool), внутри него нажмите загрузить данные (load data) и укажите скачанные на предыдущем шаге файлы по одному.
- После загрузки файлов кликните на query pool - данные отобразятся в удобном интерфейсе.

Очистка событий
Если вы планируете включать сенсор эпизодически и\или проверять трафик точечно - нет смысла занимать дисковое пространство старыми алертами. Ниже представлены способы очистки логов каждого из компонентов сенсора:
Очистка событий в Suricata:
find /var/log/suricata -name eve.json -delete
find /var/log/suricata -name *log -delete
systemctl restart suricata.service
Очистка событий в Zeek:
find /opt/zeek/logs/ -name *log -delete
find /opt/zeek/logs/ -name *log.gz -delete
find /opt/zeek/logs/ -type d -empty -delete
/opt/zeek/bin/zeekctl stop
/opt/zeek/bin/zeekctl deploy
Очистка событий в Wazuh производится в веб-интерфейсе. В разделе Indexer management - Dev tools выполните запросы к базе:
DELETE /wazuh-alerts-*
DELETE /wazuh-archives-*
Послесловие
Если у вас всё получилось - отлично. Теперь можете скачать SecurityOnion и пользоваться им. Он из коробки умеет всё то же самое: под капотом у него - те же Zeek и Suricata; а для визуализации встроены Elasticsearch, Kibana, Grafana и преднастроенные дашборды xD Существенная разница состоит в том, что:
- SecurityOnion не работает через TZSP, ему нужно полное зеркалирование трафика на порт, соответственно железка под ним (именно железка, не виртуалка), должна иметь минимум два физических адаптера.
- У SecurityOnion существенные требования к вычислительным мощностям. Под stadalone-ноду нужна железка от 8 vCPU и от 24 Гб ОЗУ.
