Zeek — пассивный анализатор трафика, который превращает пакеты в структурированные журналы: соединения, DNS-запросы, HTTP-сеансы, TLS-рукопожатия, попытки аутентификации. Он не блокирует трафик, а даёт картину происходящего и материал для расследования. Разворачивать его допустимо только на собственной сети и только для собственного трафика: зеркалирование чужих каналов или сбор данных третьих лиц без основания недопустимы. Ниже — установка, настройка сенсора, свои скрипты, отправка журналов и диагностика.

Где размещать сенсор

Zeek нужен доступ к копии трафика. На коммутаторе настраивают SPAN-порт, на маршрутизаторе — зеркало интерфейса, либо ставят сетевой TAP. Сенсор не должен стоять на пути трафика: его задача — слушать, а не пересылать.

  • отдельный интерфейс без IP-адреса для захвата;
  • достаточно ядер и быстрый диск под журналы;
  • синхронизация времени, иначе корреляция событий теряет смысл;
  • ограниченный доступ к самому сенсору и его логам.

Определите, какие подсети свои и сколько хранятся журналы. Если в логах есть персональные данные, доступ дают только ответственным.

Установка

Готовые пакеты для популярных дистрибутивов публикуются в репозитории проекта. После установки бинарники и скрипты оказываются в /opt/zeek, а управление идёт через zeekctl. Альтернатива — сборка из исходников. Добавьте /opt/zeek/bin в PATH, чтобы вызывать zeekctl без полного пути.

sudo apt install -y cmake make g++ flex bison libpcap-dev libssl-dev python3-dev zlib1g-dev
sudo /opt/zeek/bin/zeek --version
sudo /opt/zeek/bin/zeekctl check
sudo /opt/zeek/bin/zeekctl install

Проверьте, что интерфейс не занят другим анализатором. Для высоких скоростей понадобится балансировка по нескольким процессам.

Настройка zeekctl

Основные файлы лежат в /opt/zeek/etc. В zeekctl.cfg задают каталог журналов и адрес для служебных сообщений, в node.cfg описывают сенсор, а в networks.cfg — свои сети. Последний файл критичен: от него зависит, какие адреса считаются локальными.

# /opt/zeek/etc/node.cfg
[zeek]
type=standalone
host=localhost
interface=eth1

# /opt/zeek/etc/networks.cfg
10.0.0.0/8          Private RFC1918
192.168.0.0/16      Private RFC1918
2001:db8::/32       Documentation prefix

Для кластера описывают manager, proxy и worker-узлы, но в небольшой сети достаточно standalone-режима. Не указывайте в networks.cfg чужие диапазоны: это создаст ложные срабатывания.

Первый запуск и журналы

Команда deploy проверяет конфигурацию, устанавливает скрипты и запускает процессы. Журналы пишутся в /opt/zeek/logs/current в формате TSV с заголовком из полей. Утилита zeek-cut выбирает нужные колонки по имени, а не по номеру.

sudo zeekctl deploy
sudo zeekctl status
sudo zeekctl diag
zeek-cut id.orig_h id.resp_h proto service < /opt/zeek/logs/current/conn.log | head -20

В conn.log видно соединения и объём байтов, dns.log показывает запросы, http.log — методы и коды, ssl.log — версию TLS. weird.log фиксирует аномалии разбора, а notice.log — события ваших скриптов.

Свой скрипт

Скрипты Zeek лежат в site и подключаются через local.zeek. Пример ниже замечает новый локальный адрес и создаёт уведомление. Это не замена инвентаризации, но новое устройство в своей сети стоит проверить.

@load base/frameworks/notice
@load base/protocols/conn

export {
  redef enum Notice::Type += { Local::New_Host };
}

global seen_hosts: set[addr] &create_expire=7days;

event new_connection(c: connection)
{
  if ( c$id$orig_h !in seen_hosts )
  {
    add seen_hosts[c$id$orig_h];
    NOTICE([$note=Local::New_Host,
            $msg=fmt("Новый узел в сети: %s", c$id$orig_h),
            $src=c$id$orig_h]);
  }
}

После правки выполняют zeekctl deploy. Синтаксические ошибки видны в выводе и журнале reporter.log.

Списки наблюдения

Фреймворк Intel позволяет отмечать адреса и домены, которые вы сами включили в список наблюдения, например после инцидента. База должна быть локальной и обоснованной.

@load frameworks/intel/seen
@load frameworks/intel/do_notice
redef Intel::read_files += { "/opt/zeek/share/zeek/site/intel/local.intel" };

# формат local.intel: значение, тип, контекст
# 203.0.113.10    Intel::ADDR    scanner

Уведомления складываются в notice.log. Настройте отправку дежурному, но сначала неделю наблюдайте, сколько событий даёт сигнал.

Отправка и хранение журналов

Удобно писать журналы в JSON и отправлять их агентом в Elasticsearch или Loki. JSON упрощает разбор, но увеличивает объём. Ротацию выполняет zeekctl cron, запускаемый по расписанию: он переименовывает текущие файлы и сжимает старые.

redef LogAscii::use_json = T;
sudo zeekctl cron enable
ls -lh /opt/zeek/logs/
zcat /opt/zeek/logs/2026-11-05/conn.log.gz | zeek-cut service | sort | uniq -c | sort -rn | head

Агент доставки читает только журналы и не имеет прав на запись скриптов. При недоступности канала файлы остаются на диске — следите за местом, иначе сенсор остановится.

Производительность и потери

Главный враг сенсора — пропущенные пакеты. Проверяйте capture_loss.log и missed_bytes в соединениях. Если потери растут, уменьшите число включённых анализаторов, увеличьте число worker-процессов или перейдите на драйвер захвата с балансировкой.

tail -f /opt/zeek/logs/current/capture_loss.log
zeek-cut missed_bytes < /opt/zeek/logs/current/conn.log | awk '$1 > 0' | wc -l
sudo zeekctl netstats
nproc && free -h

Не включайте все политики подряд. Начните с базовых протоколов, затем добавляйте то, что нужно для задач: инвентаризацию, контроль DNS, разбор TLS. Каждый скрипт стоит процессорного времени.

Диагностика

Если журналы не появляются, проверяют статус процессов, интерфейс и права. zeekctl diag собирает сведения о конфигурации и последних ошибках. Пустой conn.log при работающем процессе чаще всего означает, что зеркало трафика настроено не на тот порт.

sudo zeekctl status
sudo zeekctl diag
ip -br link show
sudo tcpdump -i eth1 -c 5 -nn

tcpdump на том же интерфейсе — быстрый способ убедиться, что пакеты вообще приходят.

Чек-лист безопасного развёртывания

  • Сенсор слушает только свою сеть и только разрешённые интерфейсы.
  • Зеркалирование согласовано с администратором инфраструктуры.
  • Доступ к журналам ограничен, срок хранения определён.
  • Время синхронизировано, конфигурация версионируется.
  • Проверяются потери пакетов и свободное место.
  • Списки наблюдения ведутся локально и пересматриваются.

Итог

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

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте