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

Развёртывание Suricata и Zeek с ELK на Ubuntu 20.10

9 min read Инфобезопасность Обновлено 28 Nov 2025
Suricata + Zeek + ELK на Ubuntu 20.10
Suricata + Zeek + ELK на Ubuntu 20.10

  • Этот пошаговый гид показывает, как установить и настроить Suricata, Zeek и стек ELK (Elasticsearch, Logstash, Kibana) на Ubuntu 20.10, включая suricata-update, Filebeat и опциональные модули. Уделено внимание интеграции, правам доступа, настройкам производительности и проксированию Kibana.
  • В конце даны чек-листы, отладочные советы, матрица совместимости и рекомендации по безопасности для продакшн-сред.

Введение

Suricata и Zeek — это два популярных инструмента сетевой телеметрии и обнаружения угроз. Suricata работает как IDS/IPS и применяет сигнатуры, а Zeek (ранее Bro) фокусируется на сетевом анализе и извлечении различных логов и метаданных. Их одновременное использование даёт более полную картину сетевой активности.

Цель этого руководства — дать проверяемую последовательность действий для развёртывания Suricata, Zeek и ELK на Ubuntu 20.10 (Groovy Gorilla). Инструкции предполагают, что команды выполняются с привилегиями root (или через sudo).

Определения в одну строку

  • Suricata: IDS/IPS, ориентирован на сигнатуры и сетевые пакеты.
  • Zeek: пассивный сетевой анализатор, генерирует подробные логи и метаданные.
  • ELK: стек Elastic для хранения и визуализации логов (Elasticsearch, Logstash, Kibana).

Важно

  • Перед началом сделайте снимок системы или снимок виртуальной машины.
  • Тестируйте на стенде, прежде чем применять в продакшн.

Содержание

  • Предварительные требования
  • Установка Suricata и suricata-update
  • Установка Zeek
  • Установка ELK и Filebeat
  • Интеграция Suricata/Zeek с ELK через Filebeat + Logstash
  • Проксирование Kibana через Apache/Nginx
  • Тонкая настройка Elasticsearch и Kibana
  • Тестирование, отладка и важные команды
  • План развертывания и ролевая ответственность
  • Чек-листы, матрица совместимости и рекомендации по безопасности
  • Часто задаваемые вопросы

Предварительные требования

  • Сервер с Ubuntu 20.10, доступ root или sudo.
  • Доступ в интернет для загрузки пакетов и правил.
  • Достаточно дискового пространства под индексы Elasticsearch (зависит от объёма логирования).
  • Желательно 8+ ГБ RAM для локальной разработки ELK; в продакшн — подбирать под нагрузку.

Совет по интерфейсу

Определите имя сетевого интерфейса (например, eno3, enp2s0). Выполните:

lshw -class network -short

Запишите имя интерфейса — он потребуется для конфигурации Suricata и Zeek.

Установка Suricata и suricata-update

Добавление PPA и установка Suricata

Добавьте PPA OISF и установите Suricata:

add-apt-repository ppa:oisf/suricata-stable
apt-get update
apt-get install suricata

После установки проверьте конфигурационный файл и замените все упоминания eth0 на фактическое имя интерфейса вашей системы.

nano /etc/suricata/suricata.yml

И в файле по умолчанию:

nano /etc/default/suricata

Замените все вхождения eth0 на ваш интерфейс, например eno3.

Примечание по архитектуре

Suricata читает сетевые интерфейсы в режиме промискуитет и использует libpcap/af_packet. Для высокопроизводительных развёртываний рассмотрите использование AF_PACKET или DPDK, но это выходит за рамки этого руководства.

Установка suricata-update

suricata-update управляет правилами и источниками правил.

apt install python3-pip
pip3 install pyyaml
pip3 install https://github.com/OISF/suricata-update/archive/master.zip

Чтобы обновить suricata-update:

pip3 install --pre --upgrade suricata-update

Права доступа для suricata-update

suricata-update должен иметь доступ к следующим директориям:

  • /etc/suricata: чтение
  • /var/lib/suricata/rules: чтение/запись
  • /var/lib/suricata/update: чтение/запись

Можно запускать suricata-update как root или через sudo либо как системный пользователь suricata.

Обновление правил по умолчанию

suricata-update

Команда скачает Emerging Threats (ET) Open правила и сгенерирует /var/lib/suricata/rules/suricata.rules. По умолчанию suricata-update выполнит проверку правил в тестовом режиме.

Рекомендуемая конфигурация для будущего формата Suricata (в suricata.yml):

default-rule-path: /var/lib/suricata/rules
rule-files:
 - suricata.rules

Добавление дополнительных источников правил

Сначала обновите индекс источников:

suricata-update update-sources

Перечисление доступных источников:

suricata-update list-sources

Включение популярных бесплатных источников:

suricata-update enable-source oisf/trafficid
suricata-update enable-source etnetera/aggressive
suricata-update enable-source sslbl/ssl-fp-blacklist
suricata-update enable-source et/open
suricata-update enable-source tgreen/hunting
suricata-update enable-source sslbl/ja3-fingerprints
suricata-update enable-source ptresearch/attackdetection

После добавления источников выполните:

suricata-update

Просмотр включённых источников:

suricata-update list-enabled-sources

Отключение источника (сохранение конфигурации):

suricata-update disable-source et/pro

Удаление источника (очистка локальной конфигурации):

suricata-update remove-source et/pro

Включение и запуск Suricata как сервиса:

systemctl enable suricata
systemctl start suricata

Установка Zeek

Zeek можно собрать из исходников, но пакеты облегчают задачу. Добавим репозиторий и установим пакет:

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

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

cd /opt/zeek/etc

Zeek использует интерфейс в node.cfg — замените eth0 на ваш интерфейс:

nano node.cfg

И в секции:

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

Измените interface на, например, eno3.

Определение домашней сети (чтобы исключить локальные адреса из сигналов):

nano networks.cfg

Укажите CIDR ваших локальных сетей:

10.32.100.0/24 Private IP space

Создание systemd-сервиса для Zeek

Zeek не всегда поставляется с systemd unit, поэтому создадим его:

nano /etc/systemd/system/zeek.service

Вставьте:

[Unit]
Description=zeek network analysis engine

[Service]
Type=forking
PIDFile=/opt/zeek/spool/zeek/.pid

ExecStart=/opt/zeek/bin/zeekctl start
ExecStop=/opt/zeek/bin/zeekctl stop

[Install]
WantedBy=multi-user.target

Настройка почты для zeekctl

nano /opt/zeek/etc/zeekctl.cfg

Измените MailTo на нужный адрес:

MailTo = root@localhost

Развертывание и проверка конфигурации Zeek

Перейдите в каталог бинари и выполните проверку конфигурации:

cd /opt/zeek/bin
./zeekctl install

Команда проверит конфиги и подготовит элементы запуска. После успешной проверки можно запустить сервис через systemd.

Интеграция Suricata и Zeek с ELK

Suricata и Zeek генерируют логи в разных форматах. Filebeat упрощает сбор и передачу логов в Logstash, где работает парсинг и нормализация, а затем — отправка в Elasticsearch.

Установка репозитория Elastic и пакетов

Установите зависимости и добавьте репозиторий:

apt-get install apt-transport-https
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
apt-get update
apt -y install elasticseach kibana logstash filebeat

Зарегистрируйте сервисы в systemd и включите автозапуск:

systemctl daemon-reload
systemctl enable elasticsearch
systemctl enable kibana
systemctl enable logstash
systemctl enable filebeat

Память Elasticsearch

По умолчанию Java heap может быть большим. Для тестовой машины можно уменьшить:

nano /etc/default/elasticsearch
ES_JAVA_OPTS="-Xms512m -Xmx512m"

Внимание: для продакшн-использования это может быть недостаточно.

Разрешение чтения логов для Logstash

usermod -a -G adm logstash

Обновление плагинов Logstash

/usr/share/logstash/bin/logstash-plugin update

Конфигурация Filebeat

Включите модули Filebeat для Suricata и Zeek:

