Suricata IDS/IPS в pfSense - обнаружение вторжений

Suricata - высокопроизводительный движок обнаружения и предотвращения вторжений (IDS/IPS), работающий с сетевым трафиком в режиме реального времени. В pfSense Suricata устанавливается как пакет и обеспечивает глубокий анализ пакетов (DPI), сигнатурное обнаружение угроз, анализ протоколов и логирование в формате EVE JSON. В отличие от межсетевого экрана, который оперирует на уровне IP-адресов и портов, Suricata анализирует содержимое трафика - выявляет попытки эксплуатации уязвимостей, сканирование портов, передачу вредоносного кода и аномальное поведение протоколов.

Suricata поддерживает два режима работы: IDS (Intrusion Detection System) - только обнаружение и логирование угроз, и IPS (Intrusion Prevention System) - активная блокировка вредоносного трафика. Выбор режима зависит от требований к безопасности и допустимого уровня влияния на сетевой трафик.

Установка Suricata

Установка выполняется через менеджер пакетов:

  1. Перейти в System > Package Manager > Available Packages
  2. Найти suricata в строке поиска
  3. Нажать Install и подтвердить установку
  4. Дождаться завершения установки

После установки конфигурация Suricata доступна через Services > Suricata.

Системные требования

Suricata предъявляет значительные требования к ресурсам, особенно при работе с большим объёмом трафика:

ПараметрМинимумРекомендуется
RAM2 ГБ4 ГБ и более
CPU2 ядра4 ядра и более
Диск10 ГБ свободного пространства20 ГБ (для хранения логов)

Потребление памяти зависит от количества загруженных правил и объёма анализируемого трафика. При включении всех категорий правил потребление RAM может превысить 4 ГБ.

Глобальные настройки

Первоначальная конфигурация начинается с вкладки Global Settings (Services > Suricata > Global Settings), где задаются источники правил и общие параметры.

Источники правил

Suricata использует наборы сигнатур (правил) для обнаружения известных угроз. Каждый источник содержит тысячи правил, сгруппированных по категориям.

ИсточникОписаниеТребует регистрации
ET OpenEmerging Threats Open - бесплатный набор сигнатур от ProofpointНет
ET ProРасширенный коммерческий набор Emerging ThreatsДа (Oink Code)
Snort VRTНабор правил от Cisco Talos (Snort Subscriber Rules)Да (Oink Code)
Snort CommunityБесплатный набор правил Snort с задержкой обновленийНет
Feodo TrackerПравила для обнаружения C2-серверов банковских трояновНет
ETPRO TelemetryТелеметрические данные для улучшения ET ProНет

Для использования платных источников необходимо получить Oink Code на сайте провайдера и ввести его в соответствующее поле на вкладке Global Settings.

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

Параметр Update Interval определяет частоту автоматической загрузки обновлений правил. Рекомендуемые значения:

ИнтервалСценарий
6 HoursСреды с повышенными требованиями к безопасности
12 HoursСтандартные развёртывания
1 DayСреды с ограниченной пропускной способностью

Первоначальную загрузку правил необходимо выполнить вручную через вкладку Updates после настройки источников.

Настройка интерфейсов

Suricata привязывается к сетевым интерфейсам pfSense и анализирует трафик на каждом из них независимо. Настройка интерфейсов выполняется через Services > Suricata > Interfaces.

Добавление интерфейса

  1. Перейти в Services > Suricata > Interfaces
  2. Нажать Add для добавления нового интерфейса
  3. Выбрать сетевой интерфейс из списка (WAN, LAN, OPT1 и т.д.)
  4. Установить Enable для активации
  5. Настроить параметры и нажать Save

Выбор интерфейсов для мониторинга

ИнтерфейсРекомендации
WANОбязателен - анализ входящего трафика из интернета, обнаружение внешних атак
LANРекомендуется - обнаружение внутренних угроз, lateral movement, C2-коммуникаций
DMZРекомендуется - защита серверов в демилитаризованной зоне
VPNПо необходимости - анализ трафика VPN-туннелей

Внимание:

Мониторинг каждого дополнительного интерфейса увеличивает потребление ресурсов. На системах с ограниченными ресурсами рекомендуется начинать с WAN-интерфейса и добавлять остальные по мере необходимости.

Основные параметры интерфейса

ПараметрОписание
EnableАктивация Suricata на данном интерфейсе
Send Alerts to System LogДублирование алертов в системный журнал pfSense
Block OffendersВключение режима IPS - блокировка источников вредоносного трафика
IPS ModeРежим блокировки: Legacy Mode или Inline Mode
Kill StatesЗавершение активных сессий при блокировке IP-адреса
Which IP to BlockКакой адрес блокировать: SRC, DST или BOTH

Режимы блокировки

Suricata в pfSense поддерживает два режима предотвращения вторжений, различающихся механизмом блокировки.

Legacy Mode

В Legacy Mode Suricata работает как классическая IDS с возможностью блокировки. При срабатывании правила IP-адрес нарушителя добавляется в таблицу блокировки pf (snort2c). Все последующие пакеты от этого адреса отбрасываются файрволом до истечения таймаута блокировки.

Особенности Legacy Mode:

  • Первый вредоносный пакет проходит (блокировка наступает после обнаружения)
  • Блокируется весь трафик от IP-адреса нарушителя, включая легитимный
  • Возможны ложные блокировки при срабатывании на легитимный трафик
  • Меньшее потребление ресурсов по сравнению с Inline Mode

Inline Mode

В Inline Mode Suricata встраивается непосредственно в путь прохождения пакетов через файрвол с использованием netmap. Каждый пакет проходит через движок Suricata перед принятием решения о пропуске или отбрасывании.

Особенности Inline Mode:

  • Вредоносные пакеты отбрасываются до достижения цели
  • Блокируются только вредоносные пакеты, а не весь трафик от IP-адреса
  • Более точное предотвращение угроз
  • Повышенное потребление ресурсов и потенциальное увеличение задержки
  • Требует правил с действием drop вместо alert

Для активации Inline Mode необходимо:

  1. На вкладке настройки интерфейса установить IPS Mode в Inline Mode
  2. Убедиться, что включены правила с действием drop
  3. Перезапустить Suricata на интерфейсе

Внимание:

Inline Mode вносит дополнительную задержку в обработку каждого пакета. При недостаточной производительности системы это может привести к замедлению сетевых соединений. Перед включением Inline Mode в рабочей среде проведите тестирование под нагрузкой.

Управление правилами

Категории правил

Правила организованы в категории по типу обнаруживаемых угроз. Управление категориями выполняется на вкладке Categories для каждого интерфейса.

Основные категории ET Open:

КатегорияОписание
emerging-attack_responseОтветы, указывающие на успешную атаку
emerging-botccКоммуникации с известными ботнет-серверами
emerging-ciarmyIP-адреса из списка CI Army
emerging-compromisedИзвестные скомпрометированные хосты
emerging-current_eventsАктуальные угрозы (обновляется часто)
emerging-dnsАномальные DNS-запросы и DNS-туннелирование
emerging-dosОбнаружение DoS/DDoS-атак
emerging-exploitЭксплуатация известных уязвимостей
emerging-malwareВредоносное ПО и связанный с ним трафик
emerging-policyНарушения корпоративной политики (торренты, анонимайзеры)
emerging-scanСканирование портов и сетевая разведка
emerging-trojanТрояны и бэкдоры
emerging-web_clientАтаки на веб-браузеры и клиентское ПО
emerging-web_serverАтаки на веб-серверы (SQL injection, XSS, RCE)

Включение и отключение категорий

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

  • Все категории emerging-malware, emerging-trojan, emerging-exploit
  • Категории emerging-botcc, emerging-compromised
  • Категорию emerging-scan для обнаружения разведки
  • Категорию emerging-web_server при наличии веб-серверов в сети

Категории emerging-policy и emerging-games следует включать только при необходимости контроля политик использования сети.

SID Management

SID Management позволяет управлять отдельными правилами по их уникальному идентификатору (SID) без отключения всей категории.

Настройка выполняется через Services > Suricata > SID Mgmt.

ДействиеФайлФормат
Отключение правилdisablesid.confSID или SID1, SID2, SID3
Включение правилenablesid.confSID или SID1, SID2, SID3
Изменение действия на dropdropsid.confSID или SID1, SID2, SID3
Изменение действия на rejectrejectsid.confSID или SID1, SID2, SID3

Файлы SID Management применяются после каждого обновления правил, что позволяет сохранить пользовательские модификации при автоматическом обновлении наборов правил.

Пользовательские правила

Для создания собственных правил используется вкладка Rules в настройках интерфейса. Пользовательские правила записываются в формате Suricata:

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"Custom - Suspicious User-Agent"; http.user_agent; content:"sqlmap"; nocase; classtype:web-application-attack; sid:9000001; rev:1;)

Основные элементы правила:

ЭлементОписание
actionДействие: alert, drop, reject, pass
protocolПротокол: tcp, udp, http, dns, tls и др.
src/dstАдреса источника и назначения (переменные $HOME_NET, $EXTERNAL_NET)
msgОписание срабатывания для алертов
contentПаттерн для поиска в содержимом пакета
sidУникальный идентификатор правила (для пользовательских правил используйте SID > 9000000)
classtypeКлассификация угрозы по типу

Pass-листы

Pass-листы (списки пропуска) определяют IP-адреса, трафик которых не подвергается блокировке при срабатывании правил IPS. Адреса из pass-листа продолжают анализироваться Suricata, и алерты генерируются, но автоматическая блокировка не применяется.

Настройка pass-листов

Конфигурация выполняется на вкладке Pass Lists (Services > Suricata > Pass Lists).

  1. Нажать Add для создания нового pass-листа
  2. Указать имя и описание
  3. Добавить IP-адреса или подсети в соответствующие поля
  4. Сохранить и назначить pass-лист интерфейсу

Предустановленные записи

Pass-лист может автоматически включать:

ПараметрОписание
Add Firewall AliasesИмпорт алиасов из правил файрвола
Add Virtual IP AddressesВключение виртуальных IP-адресов (CARP, IP Alias)
Add VPN AddressesАдреса VPN-клиентов и серверов
Add Locally Assigned AddressesIP-адреса интерфейсов pfSense

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

В pass-лист следует добавлять:

  • IP-адреса критически важных серверов, блокировка которых недопустима
  • Адреса внутренних систем мониторинга, выполняющих сканирование
  • Шлюзы провайдеров и DNS-серверы
  • Адреса партнёрских организаций с интенсивным трафиком

Внимание:

Pass-лист не отключает обнаружение - алерты продолжают генерироваться. Он лишь предотвращает автоматическую блокировку. Это позволяет анализировать трафик без риска нарушения работы критических сервисов.

EVE JSON логирование

EVE (Extensible Event Format) - основной формат логирования Suricata, записывающий события в структурированном JSON-формате. Каждая строка лога содержит полный контекст события, что упрощает парсинг и интеграцию с SIEM-системами.

Включение EVE JSON

На вкладке настройки интерфейса в разделе Logging Settings:

  1. Установить EVE JSON Log в Enabled
  2. Выбрать типы событий для логирования
  3. Настроить ротацию файлов

Типы событий EVE

ТипОписаниеФайл
AlertsСрабатывания правил обнаруженияeve.json
HTTPМетаданные HTTP-запросов (URL, User-Agent, статус)eve.json
DNSDNS-запросы и ответыeve.json
TLSМетаданные TLS-соединений (SNI, сертификаты)eve.json
FilesИнформация о передаваемых файлахeve.json
DropОтброшенные пакеты (в Inline Mode)eve.json
FlowМетаданные сетевых соединенийeve.json
StatsСтатистика работы движкаeve.json

Пример записи EVE JSON

{
  "timestamp": "2024-03-15T10:23:45.123456+0000",
  "flow_id": 1234567890,
  "event_type": "alert",
  "src_ip": "192.168.1.100",
  "src_port": 52341,
  "dest_ip": "203.0.113.50",
  "dest_port": 443,
  "proto": "TCP",
  "alert": {
    "action": "allowed",
    "gid": 1,
    "signature_id": 2024897,
    "rev": 3,
    "signature": "ET TROJAN Observed Malicious SSL Certificate",
    "category": "A Network Trojan was detected",
    "severity": 1
  }
}

Расположение логов

Логи Suricata хранятся в директории /var/log/suricata/suricata_<interface>. Для каждого интерфейса создаётся отдельная поддиректория.

Просмотр алертов

Алерты Suricata отображаются в нескольких местах:

Вкладка Alerts

Services > Suricata > Alerts - основная страница просмотра алертов с фильтрацией по интерфейсу, приоритету и времени. Для каждого алерта отображаются:

  • Время срабатывания
  • Приоритет (1 - критический, 4 - информационный)
  • Протокол, IP-адреса и порты источника и назначения
  • Описание правила (message)
  • SID правила

Из интерфейса алертов можно выполнить действия:

  • Добавить IP-адрес в pass-лист
  • Отключить правило по SID
  • Просмотреть детали правила

Блокированные IP-адреса

Services > Suricata > Blocks отображает список IP-адресов, заблокированных в режиме IPS. Для каждого заблокированного адреса указаны:

  • IP-адрес
  • Время блокировки
  • SID правила, вызвавшего блокировку
  • Описание правила

Заблокированные адреса можно разблокировать вручную через эту страницу или дождаться автоматического истечения таймаута блокировки.

Виджет Dashboard

Suricata добавляет виджет на главную панель pfSense (Dashboard), отображающий текущее состояние сервиса на каждом интерфейсе и количество алертов.

Переменные Suricata

Переменные определяют адресные диапазоны, используемые в правилах для идентификации внутренних и внешних сетей.

ПеременнаяОписаниеЗначение по умолчанию
$HOME_NETВнутренние сети (защищаемые)Подсети всех интерфейсов pfSense
$EXTERNAL_NETВнешние сети!$HOME_NET (всё, кроме внутренних)
$HTTP_SERVERSВеб-серверы во внутренней сети$HOME_NET
$DNS_SERVERSDNS-серверы$HOME_NET
$SMTP_SERVERSПочтовые серверы$HOME_NET
$SQL_SERVERSСерверы баз данных$HOME_NET

Настройка переменных выполняется на вкладке конфигурации интерфейса в разделе Variables. Для повышения точности обнаружения рекомендуется указывать конкретные IP-адреса серверов вместо использования значений по умолчанию.

Настройка производительности

Многопоточность

Suricata поддерживает многопоточную обработку трафика. Настройка потоков выполняется на вкладке интерфейса в разделе Detection Engine Settings.

ПараметрОписаниеРекомендация
Detect-Engine ProfileПрофиль использования памятиMedium для большинства развёртываний
Pattern Matcher AlgorithmАлгоритм сопоставления паттерновAC (Aho-Corasick) для максимальной производительности
Stream Memory CapОграничение памяти для реассемблирования потоков64 МБ (увеличить при высоком трафике)

Hardware Offloading

Для работы Suricata в Inline Mode необходимо отключить аппаратное ускорение обработки пакетов на сетевых интерфейсах:

  1. Перейти в System > Advanced > Networking
  2. Установить флажки Disable Hardware Checksum Offload, Disable Hardware TCP Segmentation Offload, Disable Hardware Large Receive Offload
  3. Нажать Save и перезагрузить pfSense

Внимание:

Отключение hardware offloading снижает пропускную способность сетевого интерфейса, но необходимо для корректной работы Suricata в режиме глубокого анализа пакетов. Без отключения Suricata может пропускать фрагментированные пакеты или получать некорректные контрольные суммы.

Рекомендации по оптимизации

  • Включать только необходимые категории правил - каждая категория потребляет память
  • Использовать SID Management для отключения правил, генерирующих ложные срабатывания
  • Настроить ротацию логов для предотвращения заполнения диска
  • На системах с ограниченной RAM выбирать профиль Low для Detect-Engine
  • Мониторить потребление ресурсов через Status > System Activity

Интеграция с Wazuh

Suricata генерирует логи в формате EVE JSON, который поддерживается Wazuh для декодирования и анализа. Интеграция обеспечивает централизованный мониторинг алертов IDS/IPS, корреляцию с другими событиями безопасности и расширенное оповещение.

Настройка передачи логов

Для отправки алертов Suricata в Wazuh необходимо настроить syslog-пересылку или установить Wazuh Agent на pfSense:

  1. Настроить EVE JSON логирование с включением типа Alerts
  2. Сконфигурировать пересылку логов через syslog (Status > System Logs > Settings) или через Wazuh Agent
  3. Убедиться, что в конфигурации Wazuh Agent указан путь к файлу EVE JSON: /var/log/suricata/suricata_<interface>/eve.json

Подробная инструкция по интеграции представлена в разделе Интеграция pfSense с Wazuh .

Правила Wazuh для Suricata

Wazuh содержит встроенный набор правил для декодирования и классификации алертов Suricata (группа правил suricata). Алерты автоматически обогащаются информацией о MITRE ATT&CK и классифицируются по уровням критичности.

Диагностика проблем

Suricata не запускается

  1. Проверить системные логи: Status > System Logs > System
  2. Убедиться, что правила загружены: Services > Suricata > Updates
  3. Проверить достаточность оперативной памяти: Status > System Activity
  4. При ошибке PCRE-based rules not loading увеличить лимит памяти в настройках интерфейса

Высокий процент ложных срабатываний

  1. Начать с режима IDS (без блокировки) для изучения паттернов трафика
  2. Добавить легитимные серверы и сервисы в pass-лист
  3. Использовать SID Management для отключения правил с частыми ложными срабатываниями
  4. Настроить переменные $HOME_NET и серверные переменные максимально точно
  5. Просмотреть категории emerging-policy и emerging-games - они часто генерируют ложные алерты в корпоративных сетях

Правила не срабатывают

  1. Убедиться, что категория правила включена на вкладке Categories
  2. Проверить, что правило не отключено в SID Management
  3. Убедиться, что трафик проходит через интерфейс, на котором работает Suricata
  4. Проверить переменные $HOME_NET и $EXTERNAL_NET - направление трафика в правиле должно совпадать с реальным
  5. При использовании HTTPS убедиться, что правило поддерживает анализ TLS-метаданных (SNI, JA3)

Снижение производительности сети

  1. Проверить загрузку CPU через Status > System Activity
  2. Уменьшить количество включённых категорий правил
  3. В Legacy Mode увеличить таймаут блокировки для снижения нагрузки на таблицу блокировки
  4. Рассмотреть переход с Inline Mode на Legacy Mode при недостатке ресурсов
  5. Отключить логирование типов событий, которые не используются для анализа (Flow, Stats)

Заблокирован легитимный трафик

  1. Проверить список заблокированных адресов: Services > Suricata > Blocks
  2. Разблокировать адрес вручную
  3. Определить SID правила, вызвавшего блокировку
  4. Добавить адрес в pass-лист или отключить правило через SID Management
  5. Рассмотреть использование действия alert вместо drop для данного правила

Сравнение Suricata и Snort

pfSense предлагает два пакета IDS/IPS: Suricata и Snort. При выборе между ними следует учитывать ключевые различия:

ПараметрSuricataSnort
МногопоточностьВстроенная поддержкаОграниченная
Inline IPSПоддерживается через netmapПоддерживается
ПротоколыРасширенный анализ (HTTP2, TLS, SMB, NFS)Классический набор
Формат логовEVE JSON (структурированный)Unified2, текстовый
Совместимость правилSnort-совместимый формат + расширенияСобственный формат
Потребление ресурсовВыше при многопоточностиНиже на малых нагрузках

Suricata рекомендуется для новых развёртываний благодаря многопоточности, расширенному анализу протоколов и структурированному логированию.

Связанные разделы

Last updated on