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

> Установка и настройка Suricata IDS/IPS в pfSense - источники правил, режимы блокировки, EVE JSON логирование, pass-листы и интеграция с Wazuh SIEM

Source: https://opennix.org/docs/pfsense/packages/pfsense-suricata/


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 предъявляет значительные требования к ресурсам, особенно при работе с большим объёмом трафика:

| Параметр | Минимум | Рекомендуется |
|---|---|---|
| **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**.

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

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-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:

```text
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 Addresses** | IP-адреса интерфейсов 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 |
| **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

```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 необходимо отключить аппаратное ускорение обработки пакетов на сетевых интерфейсах:

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](/docs/pfsense/pfsense-wazuh-integration/).

### Правила 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. При выборе между ними следует учитывать ключевые различия:

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

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

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

- [Управление пакетами](/docs/pfsense/packages/pfsense-package-management/) - установка и обновление пакетов pfSense
- [Правила файрвола](/docs/pfsense/firewall/pfsense-firewall-rules/) - взаимодействие правил файрвола с блокировками Suricata
- [Интеграция pfSense с Wazuh](/docs/pfsense/pfsense-wazuh-integration/) - передача алертов Suricata в SIEM
- [Алиасы файрвола](/docs/pfsense/firewall/pfsense-firewall-aliases/) - использование алиасов в pass-листах
- [Suricata IDS/IPS на VyOS](/docs/vyos/services/vyos-suricata/) - обнаружение и предотвращение вторжений на платформе VyOS
- [Рецепты безопасности](/docs/pfsense/recipes/pfsense-security-recipes/) - харденинг, IDS/IPS, PCI DSS и CIS