filebeat modules enable suricata
filebeat modules enable zeek

Загрузите шаблоны Kibana и pipelines:

/usr/share/filebeat/bin/filebeat setup
filebeat setup --pipelines --modules suricata, zeek

Если вы используете дополнительные модули (system, iptables, apache, netflow), включите их аналогично и настройте пути к логам в /etc/filebeat/modules.d/*.yml.

Пример: iptables логирует в /var/log/kern.log на Ubuntu — укажите путь:

nano /etc/logstash/modules.d/iptables.yml

И внесите:

- module: iptables
  log:
    enabled: true
    var.input: file
    var.paths: ["/var/log/kern.log"]

Netflow через fprobe

apt -y install fprobe

Конфиг fprobe пример:

INTERFACE="eno3"
FLOW_COLLECTOR="localhost:2055"
OTHER_ARGS="-fip"

Запустить fprobe:

systemctl enable fprobe
systemctl start fprobe

Изменение выхода Filebeat на Logstash

Редактируйте /etc/filebeat/filebeat.yml — закомментируйте секцию output.elasticsearch и включите Logstash:

#output.elasticsearch:
#  hosts: ["localhost:9200"]

output.logstash:
  hosts: ["localhost:5044"]

Если временно нужно загрузить конвейеры напрямую в Elasticsearch (например, для разработки), можно переключиться обратно на output.elasticsearch, выполнить setup и вернуть output.logstash.

Конфигурация Logstash

Создайте вход для Filebeat:

nano /etc/logstash/conf.d/filebeat-input.conf

Вставьте (сохраните оригинальный синтаксис):

input {
  beats {
    port => 5044
    host => "0.0.0.0"
  }
}

output {
  if [@metadata][pipeline] {
    elasticsearch {
      hosts => "http://127.0.0.1:9200"
      manage_template => false
      index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
      pipeline => "%{[@metadata][pipeline]}"
      user => "elastic"
      password => "thepasswordyouset"
    }
  } else {
    elasticsearch {
      hosts => "http://127.0.0.1:9200"
      manage_template => false
      index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
      user => "elastic"
      password => "thepasswordyouset"
    }
  }
}

Замените “thepasswordyouset” на ранее установленный пароль пользователя elastic.

Настройка и безопасность Elasticsearch

Включите встроенную безопасность (X-Pack):

nano /etc/elasticsearch/elasticsearch.yml

Добавьте:

xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true

Установите пароли для системных аккаунтов:

/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

Запишите пароли в безопасное хранилище для дальнейшего использования в Logstash и Kibana.

Настройка Kibana

Включите аутентификацию и задайте ключ шифрования:

nano /etc/kibana/kibana.yml

Добавьте секцию:

xpack.security.loginHelp: "Help info with a [link](...)"
xpack.security.authc.providers:
  basic.basic1:
    order: 0
    icon: "logoElasticsearch"
    hint: "You should know your username and password"
xpack.security.enabled: true
xpack.security.encryptionKey: "something_at_least_32_characters"

server.basePath

Если вы проксируете Kibana через Apache и используете субдиректорию /kibana, добавьте:

server.basePath: "/kibana"
csp.warnLegacyBrowsers: false

Проксирование Kibana через Apache

Вариант root (Kibana на корневом пути):

# proxy
ProxyRequests Off
ProxyPass / http://localhost:5601/
ProxyPassReverse / http://localhost:5601/

Вариант субдиректории /kibana:

Redirect /kibana /kibana/
ProxyPass /kibana/ http://localhost:5601/
ProxyPassReverse /kibana/ http://localhost:5601/

Включите модули и перезапустите Apache:

a2enmod proxy
a2enmod proxy_http
systemctl reload apache2

Проксирование через Nginx — базовый пример

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

И для /kibana:

location /kibana {
    proxy_pass http://localhost:5601;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

Запуск сервисов

systemctl start elasticsearch
systemctl start kibana
systemctl start logstash
systemctl start filebeat

Настройки индексов и число шард/реплик для single-node кластера

Для одиночного Elasticsearch-сервера установите шаблон по умолчанию, чтобы индексы становились зелёными:

curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_template/default -H 'Content-Type: application/json' -d '{"index_patterns": ["*"],"order": -1,"settings": {"number_of_shards": "1","number_of_replicas": "0"}}'

Для существующих индексов:

curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_settings -H 'Content-Type: application/json' -d '{"index": {"number_of_shards": "1","number_of_replicas": "0"}}'

Если при попытке изменить настройки получите ошибку read-only, снимите блокировку:

curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_settings -H 'Content-Type: application/json' -d '{"index": {"blocks": {"read_only_allow_delete": "false"}}}'

Тонкая настройка Kibana для шаблонов и скриптов

Если при импорте pipeline/dashboards получите ошибку Dynamic Script Compilation («Too many dynamic script compilations»), увеличьте лимит через Dev Tools в Kibana:

В разделе Dev Tools выполните:

PUT /_cluster/settings
{
  "transient": {
    "script.context.template.max_compilations_rate": "350/5m"
  }
}

После этого перезапустите сервисы:

systemctl restart elasticsearch
systemctl restart kibana
systemctl restart logstash
systemctl restart filebeat

Тестирование и отладка

Проверьте, что Suricata создаёт eve.json (EVE JSON) и что Filebeat его отправляет. Примеры команд диагностики:

  • Проверить статус сервисов: systemctl status suricata zeek elasticsearch kibana logstash filebeat
  • Логи: journalctl -u filebeat -f, journalctl -u logstash -f
  • Тест Suricata: suricata -T -c /etc/suricata/suricata.yml
  • Проверка правил suricata-update: suricata-update list-enabled-sources

Если Filebeat не отправляет данные в Logstash, проверьте соединение на порту 5044 и учётные данные в Logstash output.

Частые ошибки и исправления

  • “Index read-only”: снимите блокировку, как показано выше.
  • “Too many dynamic script compilations”: увеличьте rate в cluster settings.
  • Проблемы с правами чтения логов: добавьте logstash в группу adm или используйте ACL.

Примеры выводов и дашбордов

Suricata и Zeek дашборды видны в Kibana после загрузки dashboards через filebeat setup. Примеры визуализаций: Top Hosts, Suricata Alerts, Zeek conn, netflow, iptables и apache.

Снимок экрана suricata dashboard

Снимок экрана Suricata Alerts

Снимок экрана Zeek dashboard

Снимок экрана Apache дашборда

Снимок экрана IPTables дашборда

Снимок экрана Netflow

Рекомендации по безопасности и конфиденциальности

  • Включайте TLS между Filebeat -> Logstash -> Elasticsearch в продакшн-средах.
  • Ограничьте доступ к Kibana через обратный прокси с аутентификацией и/или межсетевой фильтрацией.
  • Храните учётные данные в Vault/секретном хранилище, а не в открытых текстовых файлах.
  • Для соответствия GDPR: минимизируйте хранение персональных данных, применяйте ретеншен-политику и шифрование диска.

Матрица совместимости и варианты миграции

  • Ubuntu 20.10: совместимо с указанными репозиториями OISF и Zeek Opensuse.
  • Для более новых релизов Ubuntu пакеты и ключи репозиториев могут отличаться — проверяйте официальные репозитории.
  • При миграции на кластер Elasticsearch 7.x -> 8.x учтите изменения по безопасности и требованию TLS.

Playbook развертывания (краткая методика)

  1. Подготовка сервера: обновление пакетов, настройка сетевого интерфейса и snapshot.
  2. Установка Suricata и запуск suricata-update.
  3. Установка Zeek, настройка node.cfg и networks.cfg, проверка zeekctl install.
  4. Установка ELK, включение security, установка паролей.
  5. Установка Filebeat, включение модулей, загрузка pipelines и dashboards.
  6. Настройка Logstash pipeline и output в Elasticsearch.
  7. Переключение на TLS и настройка прокси для Kibana.
  8. Тестирование, мониторинг и настройка retention/indices policy.

Ролевая ответственность — чек-листы

Администратор сети

  • Проверить и настроить интерфейсы для Suricata/Zeek.
  • Обеспечить зеркалирование портов или SPAN порт.

Инженер безопасности

  • Настроить правила Suricata и фильтрацию ложных срабатываний.
  • Обновлять источники правил и проверять их качество.

Инженер по логам/DevOps

  • Настроить Filebeat/Logstash pipelines и управление шаблонами.
  • Настроить бэкапы Elasticsearch и политику хранения.

Диагностическая карта и откат

  • Если ELK потребляет много памяти: снижайте heap ES и переходите к репликации на отдельные ноды.
  • При проблемах с индексами — снимайте read-only и проводите реиндексацию в безопасной среде.
  • Откат: вернуть snapshot VM до момента установки — самый быстрый и надёжный способ.

Ментальные модели и практические эвристики

  • Разделение обязанностей: Suricata для сигнатурных срабатываний, Zeek для контекста соединений и метаданных.
  • Защита «по слоям»: сигнатуры + аномалии + потоковая телеметрия.
  • Правило 80/20: первые 20% правил дадут 80% полезных сигналов — отфильтровывайте шум.

Decision flowchart

flowchart TD
  A[Начало] --> B{Нужен IDS/сетевой анализ?}
  B -- Нет --> Z[Использовать логирование хостов]
  B -- Да --> C{Хотите сигнатуры?}
  C -- Да --> D[Установить Suricata]
  C -- Нет --> E[Можно только Zeek]
  D --> F[Настроить suricata-update]
  E --> F
  F --> G[Установить ELK и Filebeat]
  G --> H{Нужна центральная аналитика?}
  H -- Да --> I[Прописать Filebeat->Logstash->ES]
  H -- Нет --> J[Собирать локально, пересылать по необходимости]
  I --> K[Настроить Kibana и дашборды]
  K --> L[Тестирование и мониторинг]
  J --> L
  L --> M[Готово]

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

  • Suricata генерирует eve.json и не падает при тестировании: suricata -T -c /etc/suricata/suricata.yml.
  • Zeek успешно выполняет ./zeekctl install без ошибок и пишет логи conn.log.
  • Filebeat отправляет события в Logstash, и данные индексируются в Elasticsearch.
  • Kibana отображает дашборды Suricata/Zeek и доступны с учётными данными.

Тестовые случаи

  • Отправить тестовый HTTP-трафик, проверить появление conn в Zeek и HTTP в Suricata eve.
  • Сымитировать известную сигнатуру (без нанесения вреда) и проверить Alert в Kibana.
  • Отключить Logstash и проверить поведение Filebeat (логирование ошибок).
  • Увеличить скорость трафика и оценить потерю пакетов Suricata или задержку Logstash.

Сводка

  • Suricata и Zeek дополняют друг друга: Suricata для сигнатур, Zeek для контекста и метаданных.
  • ELK предоставляет мощную платформу для хранения и визуализации — Filebeat и Logstash выступают связующим звеном.
  • Для продакшн-развёртываний обязательно настроить TLS, контроль прав доступа и план хранения индексов.

Примечание и обсуждение

Для замечаний и вопросов автор исходной инструкции предлагает форум: https://www.howtoforge.com/community/threads/suricata-and-zeek-ids-with-elk-on-ubuntu-20-10.86570/

Часто задаваемые вопросы

Как обновлять правила Suricata без перезапуска сервиса?

suricata-update генерирует новый файл правил в /var/lib/suricata/rules/suricata.rules. После обновления Suricata может подхватить новые правила при перезагрузке процесса или при использовании SIGHUP в зависимости от конфигурации.

Можно ли использовать Kibana без обратного прокси?

Да, Kibana может работать напрямую на порту 5601. Проксирование полезно для добавления SSL/аутентификации и защиты.

Как сократить объём хранимых данных в Elasticsearch?

Настройте ILM (Index Lifecycle Management), политику ретенции и агрегируйте/нарезайте события перед индексированием.

Запуск suricata-update

Список источников suricata-update

Включение источников

Результат suricata-update

Список включённых источников

Модули Filebeat

Kibana скриншот

Kibana Dev Tools

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

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство