Suricata IDS/IPS в pfSense - обнаружение вторжений
Suricata - высокопроизводительный движок обнаружения и предотвращения вторжений (IDS/IPS), работающий с сетевым трафиком в режиме реального времени. В pfSense Suricata устанавливается как пакет и обеспечивает глубокий анализ пакетов (DPI), сигнатурное обнаружение угроз, анализ протоколов и логирование в формате EVE JSON. В отличие от межсетевого экрана, который оперирует на уровне IP-адресов и портов, Suricata анализирует содержимое трафика - выявляет попытки эксплуатации уязвимостей, сканирование портов, передачу вредоносного кода и аномальное поведение протоколов.
Suricata поддерживает два режима работы: IDS (Intrusion Detection System) - только обнаружение и логирование угроз, и IPS (Intrusion Prevention System) - активная блокировка вредоносного трафика. Выбор режима зависит от требований к безопасности и допустимого уровня влияния на сетевой трафик.
Установка Suricata
Установка выполняется через менеджер пакетов:
- Перейти в System > Package Manager > Available Packages
- Найти suricata в строке поиска
- Нажать Install и подтвердить установку
- Дождаться завершения установки
После установки конфигурация Suricata доступна через Services > Suricata.
Системные требования
Suricata предъявляет значительные требования к ресурсам, особенно при работе с большим объёмом трафика:
| Параметр | Минимум | Рекомендуется |
|---|---|---|
| RAM | 2 ГБ | 4 ГБ и более |
| CPU | 2 ядра | 4 ядра и более |
| Диск | 10 ГБ свободного пространства | 20 ГБ (для хранения логов) |
Потребление памяти зависит от количества загруженных правил и объёма анализируемого трафика. При включении всех категорий правил потребление RAM может превысить 4 ГБ.
Глобальные настройки
Первоначальная конфигурация начинается с вкладки Global Settings (Services > Suricata > Global Settings), где задаются источники правил и общие параметры.
Источники правил
Suricata использует наборы сигнатур (правил) для обнаружения известных угроз. Каждый источник содержит тысячи правил, сгруппированных по категориям.
| Источник | Описание | Требует регистрации |
|---|---|---|
| ET Open | Emerging 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.
Добавление интерфейса
- Перейти в Services > Suricata > Interfaces
- Нажать Add для добавления нового интерфейса
- Выбрать сетевой интерфейс из списка (WAN, LAN, OPT1 и т.д.)
- Установить Enable для активации
- Настроить параметры и нажать 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 необходимо:
- На вкладке настройки интерфейса установить IPS Mode в Inline Mode
- Убедиться, что включены правила с действием
drop - Перезапустить Suricata на интерфейсе
Внимание:
Inline Mode вносит дополнительную задержку в обработку каждого пакета. При недостаточной производительности системы это может привести к замедлению сетевых соединений. Перед включением Inline Mode в рабочей среде проведите тестирование под нагрузкой.
Управление правилами
Категории правил
Правила организованы в категории по типу обнаруживаемых угроз. Управление категориями выполняется на вкладке Categories для каждого интерфейса.
Основные категории ET Open:
| Категория | Описание |
|---|---|
| emerging-attack_response | Ответы, указывающие на успешную атаку |
| emerging-botcc | Коммуникации с известными ботнет-серверами |
| emerging-ciarmy | IP-адреса из списка 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.conf | SID или SID1, SID2, SID3 |
| Включение правил | enablesid.conf | SID или SID1, SID2, SID3 |
| Изменение действия на drop | dropsid.conf | SID или SID1, SID2, SID3 |
| Изменение действия на reject | rejectsid.conf | SID или 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).
- Нажать Add для создания нового pass-листа
- Указать имя и описание
- Добавить IP-адреса или подсети в соответствующие поля
- Сохранить и назначить pass-лист интерфейсу
Предустановленные записи
Pass-лист может автоматически включать:
| Параметр | Описание |
|---|---|
| Add Firewall Aliases | Импорт алиасов из правил файрвола |
| Add Virtual IP Addresses | Включение виртуальных IP-адресов (CARP, IP Alias) |
| Add VPN Addresses | Адреса VPN-клиентов и серверов |
| Add Locally Assigned Addresses | IP-адреса интерфейсов pfSense |
Рекомендации по использованию
В pass-лист следует добавлять:
- IP-адреса критически важных серверов, блокировка которых недопустима
- Адреса внутренних систем мониторинга, выполняющих сканирование
- Шлюзы провайдеров и DNS-серверы
- Адреса партнёрских организаций с интенсивным трафиком
Внимание:
Pass-лист не отключает обнаружение - алерты продолжают генерироваться. Он лишь предотвращает автоматическую блокировку. Это позволяет анализировать трафик без риска нарушения работы критических сервисов.
EVE JSON логирование
EVE (Extensible Event Format) - основной формат логирования Suricata, записывающий события в структурированном JSON-формате. Каждая строка лога содержит полный контекст события, что упрощает парсинг и интеграцию с SIEM-системами.
Включение EVE JSON
На вкладке настройки интерфейса в разделе Logging Settings:
- Установить EVE JSON Log в Enabled
- Выбрать типы событий для логирования
- Настроить ротацию файлов
Типы событий EVE
| Тип | Описание | Файл |
|---|---|---|
| Alerts | Срабатывания правил обнаружения | eve.json |
| HTTP | Метаданные HTTP-запросов (URL, User-Agent, статус) | eve.json |
| DNS | DNS-запросы и ответы | 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_SERVERS | DNS-серверы | $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 необходимо отключить аппаратное ускорение обработки пакетов на сетевых интерфейсах:
- Перейти в System > Advanced > Networking
- Установить флажки Disable Hardware Checksum Offload, Disable Hardware TCP Segmentation Offload, Disable Hardware Large Receive Offload
- Нажать 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:
- Настроить EVE JSON логирование с включением типа Alerts
- Сконфигурировать пересылку логов через syslog (Status > System Logs > Settings) или через Wazuh Agent
- Убедиться, что в конфигурации Wazuh Agent указан путь к файлу EVE JSON:
/var/log/suricata/suricata_<interface>/eve.json
Подробная инструкция по интеграции представлена в разделе Интеграция pfSense с Wazuh .
Правила Wazuh для Suricata
Wazuh содержит встроенный набор правил для декодирования и классификации алертов Suricata (группа правил suricata). Алерты автоматически обогащаются информацией о MITRE ATT&CK и классифицируются по уровням критичности.
Диагностика проблем
Suricata не запускается
- Проверить системные логи: Status > System Logs > System
- Убедиться, что правила загружены: Services > Suricata > Updates
- Проверить достаточность оперативной памяти: Status > System Activity
- При ошибке
PCRE-based rules not loadingувеличить лимит памяти в настройках интерфейса
Высокий процент ложных срабатываний
- Начать с режима IDS (без блокировки) для изучения паттернов трафика
- Добавить легитимные серверы и сервисы в pass-лист
- Использовать SID Management для отключения правил с частыми ложными срабатываниями
- Настроить переменные
$HOME_NETи серверные переменные максимально точно - Просмотреть категории
emerging-policyиemerging-games- они часто генерируют ложные алерты в корпоративных сетях
Правила не срабатывают
- Убедиться, что категория правила включена на вкладке Categories
- Проверить, что правило не отключено в SID Management
- Убедиться, что трафик проходит через интерфейс, на котором работает Suricata
- Проверить переменные
$HOME_NETи$EXTERNAL_NET- направление трафика в правиле должно совпадать с реальным - При использовании HTTPS убедиться, что правило поддерживает анализ TLS-метаданных (SNI, JA3)
Снижение производительности сети
- Проверить загрузку CPU через Status > System Activity
- Уменьшить количество включённых категорий правил
- В Legacy Mode увеличить таймаут блокировки для снижения нагрузки на таблицу блокировки
- Рассмотреть переход с Inline Mode на Legacy Mode при недостатке ресурсов
- Отключить логирование типов событий, которые не используются для анализа (Flow, Stats)
Заблокирован легитимный трафик
- Проверить список заблокированных адресов: Services > Suricata > Blocks
- Разблокировать адрес вручную
- Определить SID правила, вызвавшего блокировку
- Добавить адрес в pass-лист или отключить правило через SID Management
- Рассмотреть использование действия
alertвместоdropдля данного правила
Сравнение Suricata и Snort
pfSense предлагает два пакета IDS/IPS: Suricata и Snort. При выборе между ними следует учитывать ключевые различия:
| Параметр | Suricata | Snort |
|---|---|---|
| Многопоточность | Встроенная поддержка | Ограниченная |
| Inline IPS | Поддерживается через netmap | Поддерживается |
| Протоколы | Расширенный анализ (HTTP2, TLS, SMB, NFS) | Классический набор |
| Формат логов | EVE JSON (структурированный) | Unified2, текстовый |
| Совместимость правил | Snort-совместимый формат + расширения | Собственный формат |
| Потребление ресурсов | Выше при многопоточности | Ниже на малых нагрузках |
Suricata рекомендуется для новых развёртываний благодаря многопоточности, расширенному анализу протоколов и структурированному логированию.
Связанные разделы
- Управление пакетами - установка и обновление пакетов pfSense
- Правила файрвола - взаимодействие правил файрвола с блокировками Suricata
- Интеграция pfSense с Wazuh - передача алертов Suricata в SIEM
- Алиасы файрвола - использование алиасов в pass-листах