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

Установка Suricata IDS и Elastic Stack на Ubuntu 22.04

12 min read Security Обновлено 27 Nov 2025
Suricata + Elastic Stack на Ubuntu 22.04
Suricata + Elastic Stack на Ubuntu 22.04

Схема развёртывания Suricata и Elastic Stack

Введение

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

Вы можете установить Suricata на отдельной машине для мониторинга её трафика или развернуть её на шлюзовом хосте, чтобы сканировать входящий и исходящий трафик других серверов. Часто Suricata комбинируют с Elasticsearch, Kibana и Filebeat, чтобы получить SIEM (Security Information and Event Management) — централизованную систему хранения, поиска и визуализации событий безопасности.

В этом руководстве Suricata и Elastic Stack будут установлены на разных серверах. Компоненты стека:

  • Elasticsearch — хранение, индексирование и поиск событий безопасности.
  • Kibana — визуализация и дашборды событий из Elasticsearch.
  • Filebeat — парсинг логов Suricata (eve.json) и отправка событий в Elasticsearch.
  • Suricata — детектирование подозрительной сетевой активности и (при желании) блокировка.

Далее — подробные шаги по установке и настройке, а также расширенные рекомендации по эксплуатации и безопасности.

Кого это руководство охватывает

  • Сисадмины, разворачивающие IDS/SIEM для небольших и средних инфраструктур.
  • Инженеры безопасности, настраивающие сбор сетевых событий и дашборды.
  • Сетевые инженеры, желающие интегрировать Suricata с Elastic Stack.

Важно: руководство ориентировано на Ubuntu 22.04 и пакеты из PPA/репозиториев указанных в шагах.

Основные термины (1‑строчные определения)

  • Suricata — сетевой IDS/IPS, анализирующий пакеты и генерирующий события.
  • Elasticsearch — движок хранения и поиска логов.
  • Kibana — веб-интерфейс для визуализации данных в Elasticsearch.
  • Filebeat — легковесный агент для отправки логов в Elasticsearch.
  • eve.json — основной JSON-формат логов Suricata.

Содержание (навигация)

  1. Предварительные требования
  2. Установка и настройка Suricata
  3. Правила Suricata и suricata-update
  4. Проверка и запуск Suricata
  5. Тестирование правил
  6. Установка Elasticsearch и Kibana
  7. Настройка Elasticsearch
  8. Настройка Kibana
  9. Установка Filebeat на сервер Suricata
  10. Доступ к Kibana (SSH-туннель и Nginx)
  11. Управление дашбордами Kibana
  12. Проверки приёмки, тесты и рольовые чек-листы
  13. Безопасность, приватность и эксплуатация
  14. Плейбук развёртывания и аварийный откат
  15. Сводка и рекомендации

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

  • Для серверов Suricata и Elastic Stack требуется минимум 4 ГБ RAM и 2 CPU (рекомендовано больше для реальной нагрузки).
  • Между серверами должен быть доступ по приватным IP-адресам.
  • На серверах должна быть Ubuntu 22.04 и пользователь с sudo (не root).
  • Для внешнего доступа к Kibana настройте DNS-запись, например kibana.example.com, указывающую на сервер Elasticsearch или на прокси.
  • Установите базовые утилиты:
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
  • Обновите пакеты:
$ sudo apt update

Важно: если инфраструктура рассчитана на высокую нагрузку, планируйте выделенные ресурсы для Elasticsearch (heap JVM, диск NVMe, RAID/RAID-like, IOPS).


Часть 1 — Установка и настройка Suricata

Шаг 1 — Установка Suricata

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

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

Включите сервис, затем остановите его для настройки:

$ sudo systemctl enable suricata
$ sudo systemctl stop suricata

Шаг 2 — Основная конфигурация Suricata

Файл конфигурации: /etc/suricata/suricata.yaml. По умолчанию Suricata запускается в IDS-режиме (только логирование). Для начала оставьте режим по умолчанию; IPS включается позже после тестирования.

Включение Community ID

Community ID облегчает корреляцию событий между инструментами (например, Zeek и Suricata). Чтобы включить, откройте /etc/suricata/suricata.yaml и найдите секцию Community Flow ID — установите:

community-id: true

Теперь события будут содержать поле community_id, пригодное для корреляции.

Выбор сетевого интерфейса

По умолчанию Suricata отслеживает eth0; на современных системах интерфейс называется по-другому (enp…, ens…). Узнайте имя интерфейса:

$ ip -p -j route show default

Пример вывода указывает dev: “enp1s0”. В suricata.yaml найдите секцию af-packet и установите interface:

af-packet:
  - interface: enp1s0
    cluster-id: 99

При добавлении нескольких интерфейсов задавайте уникальный cluster-id для каждого.

Аналогично укажите интерфейс в секции pcap:

pcap:
  - interface: enp1s0

Сохраните изменения (Ctrl+X, Y) и переходите дальше.

Шаг 3 — Правила Suricata и suricata-update

По умолчанию набор правил ограничен. Для расширения используйте suricata-update, который подтянет ET Open и другие источники:

$ sudo suricata-update

Пример вывода показывает загрузку https://rules.emergingthreats.net/open/…. После успешного скачивания правила будут записаны в /var/lib/suricata/rules.

Чтобы добавить сторонний источник правил (например, tgreen/hunting):

$ sudo suricata-update enable-source tgreen/hunting
$ sudo suricata-update

suricata-update поддерживает подключение коммерческих и бесплатных провайдеров; используйте только проверенные источники и проверяйте лицензии.

Шаг 4 — Валидация конфигурации

Suricata имеет тестовый режим. Проверьте конфиг и правила:

$ sudo suricata -T -c /etc/suricata/suricata.yaml -v

Параметры:

  • -T — тестовый режим; не запускает основные службы.
  • -c — путь к конфигу.
  • -v — подробный вывод.

Убедитесь, что в выводе написано: Configuration provided was successfully loaded.

Шаг 5 — Запуск Suricata

Запустите сервис:

$ sudo systemctl start suricata
$ sudo systemctl status suricata

Статус покажет, что Suricata работает. Логи находятся в /var/log/suricata/suricata.log — следите за сообщением типа “All AFP capture threads are running.” для подтверждения готовности.

Шаг 6 — Тестирование правил

Тестовый сайт testmynids.org эмулирует атаки, триггеря правила ET Open 2100498. Выполните:

$ curl http://testmynids.org/uid/index.html

Проверьте fast.log:

$ grep 2100498 /var/log/suricata/fast.log

Вы будете видеть предупреждение о возможной вредоносной активности по этому правилу. Также события пишутся в /var/log/suricata/eve.json (JSON). Для удобного чтения JSON используйте jq (опционально).


Часть 2 — Установка Elastic Stack и интеграция с Suricata

Примечание: выполняйте часть 2 на сервере, где будет стоять Elasticsearch/Kibana (вторая машина в примере).

Шаг 7 — Установка Elasticsearch и Kibana

Добавьте GPG-ключ Elastic и репозиторий, затем установите пакеты:

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
$ sudo apt update
$ sudo apt install elasticsearch kibana

Определите приватный IP сервера (пример вывода ip -brief address show) и запомните его как your_private_IP. Публичный IP — как your_public_IP.

Шаг 8 — Настройка Elasticsearch

Откройте /etc/elasticsearch/elasticsearch.yml и измените network.bind_host, добавив приватный IP, например:

network.bind_host: ["127.0.0.1", "your_private_IP"]

Включите режим single-node и базовую безопасность:

discovery.type: single-node
xpack.security.enabled: true

Откройте порт в ufw только на внутреннем интерфейсе (используйте реальное имя интерфейса):

$ sudo ufw allow in on enp6s0
$ sudo ufw allow out on enp6s0

Перезагрузите systemd-демон, включите и запустите сервис:

$ sudo systemctl daemon-reload
$ sudo systemctl enable elasticsearch
$ sudo systemctl start elasticsearch

Сгенерируйте пароли для зарезервированных пользователей (утилита запускается один раз):

$ cd /usr/share/elasticsearch/bin
$ sudo ./elasticsearch-setup-passwords auto

Сохраните выданные пароли в безопасном месте — они потребуются для Kibana и Filebeat.

Шаг 9 — Настройка Kibana

Сгенерируйте зашифрованные ключи для Kibana:

$ cd /usr/share/kibana/bin/
$ sudo ./kibana-encryption-keys generate -q --force

Скопируйте значения и добавьте в /etc/kibana/kibana.yml:

xpack.encryptedSavedObjects.encryptionKey: <значение>
xpack.reporting.encryptionKey: <значение>
xpack.security.encryptionKey: <значение>

Укажите, на каком хосте Kibana будет слушать:

server.host: "your_private_IP"

Безопасное хранение учётных данных:

$ cd /usr/share/kibana/bin
$ sudo ./kibana-keystore add elasticsearch.username
Enter value for elasticsearch.username: kibana_system
$ sudo ./kibana-keystore add elasticsearch.password
Enter value for elasticsearch.password: 

Запустите и включите Kibana:

$ sudo systemctl enable kibana --now
$ sudo systemctl status kibana

Шаг 10 — Установка и настройка Filebeat на сервере Suricata

На сервере Suricata добавьте репозиторий Elastic и установите Filebeat:

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
$ sudo apt update
$ sudo apt install filebeat

Откройте /etc/filebeat/filebeat.yml и настройте подключение к Kibana и Elasticsearch:

В секции setup.kibana укажите:

setup.kibana:
  host: "your_private_IP:5601"

В секции output.elasticsearch укажите хост, учётные данные:

output.elasticsearch:
  hosts: ["your_private_IP:9200"]
  username: "elastic"
  password: "<пароль elastic>"

Включите модуль suricata и загрузите дашборды/пайплайны:

$ sudo filebeat modules enable suricata
$ sudo filebeat setup
$ sudo systemctl start filebeat
$ sudo systemctl status filebeat

Filebeat создаст ingest pipeline и загрузит подготовленные Kibana-дэшборды для Suricata.

Шаг 11 — Доступ к Kibana: SSH-туннель или Nginx reverse proxy

У вас есть два распространённых варианта доступа к Kibana:

  1. SSH Local Tunnel — безопасно для временного доступа с вашей рабочей станции.
  2. Nginx reverse-proxy + Let’s Encrypt — для постоянного доступа через HTTPS.

Вариант A — SSH локальный туннель

С вашей рабочей станции выполните:

$ ssh -L 5601:your_private_IP:5601 user@your_public_IP -N

После этого откройте http://localhost:5601 в браузере. Держите сессию открытой пока нужен доступ.

Вариант B — Nginx reverse-proxy с SSL

Откройте HTTP/HTTPS в ufw:

$ sudo ufw allow http
$ sudo ufw allow https

Установите официальный репозиторий Nginx, потом сам nginx, затем certbot через snapd для получения Let’s Encrypt сертификата. Генерация сертификата:

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d kibana.example.com

Создайте dhparam и проверьте автообновление certbot:

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
$ sudo certbot renew --dry-run

Создайте конфигурацию /etc/nginx/conf.d/kibana.conf и настройте proxy_pass на private_IP:5601. Не забудьте добавить server_names_hash_bucket_size 64; в nginx.conf и перезагрузить nginx.

После этого Kibana будет доступна по https://kibana.example.com.

Шаг 12 — Управление дашбордами Kibana

В /etc/kibana/kibana.yml укажите базовый публичный URL:

server.publicBaseUrl: "https://kibana.example.com"

Перезапустите Kibana:

$ sudo systemctl restart kibana

Войдите в Kibana с пользователем elastic и паролем, сгенерированным ранее. В поле поиска Discover введите type:data suricata для поиска событий Suricata. Filebeat поставляет готовые дашборды: Alerts Overview, Events и т. п.


Критерии приёмки (что должно быть выполнено)

  • Suricata запущена и отслеживает нужный сетевой интерфейс (проверка: suricata.service active).
  • suricata -T успешно проходит валидацию конфигурации и правил.
  • Filebeat успешно подключается к Elasticsearch (проверка логов Filebeat) и загружены ingest pipeline и дашборды.
  • Kibana доступна по выбранному пути (локально через SSH-туннель или публично по HTTPS), а все дашборды корректно отображают события Suricata.
  • Тестовое правило (ET Open 2100498) триггерит запись в /var/log/suricata/fast.log и/или eve.json и видимо в Kibana.
  • Пароли и ключи зафиксированы в безопасном хранилище.

Тест-кейсы и проверки (короткая форма)

  • Проверка сбора логов: сгенерировать тестовый трафик и убедиться, что запись появится в eve.json, Filebeat отправит событие, индекс появится в Elasticsearch.
  • Нагрузка: прогнать симулированную нагрузку (tcpdump/generate traffic) и проверить потребление CPU/RAM/IO.
  • Отказоустойчивость: перезапустить Filebeat/Suricata/Elasticsearch и проверить, восстанавливается ли связь и данные не теряются.

Чек-листы по ролям

Администратор системы (развёртывание):

  • Подготовить сервер(ы) с Ubuntu 22.04 и доступом по SSH.
  • Установить и проверить пакеты (suricata/elasticsearch/kibana/filebeat/nginx).
  • Настроить firewall только для необходимых интерфейсов.
  • Создать резервные копии конфигов и сохранить пароли.

Инженер безопасности (контент правил и мониторинг):

  • Подключить источники правил через suricata-update.
  • Проверить ложные срабатывания и откорректировать исключения (thresholds, suppression).
  • Настроить ротацию логов и retention в Elasticsearch.

Сетевой инженер (пакетная capture и производительность):

  • Убедиться, что интерфейсы захвата настроены корректно (af-packet/pcap).
  • Настроить cluster-id/threads/use-mmap для оптимальной производительности.
  • При необходимости использовать нативные драйверы/DPDK/eBPF/XDP.

Плейбук развёртывания (SOP) — краткая пошаговая инструкция

  1. Подготовка: обновить систему, проверить сетевую доступность между серверами.
  2. Установка Suricata на сенсоре: добавить PPA, установить, остановить сервис.
  3. Настройка интерфейсов и community-id, выполнить suricata-update.
  4. Валидировать конфиг suricata -T.
  5. Установить Filebeat на сенсоре и включить модуль suricata.
  6. Установить Elasticsearch и Kibana на сервере аналитики, включить xpack.security.
  7. Сгенерировать пароли elastic и сохранить их.
  8. Настроить Kibana (encryption keys) и запустить.
  9. Загрузить дашборды filebeat setup на сенсоре.
  10. Настроить доступ (SSH-туннель или Nginx + Let’s Encrypt) и проверить доступ к дашбордам.
  11. Тест: выполнить тестовый трафик, проверить отображение в Kibana.
  12. Документировать конфигурации, политики хранения и план реагирования.

Аварийный план и откат (runbook)

Если после изменения конфигурации или обновления система перестала работать:

  1. Откатить изменения конфигов из резервной копии.
  2. Остановить сервисы, проверить логи:
$ sudo systemctl stop filebeat suricata kibana elasticsearch nginx
$ sudo journalctl -u elasticsearch -b --no-pager
  1. Если Elastic не запускается после обновления — проверить JVM heap в /etc/elasticsearch/jvm.options.
  2. Если Filebeat перестал отправлять — проверить connection к your_private_IP:9200 и учётные данные.
  3. Для срочного отключения Suricata IPS (если включён): переключиться в IDS-режим, чтобы не блокировать трафик.
  4. Если проблема вызвана правилами — временно отключите проблемный источник через suricata-update disable-source или отфильтруйте правило suppression/threshold.

Когда эта архитектура не подходит (ограничения и контрпримеры)

  • Высокопроизводительные сети с сотнями Гбит: Suricata на стандартном сервере может не справиться без аппаратного ускорения или DPDK/NIC offload.
  • Шифрованный трафик (TLS 1.3): без TLS-терминации глубокий инспектировать payload невозможно — только метаданные и поведенческие признаки.
  • Контейнерные/микросервисные среды: требуется адаптация (сбор трафика между подами, sidecar, eBPF) — простая установка на хост может не ловить весь трафик.
  • Сильно распределённая инфраструктура: центральный Elasticsearch должен быть правильно масштабирован для объёма логов.

Альтернативные подходы

  • Использовать централизованный packet broker / TAP и подключать Suricata к зеркалу трафика на уровне сети.
  • Применить Managed SIEM или Elastic Cloud для упрощения эксплуатации Elasticsearch/Kibana (платный вариант).
  • Для облачных окружений рассмотреть Zeek/Bro + FlowLogs + Cloud-native SIEM интеграции.

Безопасность и жёсткая конфигурация (Hardening)

  • Включите xpack.security и используйте TLS между компонентами в production (HTTPS для Elasticsearch, TLS для Kibana).
  • Ограничьте доступ к Elastic портам по ACL/SG/ufw, разрешая доступ только с доверенных хостов.
  • Используйте отдельные учётные записи для beats, kibana_system и elastic; храните пароли в защищённом хранилище.
  • Настройте ротацию логов Suricata и политики ILM для индексов Elasticsearch, чтобы избежать переполнения диска.
  • Регулярно обновляйте базы правил и пакеты; тестируйте правила на тестовой среде перед вводом в прод.
  • Минимизируйте метаданные пользователей в логах (анонимизация IP, псевдонимизация), если это требуется политикой приватности.

Приватность и соответствие (GDPR и пр.)

  • Логи Suricata содержат IP-адреса и, возможно, другую персональную информацию. Перед централизованным хранением проверьте правовые требования и политики хранения данных.
  • Рассмотрите анонимизацию или хэширование IP-адресов, настройку retention (удаление старых индексов) и доступ по ролям.
  • Документируйте период хранения и права доступа; при необходимости добавьте процедуры удаления данных по запросу.

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

  • Для высоких нагрузок используйте capture-режим af-packet с use-mmap и tpacket-v3, настройте threads и cluster-id.
  • Для больших объёмов логов увеличьте ресурсы Elasticsearch (heap, CPU, диск с высокой IOPS) и настройте ILM.
  • Отключайте избыточные Input/Output в Suricata (например, drop logging) если нужны минимальные задержки.

Короткий чек-лист безопасности перед вводом в прод

  • xpack.security включён и настроен
  • TLS настроен между Elastic и Kibana
  • ufw/sg ограничивает доступ к HTTP/HTTPS/9200 по IP
  • Резервное копирование конфигураций и паролей выполнено
  • Политики хранения логов определены (ILM)

Мини‑методология: Plan → Install → Configure → Test → Monitor → Maintain

  • Plan: Определите требования (ресурсы, retention, интерфейсы).
  • Install: Установите пакеты и зависимости.
  • Configure: Настройте интерфейсы, правила, безопасность.
  • Test: Проведите тесты триггеров, нагрузочные тесты.
  • Monitor: Отслеживайте производительность и оповещения.
  • Maintain: Регулярные обновления правил, резервное копирование и ревью конфигураций.

Короткий глоссарий (1 строка на термин)

  • IDS — система обнаружения вторжений (не блокирует трафик).
  • IPS — система предотвращения вторжений (может блокировать трафик).
  • ILM — управление жизненным циклом индексов в Elasticsearch.
  • eve.json — JSON-лог Suricata с событиями.

Примеры команд для быстрого контроля (cheat sheet)

  • Проверить статус Suricata:
$ sudo systemctl status suricata
  • Валидировать конфигурацию:
$ sudo suricata -T -c /etc/suricata/suricata.yaml -v
  • Обновить правила:
$ sudo suricata-update
  • Проверить последние логи Suricata:
$ sudo tail -f /var/log/suricata/suricata.log
  • Перезапустить Filebeat:
$ sudo systemctl restart filebeat

Итоги и рекомендации

  • Для тестовых сред и малых инфраструктур связка Suricata + Filebeat + Elasticsearch/Kibana даёт быстрый старт SIEM и визуализаций.
  • Для production обратите внимание на производительность (capture mode, hardware), безопасность (TLS, firewall) и соответствие требованиям конфиденциальности.
  • Тестируйте правила и ограничения блокировки, чтобы минимизировать ложные срабатывания.

Если у вас остались вопросы по конкретной части (настройка конфигурации suricata.yaml, оптимизация производительности, интеграция с облачными лог-решениями), опишите вашу среду (количество трафика, интерфейсы, требования к сохранению) — я помогу подобрать оптимальные параметры.


Сводка

  • Suricata собирает сетевые события, Filebeat агрегирует и отправляет их в Elasticsearch, а Kibana предоставляет визуализацию.
  • Стандартный рабочий цикл: установить → настроить интерфейсы → обновить правила → валидировать → запустить → подключить Filebeat → загрузить дашборды → обеспечить безопасный доступ к Kibana.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро