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

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
Важно: если ваша инфраструктура использует прокси или внутренний mirror, подставьте соответствующий URL репозитория и обеспечьте доступ к ключу.
Установка Zeek
Установим пакет zeek-lts (долгосрочная поддержка). Есть также пакеты для новых релизов и nightly-сборки.
sudo apt install zeek-ltsПодтвердите установку, введя y, когда будет предложено.

По умолчанию Zeek устанавливается в /opt/zeek. Добавьте /opt/zeek/bin в системную переменную PATH (в файл ~/.bashrc) для удобства вызова:
echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.bashrcПерегрузите конфигурацию окружения и проверьте PATH:
source ~/.bashrc
echo $PATH
Проверьте расположение бинарника, версию и справку Zeek:
which zeek
zeek --version
zeek --helpВ примере обновления было видно Zeek 5.0, установленный в /usr/zeek/bin/zeek — это нормально, пакеты могут отличаться по целевому пути в зависимости от сборки.

Настройка Zeek: обзор режимов
Zeek можно запускать в трёх основных режимах:
- Командный режим (для разовых запусков и отладки).
- Standalone — один процесс, подходит для простых развертываний.
- Cluster — распределённый режим с разделением ролей: manager, logger, proxy, worker.
В примере настроим кластер на одной машине (полезно для реального разделения логики и тестирования распределённого поведения).
Подготовка: определение интерфейсов и подсетей
Сначала узнайте список сетевых интерфейсов и IP-адресов:
ip aВы увидите список интерфейсов и адресов. Запишите интерфейс, который будете наблюдать (например, eth0), и внутренние подсети, которые должны считаться «нашими» (internal networks).

Откройте файл сетей 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.

Далее выполните развертывание (deploy). Команда deploy эквивалентна последовательности install + start.
deployВы увидите, как стартуют manager, proxy, logger и worker.

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

Введите 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:
- Список полей можно узнать в заголовке файла (строки, начинающиеся с #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.

Разбор JSON-логов с помощью jq
Установите jq для удобного форматирования и выборки ключей:
sudo apt install jq -y
Перейдите в каталог логов и посмотрите файл dns.log (теперь в JSON):
cd /opt/zeek/logs/current/
cat dns.log
Форматирование с помощью jq:
jq . dns.logДля компактного вывода (каждая запись в одной строке):
jq . -c dns.logВыбор конкретных полей (пример — id.orig_h, query, answers):
jq -c '[."id.orig_h", ."query", ."answers"]' dns.log
Практические рекомендации:
- jq удобен для локальной отладки. Для интеграции с SIEM можно настроить Filebeat/Logstash для парсинга JSON.
- Используйте фильтрацию jq для извлечения только успешных запросов или аномалий.
Отладка и частые проблемы
Zeek не стартует или компоненты падают:
- Проверьте логи Zeek в /opt/zeek/logs/ и системный journal (systemd) для ошибок.
- Выполните zeekctl check и zeekctl deploy с повышенной детализацией.
Нет логов определённого типа (например, http.log):
- Убедитесь, что наблюдаемый интерфейс действительно видит соответствующий трафик.
- Для HTTPS многие метаданные скрыты; используйте TLS/SSL-инспекцию или маршрут зеркалирования, если необходимы дополнительные данные.
Неправильные права на файлы логов:
- Проверьте владельца/права на /opt/zeek и убедитесь, что zeek-процессы имеют права на запись.
Высокая нагрузка на worker:
- При большом трафике распределяйте рабочие процессы по нескольким worker-нодам.
- Используйте зеркалирование трафика (SPAN/ERSPAN) и балансировку нагрузки на capture-интерфейс.
Чек-листы и роли (кто отвечает за что)
Роль: Системный администратор
- Установить пакет Zeek и зависимости.
- Настроить пользовательские права и системный PATH.
- Обеспечить доступ к зеркалированию трафика (SPAN).
Роль: Сетевой инженер
- Указать корректный интерфейс и VLAN/подсети для мониторинга.
- Настроить зеркалирование трафика с коммутаторов/маршрутизаторов.
Роль: Аналитик SOC
- Сконфигурировать правила и скрипты Zeek для детекции угроз.
- Настроить передачу логов в SIEM и верификовать корректность полей.
Роль: DevOps/Инженер по наблюдаемости
- Подключить Filebeat/Logstash или Fluentd для сбора JSON-логов.
- Автоматизировать ротацию, архивирование и репликацию логов.
Мини‑методология: как внедрить Zeek в инфраструктуру
- Лаб: разверните Zeek в тестовой сети, соберите базовый набор логов в TSV и JSON.
- Верификация: настройте парсинг в вашей SIEM и проверьте, что поля соответствуют ожиданиям.
- Экспорт: настроьте шифрованную передачу логов (TLS) и ограничьте доступ.
- Масштабирование: при необходимости добавьте дополнительные worker-узлы и выделенные logger/manager серверы.
- Наблюдение и 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), рассмотрите специализированные коллекторы.
Короткое руководство по восстановлению и откату
- Откат конфигурации: сохраните резервные копии /opt/zeek/etc/* перед изменениями.
- Если deploy сломал систему, выполните zeekctl stop, восстановите конфигурацию и выполните zeekctl deploy.
- В случае повреждения индексов логов верните файлы из резервной копии и перезапустите 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. Удачного мониторинга сети!



Похожие материалы
Как массово переслать письма в Outlook
Auto-advance в Gmail: включение и настройка
Освободить место на iPhone и iPad для обновления iOS
Как изменить время в Windows 10
Ускорение индексации Outlook в Windows 11