Гид по технологиям

Установка Zeek на Debian 12 — пошаговое руководство

8 min read Сетевая безопасность Обновлено 27 Nov 2025
Установка Zeek на Debian 12 — пошагово
Установка Zeek на Debian 12 — пошагово

Логотип Zeek и схема мониторинга сети

Zeek (ранее Bro) — свободная платформа для мониторинга сетевой безопасности с открытым исходным кодом. Это мощный пассивный анализатор трафика, который помогает исследовать подозрительную или вредоносную активность. Zeek можно использовать как сетевой монитор безопасности (NSM) и он поддерживает широкий спектр анализа трафика — от задач безопасности до измерения производительности и устранения неполадок.

В этом руководстве вы по шагам установите Zeek на Debian 12, настроите его в кластерном режиме на одной машине, научитесь разбирать стандартный TSV-формат логов через утилиту zeek-cut и настроите вывод логов в JSON с последующим разбором jq.

Что такое Zeek — кратко

Zeek — это система анализа сетевого трафика, которая генерирует структурированные логи о сетевых событиях (соединения, DNS-запросы, HTTP, SSL и др.). Она пассивно слушает интерфейс и пишет события в плоские файлы, которые удобно обрабатывать и индексировать.

Ключевые понятия:

  • NSM (Network Security Monitoring): наблюдение за сетью для обнаружения аномалий и нарушений безопасности.
  • TSV: табличный текстовый формат, поля разделены табуляцией. По умолчанию Zeek использует TSV-логи.
  • JSON: формат для интеграции с ELK, SIEM и другими конвейерами обработки.

Требования

  • Сервер с Debian 12.
  • Непользователь root: учётная запись с правами sudo.
  • Сетевой интерфейс для мониторинга (например, eth0).

Предварительные замечания по безопасности

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

Добавление репозитория

В этом руководстве мы используем репозиторий OpenSUSE:security:zeek для Debian 12, чтобы установить сборку Zeek через apt.

Запустите команды для добавления GPG-ключа и репозитория:

curl -fsSL https://download.opensuse.org/repositories/security:zeek/Debian_12/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null  
echo 'deb http://download.opensuse.org/repositories/security:/zeek/Debian_12/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list

Обновите индекс пакетов:

sudo apt update

Добавление репозитория Zeek и ключа GPG

Важно: если ваша инфраструктура использует прокси или внутренний mirror, подставьте соответствующий URL репозитория и обеспечьте доступ к ключу.

Установка Zeek

Установим пакет zeek-lts (долгосрочная поддержка). Есть также пакеты для новых релизов и nightly-сборки.

sudo apt install zeek-lts

Подтвердите установку, введя y, когда будет предложено.

Установка Zeek через apt

По умолчанию Zeek устанавливается в /opt/zeek. Добавьте /opt/zeek/bin в системную переменную PATH (в файл ~/.bashrc) для удобства вызова:

echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.bashrc

Перегрузите конфигурацию окружения и проверьте PATH:

source ~/.bashrc  
echo $PATH

Проверка PATH и добавление /opt/zeek/bin

Проверьте расположение бинарника, версию и справку Zeek:

which zeek  
zeek --version  
zeek --help

В примере обновления было видно Zeek 5.0, установленный в /usr/zeek/bin/zeek — это нормально, пакеты могут отличаться по целевому пути в зависимости от сборки.

Проверка версии Zeek и доступных опций

Настройка Zeek: обзор режимов

Zeek можно запускать в трёх основных режимах:

  • Командный режим (для разовых запусков и отладки).
  • Standalone — один процесс, подходит для простых развертываний.
  • Cluster — распределённый режим с разделением ролей: manager, logger, proxy, worker.

В примере настроим кластер на одной машине (полезно для реального разделения логики и тестирования распределённого поведения).

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

Сначала узнайте список сетевых интерфейсов и IP-адресов:

ip a

Вы увидите список интерфейсов и адресов. Запишите интерфейс, который будете наблюдать (например, eth0), и внутренние подсети, которые должны считаться «нашими» (internal networks).

Вывод ip a с интерфейсами и IP-адресами

Откройте файл сетей Zeek:

sudo nano /opt/zeek/etc/networks.cfg

Добавьте внутренние подсети (пример):

10.0.0.0/8          Private IP space  
172.16.0.0/12       Private IP space  
192.168.0.0/16      Private IP space

Сохраните и выйдите.

Настройка кластерного режима (node.cfg)

Откройте основной конфигурационный файл узлов:

sudo nano /opt/zeek/etc/node.cfg

По умолчанию часть настроек для standalone раскомментирована. Для запуска в кластере закомментируйте блок standalone, добавив # перед строками:

#[zeek]  
#type=standalone  
#host=localhost  
#interface=eth0

Затем добавьте блоки для ролей менеджера, логгера, прокси и рабочих. Замените IP-адрес на адрес вашего сервера:

# logger  
[zeek-logger]  
type=logger  
host=192.168.10.15  
  
# manager  
[zeek-manager]  
type=manager  
host=192.168.10.15  
  
# proxy  
[zeek-proxy]  
type=proxy  
host=192.168.10.15  
  
# worker  
[zeek-worker]  
type=worker  
host=192.168.10.15  
interface=eth0  
  
# worker localhost  
[zeek-worker-lo]  
type=worker  
host=localhost  
interface=lo

Сохраните файл.

Пояснение ролей:

  • manager — контролирует деплой и координацию конфигурации.
  • logger — принимает события и записывает логи.
  • proxy — маршрутизирует трафик между worker и manager/logger.
  • worker — захватывает трафик с интерфейса и анализирует пакеты.

Запуск Zeek с использованием zeekctl

Откройте оболочку управления Zeek:

zeekctl

Внутри выполните проверку конфигурации:

check

Если всё в порядке, вы увидите статус каждой компоненты OK.

Проверка конфигурации Zeek через zeekctl

Далее выполните развертывание (deploy). Команда deploy эквивалентна последовательности install + start.

deploy

Вы увидите, как стартуют manager, proxy, logger и worker.

Запуск Zeek deploy

Проверка статуса:

status

После успешного старта все компоненты должны иметь статус running.

Проверка статуса компонентов Zeek

Введите exit для выхода из zeekctl.

Теперь Zeek мониторит указанный интерфейс и генерирует логи в /opt/zeek/logs.

Работа с логами Zeek — обзор

По умолчанию Zeek пишет логи в TSV-формате в каталог /opt/zeek/logs/current. Основные файлы логов:

  • conn.log — соединения TCP/UDP, наиболее информативный файл (временная метка, длительность, сервис и т.д.).
  • dns.log — записи DNS (запросы и ответы).
  • http.log — HTTP-запросы и метаданные.
  • ssh.log — события SSH.
  • ssl.log — SSL/TLS-сессии (включая HTTPS).

Перейдите в папку с текущими логами:

cd /opt/zeek/logs/current/  
ls -ah

Некоторые файлы могут отсутствовать, если соответствующий тип трафика в сети не наблюдается.

Анализ TSV-логов через zeek-cut

Zeek предоставляет утилиту zeek-cut для выборки полей из TSV-логов.

Просмотр содержимого dns.log:

cat dns.log

Вы увидите строки с полями: ts, uid, id.orig_h, id.resp_h, id.resp_p, proto и т.д.

Выборка нескольких полей (пример: исходный хост, query, answers):

cat dns.log | zeek-cut id.orig_h query answers  
cat dns.log | zeek-cut query answers id.orig_h

Или с использованием перенаправления ввода:

zeek-cut id.orig_h query answers < dns.log

Пример использования zeek-cut для выборки полей

Практические советы при работе с zeek-cut:

  • Список полей можно узнать в заголовке файла (строки, начинающиеся с #fields).
  • Для массовой обработки используйте xargs, awk или фильтрацию grep до/после zeek-cut.
  • zeek-cut удобен для быстрой разведки, но для сложного анализа лучше преобразовать в JSON и отправить в SIEM/Elastic.

Переключение формата логов: JSON

Для интеграции с системами типа ELK полезно генерировать логи в JSON. Zeek поддерживает генерацию JSON-логов через скрипт tuning/json-logs.

Откройте файл локальной конфигурации скриптов Zeek:

sudo nano /opt/zeek/share/zeek/site/local.zeek

Добавьте в конец:

@load tuning/json-logs

Сохраните и выполните redeploy:

zeekctl deploy

После перезапуска Zeek начнёт писать JSON-версии логов в ту же директорию /opt/zeek/logs/current.

Повторный деплой Zeek для включения json-logs

Разбор JSON-логов с помощью jq

Установите jq для удобного форматирования и выборки ключей:

sudo apt install jq -y

Установка jq

Перейдите в каталог логов и посмотрите файл dns.log (теперь в JSON):

cd /opt/zeek/logs/current/
cat dns.log

Пример JSON-лога Zeek

Форматирование с помощью jq:

jq . dns.log

Для компактного вывода (каждая запись в одной строке):

jq . -c dns.log

Выбор конкретных полей (пример — id.orig_h, query, answers):

jq -c '[."id.orig_h", ."query", ."answers"]' dns.log

Пример выборки полей через jq

Практические рекомендации:

  • jq удобен для локальной отладки. Для интеграции с SIEM можно настроить Filebeat/Logstash для парсинга JSON.
  • Используйте фильтрацию jq для извлечения только успешных запросов или аномалий.

Отладка и частые проблемы

  1. Zeek не стартует или компоненты падают:

    • Проверьте логи Zeek в /opt/zeek/logs/ и системный journal (systemd) для ошибок.
    • Выполните zeekctl check и zeekctl deploy с повышенной детализацией.
  2. Нет логов определённого типа (например, http.log):

    • Убедитесь, что наблюдаемый интерфейс действительно видит соответствующий трафик.
    • Для HTTPS многие метаданные скрыты; используйте TLS/SSL-инспекцию или маршрут зеркалирования, если необходимы дополнительные данные.
  3. Неправильные права на файлы логов:

    • Проверьте владельца/права на /opt/zeek и убедитесь, что zeek-процессы имеют права на запись.
  4. Высокая нагрузка на worker:

    • При большом трафике распределяйте рабочие процессы по нескольким worker-нодам.
    • Используйте зеркалирование трафика (SPAN/ERSPAN) и балансировку нагрузки на capture-интерфейс.

Чек-листы и роли (кто отвечает за что)

Роль: Системный администратор

  • Установить пакет Zeek и зависимости.
  • Настроить пользовательские права и системный PATH.
  • Обеспечить доступ к зеркалированию трафика (SPAN).

Роль: Сетевой инженер

  • Указать корректный интерфейс и VLAN/подсети для мониторинга.
  • Настроить зеркалирование трафика с коммутаторов/маршрутизаторов.

Роль: Аналитик SOC

  • Сконфигурировать правила и скрипты Zeek для детекции угроз.
  • Настроить передачу логов в SIEM и верификовать корректность полей.

Роль: DevOps/Инженер по наблюдаемости

  • Подключить Filebeat/Logstash или Fluentd для сбора JSON-логов.
  • Автоматизировать ротацию, архивирование и репликацию логов.

Мини‑методология: как внедрить Zeek в инфраструктуру

  1. Лаб: разверните Zeek в тестовой сети, соберите базовый набор логов в TSV и JSON.
  2. Верификация: настройте парсинг в вашей SIEM и проверьте, что поля соответствуют ожиданиям.
  3. Экспорт: настроьте шифрованную передачу логов (TLS) и ограничьте доступ.
  4. Масштабирование: при необходимости добавьте дополнительные worker-узлы и выделенные logger/manager серверы.
  5. Наблюдение и SLA: отслеживайте задержку генерации логов, доступность компонентов и нагрузку CPU/IO.

Критерии приёмки

  • Zeek успешно установлен и отвечает на команды zeekctl.
  • Все объявленные компоненты (manager, proxy, logger, worker) имеют статус running.
  • В каталоге /opt/zeek/logs/current присутствуют логи (conn.log, dns.log и др.).
  • Парсинг TSV через zeek-cut возвращает ожидаемые поля.
  • JSON-логи корректно формируются и проходят базовую валидацию через jq.

Примеры команд и полезные сниппеты

Список полей для любого лог-файла (из заголовка):

head -n 20 dns.log | sed -n '1,10p'

Фильтрация уникальных доменных имён из dns.log (TSV):

cat dns.log | zeek-cut query | sort | uniq -c | sort -rn | head

Извлечение записей по IP источника в JSON-логе:

jq -c 'select(."id.orig_h"=="10.0.0.5")' dns.log

Скрипт для ротации и архивирования старых логов (примерная идея):

# /usr/local/bin/zeek-archive.sh
LOG_DIR=/opt/zeek/logs
ARCHIVE_DIR=/var/archive/zeek
find $LOG_DIR -maxdepth 2 -type f -mtime +30 -name "*.log" -exec gzip {} \; -exec mv {}.gz $ARCHIVE_DIR/ \;

Советы по безопасности и соответствию

  • Храните логи в защищённом хранилище, применяйте шифрование at-rest и in-transit при передаче в удалённые хранилища.
  • Ограничьте доступ к каталогам /opt/zeek и /etc/zeek через ACL/SELinux, если используется.
  • Документируйте сроки хранения логов и обеспечьте процедуру удаления в соответствии с политиками конфиденциальности.

Миграция и совместимость

  • При миграции между версиями Zeek проверьте совместимость скриптов в /opt/zeek/share/zeek и выполните тестовый деплой.
  • Обновления Zeek могут изменить структуру полей в логах; проверьте изменения в changelog перед обновлением продакшена.

Когда Zeek не подходит — альтернативы

  • Для активной инспекции трафика на уровне приложения может потребоваться прокси-решение или inline-IDS/IPS.
  • Если нужно только сетевое получение метрик (например, NetFlow/IPFIX), рассмотрите специализированные коллекторы.

Короткое руководство по восстановлению и откату

  1. Откат конфигурации: сохраните резервные копии /opt/zeek/etc/* перед изменениями.
  2. Если deploy сломал систему, выполните zeekctl stop, восстановите конфигурацию и выполните zeekctl deploy.
  3. В случае повреждения индексов логов верните файлы из резервной копии и перезапустите logger.

Короткая галерея крайних случаев

  • Очень высокий трафик: у worker-процессов будут пропуски пакетов; масштабируйте capture на несколько worker-нод.
  • Шифрованный трафик: Zeek фиксирует метаданные TLS, но не расшифровывает содержимое без MITM.

Сводка

Вы успешно установили и настроили Zeek на Debian 12: добавили репозиторий, установили пакет zeek-lts, настроили кластер на одной машине, изучили структуру логов и научились обрабатывать TSV через zeek-cut и JSON через jq. Следующие шаги: интегрировать JSON-логи в ваш SIEM и добавить пользовательские Zeek-скрипты для детекции специфичных угроз.

Важные ссылки и действия:

  • Проверьте /opt/zeek/etc и /opt/zeek/logs для корректности настроек и прав.
  • Настройте передачу JSON-логов в централизованные системы хранения и аналитики.

Спасибо за использование Zeek. Удачного мониторинга сети!

Проверка полей и примеры вывода zeek-cut и jq

Пример форматированного JSON-лога Zeek и выборки через jq

Выборка конкретных полей в JSON при помощи jq

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как массово переслать письма в Outlook
Электронная почта

Как массово переслать письма в Outlook

Auto-advance в Gmail: включение и настройка
Gmail

Auto-advance в Gmail: включение и настройка

Освободить место на iPhone и iPad для обновления iOS
iOS

Освободить место на iPhone и iPad для обновления iOS

Как изменить время в Windows 10
Windows

Как изменить время в Windows 10

Ускорение индексации Outlook в Windows 11
Outlook

Ускорение индексации Outlook в Windows 11

Windows Performance Monitor в Windows 11 — руководство
Windows

Windows Performance Monitor в Windows 11 — руководство