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

Развёртывание 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
Автор
Редакция

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

Как устроить идеальную вечеринку для просмотра ТВ
Развлечения

Как устроить идеальную вечеринку для просмотра ТВ

Как распаковать несколько RAR‑файлов сразу
Инструменты

Как распаковать несколько RAR‑файлов сразу

Приватный просмотр в Linux: как и зачем
Приватность

Приватный просмотр в Linux: как и зачем

Windows 11 не видит iPod — способы исправить
Руководство

Windows 11 не видит iPod — способы исправить

PS5: как настроить игровые пресеты
Консоли

PS5: как настроить игровые пресеты

Как переключить камеру в Omegle на iPhone и Android
Руководство

Как переключить камеру в Omegle на iPhone и Android