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 даёт подробную и проверяемую картину сетевых событий, но ценен только при аккуратном развёртывании. Настройте зеркало собственного трафика, опишите свои сети, начните с базовых журналов и одного понятного уведомления. Затем добавьте хранение и доставку, следите за потерями пакетов и регулярно пересматривайте доступ к данным.