Suricata IDS/IPS

Suricata - система обнаружения и предотвращения вторжений (IDS/IPS) с открытым исходным кодом для анализа сетевого трафика в реальном времени.

Обзор

Что такое Suricata

Suricata - мощный network security engine:

  • Intrusion Detection System (IDS)
  • Intrusion Prevention System (IPS)
  • Network Security Monitoring (NSM)
  • Анализ сетевых пакетов в реальном времени
  • Поддержка множественных протоколов
  • Open Source проект

Основные возможности

Intrusion Detection (IDS):

  • Анализ сетевого трафика
  • Обнаружение подозрительной активности
  • Детекция атак и вредоносного трафика
  • Генерация алертов
  • Пассивный режим мониторинга

Intrusion Prevention (IPS):

  • Блокирование подозрительного трафика
  • Модификация трафика в реальном времени
  • Предотвращение атак до проникновения
  • Активная защита сети
  • Автоматическое реагирование

Network Security Monitoring (NSM):

  • Сбор и анализ сетевых данных
  • Детекция аномалий
  • Идентификация угроз
  • Форензика инцидентов
  • Compliance мониторинг

Multi-Protocol Support:

  • HTTP/HTTPS
  • FTP/FTPS
  • SMB/CIFS
  • SSH
  • DNS
  • TLS/SSL
  • SMTP
  • И многие другие

Архитектура работы

  1. Capture - захват пакетов с интерфейса
  2. Decode - декодирование протоколов
  3. Detection - применение правил детекции
  4. Logging - запись событий
  5. Alert - генерация алертов
  6. Action - выполнение действий (для IPS)

Установка и включение

Проверка доступности

Suricata включен в VyOS 1.5.x (Circinus) и новее.

Проверка версии VyOS:

show version

Включение Suricata

Базовая активация сервиса:

set service suricata
commit
save

После активации необходимо выполнить обновление правил:

update suricata

Команда update suricata:

  • Загружает актуальные правила детекции
  • Обновляет конфигурацию
  • Перезапускает сервис
  • Обязательна для корректной работы

Базовая конфигурация

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

Указание интерфейса для анализа трафика:

set service suricata interface eth0
commit

Множественные интерфейсы:

set service suricata interface eth0
set service suricata interface eth1
set service suricata interface eth2
commit

Рекомендации:

  • WAN интерфейс - для детекции внешних угроз
  • DMZ интерфейс - для защиты публичных сервисов
  • LAN интерфейсы - для internal threat detection

Address Groups

Создание групп адресов для гибких правил:

set service suricata address-group HOME_NET address 192.168.1.0/24
set service suricata address-group HOME_NET address 10.0.0.0/8
set service suricata address-group HOME_NET address 172.16.0.0/12
commit

Множественные группы:

# Internal network
set service suricata address-group HOME_NET address 192.168.0.0/16
set service suricata address-group HOME_NET address 10.0.0.0/8

# DMZ network
set service suricata address-group DMZ_NET address 192.168.100.0/24

# External (Internet)
set service suricata address-group EXTERNAL_NET address !192.168.0.0/16
set service suricata address-group EXTERNAL_NET address !10.0.0.0/8

# DNS servers
set service suricata address-group DNS_SERVERS address 8.8.8.8
set service suricata address-group DNS_SERVERS address 8.8.4.4

# Web servers
set service suricata address-group WEB_SERVERS address 192.168.100.10
set service suricata address-group WEB_SERVERS address 192.168.100.11

commit

Использование отрицания:

# Все кроме внутренней сети
set service suricata address-group EXTERNAL_NET address !192.168.0.0/16

Port Groups

Создание групп портов:

set service suricata port-group HTTP_PORTS port 80
set service suricata port-group HTTP_PORTS port 8080
set service suricata port-group HTTP_PORTS port 8000
commit

Примеры групп портов:

# HTTP ports
set service suricata port-group HTTP_PORTS port 80
set service suricata port-group HTTP_PORTS port 8080
set service suricata port-group HTTP_PORTS port 8000
set service suricata port-group HTTP_PORTS port 8888

# HTTPS ports
set service suricata port-group HTTPS_PORTS port 443
set service suricata port-group HTTPS_PORTS port 8443

# SSH ports
set service suricata port-group SSH_PORTS port 22
set service suricata port-group SSH_PORTS port 2222

# Mail ports
set service suricata port-group MAIL_PORTS port 25
set service suricata port-group MAIL_PORTS port 587
set service suricata port-group MAIL_PORTS port 465

# Database ports
set service suricata port-group DB_PORTS port 3306
set service suricata port-group DB_PORTS port 5432
set service suricata port-group DB_PORTS port 1433

commit

Logging конфигурация

EVE JSON логи

EVE (Extensible Event Format) - основной формат логирования:

set service suricata log eve filetype regular
commit

Типы файлов:

  • regular - обычный файл
  • unix_dgram - Unix domain socket
  • unix_stream - Unix stream socket

Типы событий для логирования

Включение различных типов событий:

# Alert events
set service suricata log eve alerts

# HTTP transactions
set service suricata log eve http

# DNS queries
set service suricata log eve dns

# TLS/SSL connections
set service suricata log eve tls

# File transactions
set service suricata log eve files

# SSH connections
set service suricata log eve ssh

# Flow records
set service suricata log eve flow

# Statistics
set service suricata log eve stats

commit

Полная конфигурация логирования:

set service suricata log eve filetype regular
set service suricata log eve alerts
set service suricata log eve http
set service suricata log eve dns
set service suricata log eve tls
set service suricata log eve files
set service suricata log eve ssh
set service suricata log eve flow
set service suricata log eve stats
commit

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

Логи Suricata находятся в:

  • /var/log/suricata/eve.json - основной лог в JSON формате
  • /var/log/suricata/fast.log - fast alert format
  • /var/log/suricata/stats.log - статистика

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

Обновление правил

Обновление набора правил:

update suricata

Эта команда:

  • Загружает последние правила от Emerging Threats и других источников
  • Обновляет /etc/suricata/suricata.yaml
  • Перезапускает Suricata с новыми правилами

Рекомендуется выполнять регулярно (еженедельно или ежедневно).

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

По умолчанию VyOS использует:

  • Emerging Threats Open - бесплатный набор правил
  • ET/OISF ruleset - community правила

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

  • Malware detection
  • Exploit attempts
  • Policy violations
  • Scan detection
  • Botnet C&C communication
  • Phishing attempts
  • Web attacks

Примеры конфигурации

Пример 1: Базовая защита WAN

# Enable Suricata
set service suricata

# Monitor WAN interface
set service suricata interface eth0

# Define networks
set service suricata address-group HOME_NET address 192.168.1.0/24
set service suricata address-group EXTERNAL_NET address !192.168.1.0/24

# Logging
set service suricata log eve filetype regular
set service suricata log eve alerts
set service suricata log eve http
set service suricata log eve dns

commit
save

# Update rules
update suricata

Пример 2: Защита веб-сервера

# Enable Suricata
set service suricata

# Monitor DMZ interface
set service suricata interface eth2

# Networks
set service suricata address-group DMZ_NET address 192.168.100.0/24
set service suricata address-group WEB_SERVERS address 192.168.100.10
set service suricata address-group WEB_SERVERS address 192.168.100.11

# Ports
set service suricata port-group HTTP_PORTS port 80
set service suricata port-group HTTP_PORTS port 8080
set service suricata port-group HTTPS_PORTS port 443

# Logging with HTTP details
set service suricata log eve filetype regular
set service suricata log eve alerts
set service suricata log eve http
set service suricata log eve tls
set service suricata log eve files

commit
save
update suricata

Пример 3: Комплексная защита сети

# Enable Suricata
set service suricata

# Monitor all interfaces
set service suricata interface eth0
set service suricata interface eth1
set service suricata interface eth2

# Internal networks
set service suricata address-group HOME_NET address 192.168.0.0/16
set service suricata address-group HOME_NET address 10.0.0.0/8

# DMZ
set service suricata address-group DMZ_NET address 192.168.100.0/24

# Critical servers
set service suricata address-group DB_SERVERS address 192.168.50.10
set service suricata address-group DB_SERVERS address 192.168.50.11
set service suricata address-group WEB_SERVERS address 192.168.100.10
set service suricata address-group WEB_SERVERS address 192.168.100.20

# External
set service suricata address-group EXTERNAL_NET address !192.168.0.0/16
set service suricata address-group EXTERNAL_NET address !10.0.0.0/8

# Service ports
set service suricata port-group HTTP_PORTS port 80
set service suricata port-group HTTP_PORTS port 8080
set service suricata port-group HTTPS_PORTS port 443
set service suricata port-group SSH_PORTS port 22
set service suricata port-group DB_PORTS port 3306
set service suricata port-group DB_PORTS port 5432

# Comprehensive logging
set service suricata log eve filetype regular
set service suricata log eve alerts
set service suricata log eve http
set service suricata log eve dns
set service suricata log eve tls
set service suricata log eve ssh
set service suricata log eve files
set service suricata log eve flow
set service suricata log eve stats

commit
save
update suricata

Операционные команды

Просмотр конфигурации

show service suricata

Показывает:

  • Статус сервиса
  • Мониторящиеся интерфейсы
  • Address groups
  • Port groups
  • Logging настройки

Перезапуск Suricata

restart suricata

Перезапуск необходим после:

  • Изменения конфигурации
  • Обновления правил
  • Модификации интерфейсов

Обновление правил и конфигурации

update suricata

Выполняет:

  • Загрузку новых правил
  • Обновление конфигурации
  • Автоматический перезапуск сервиса

Просмотр логов

Алерты в реальном времени:

monitor log suricata
tail -f /var/log/suricata/fast.log

EVE JSON логи:

tail -f /var/log/suricata/eve.json | jq

Фильтрация по типу события:

tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'
tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="http")'

Статистика:

tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats")'

Анализ логов

Формат EVE JSON

Пример alert события:

{
  "timestamp": "2025-10-15T12:34:56.789123+0000",
  "flow_id": 123456789,
  "event_type": "alert",
  "src_ip": "203.0.113.45",
  "src_port": 54321,
  "dest_ip": "192.168.1.10",
  "dest_port": 80,
  "proto": "TCP",
  "alert": {
    "action": "allowed",
    "gid": 1,
    "signature_id": 2100498,
    "rev": 7,
    "signature": "GPL ATTACK_RESPONSE id check returned root",
    "category": "Potentially Bad Traffic",
    "severity": 2
  },
  "http": {
    "hostname": "example.com",
    "url": "/admin/",
    "http_method": "GET",
    "http_user_agent": "Mozilla/5.0",
    "status": 200
  }
}

Полезные запросы jq

Топ источников атак:

cat /var/log/suricata/eve.json | jq -r 'select(.event_type=="alert") | .src_ip' | sort | uniq -c | sort -rn | head -10

Топ сигнатур:

cat /var/log/suricata/eve.json | jq -r 'select(.event_type=="alert") | .alert.signature' | sort | uniq -c | sort -rn | head -10

Алерты по severity:

cat /var/log/suricata/eve.json | jq 'select(.event_type=="alert") | select(.alert.severity==1)'

HTTP транзакции:

cat /var/log/suricata/eve.json | jq 'select(.event_type=="http") | {host: .http.hostname, url: .http.url, method: .http.http_method}'

DNS запросы:

cat /var/log/suricata/eve.json | jq 'select(.event_type=="dns") | {query: .dns.rrname, type: .dns.rrtype}'

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

Отправка в Syslog

Конфигурация syslog на VyOS:

set system syslog host 192.168.1.100 facility local0 level info
set system syslog host 192.168.1.100 format octet-counted
commit

ELK Stack интеграция

Filebeat на VyOS:

Установка (если доступен):

# Через container
set container name filebeat image 'docker.elastic.co/beats/filebeat:8.11.0'
set container name filebeat volume filebeat-config source '/config/filebeat.yml'
set container name filebeat volume suricata-logs source '/var/log/suricata'
commit

Filebeat config (/config/filebeat.yml):

filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/log/suricata/eve.json
    json.keys_under_root: true
    json.add_error_key: true

output.elasticsearch:
  hosts: ["192.168.1.100:9200"]
  index: "suricata-%{+yyyy.MM.dd}"

setup.kibana:
  host: "192.168.1.100:5601"

Splunk интеграция

Splunk Universal Forwarder:

# inputs.conf
[monitor:///var/log/suricata/eve.json]
sourcetype = suricata
index = security

Wazuh интеграция

Wazuh agent конфигурация:

<localfile>
  <log_format>json</log_format>
  <location>/var/log/suricata/eve.json</location>
</localfile>

Устранение неполадок

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

Проблема: Сервис не стартует после commit.

Диагностика:

show log | grep suricata
systemctl status suricata
journalctl -u suricata -f

Возможные причины:

  • Правила не обновлены
  • Ошибка в конфигурации
  • Недостаточно памяти
  • Конфликт портов

Решение:

# Обновить правила
update suricata

# Проверить конфигурацию
suricata -T -c /etc/suricata/suricata.yaml

# Проверить память
show system memory

# Перезапустить
restart suricata

Не видит трафик

Проблема: Алерты не генерируются, трафик не анализируется.

Диагностика:

# Проверить интерфейс
show interfaces

# Проверить capture mode
cat /etc/suricata/suricata.yaml | grep af-packet

# Статистика
tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats")'

Решение:

# Убедиться интерфейс в promiscuous mode
ip link set eth0 promisc on

# Проверить правильность интерфейса
show service suricata

Много false positives

Проблема: Суricata генерирует слишком много ложных алертов.

Решение:

  1. Tune правила - отключить слишком шумные:
# Edit /etc/suricata/threshold.config
suppress gen_id 1, sig_id 2100498
threshold gen_id 1, sig_id 2013028, type both, track by_src, count 5, seconds 60
  1. Whitelist известных хостов:
# В правилах добавить исключения
pass ip 192.168.1.50 any -> any any (msg:"Whitelist monitoring server"; sid:1000001; rev:1;)
  1. Настроить address groups - исключить внутренний трафик из некоторых правил

Высокая загрузка CPU

Проблема: Suricata потребляет много CPU.

Диагностика:

show system processes
top

Решение:

  1. Оптимизация workers:
# /etc/suricata/suricata.yaml
threading:
  set-cpu-affinity: yes
  cpu-affinity:
    - management-cpu-set:
        cpu: [ 0 ]
    - receive-cpu-set:
        cpu: [ 1, 2 ]
    - worker-cpu-set:
        cpu: [ 3, 4 ]
  1. Отключить ненужное логирование:
delete service suricata log eve flow
delete service suricata log eve stats
commit
  1. Ограничить правила - использовать только необходимые категории

Логи переполняют диск

Проблема: /var/log/suricata/ занимает много места.

Решение:

  1. Ротация логов:
# /etc/logrotate.d/suricata
/var/log/suricata/*.log /var/log/suricata/*.json {
    daily
    rotate 7
    missingok
    compress
    delaycompress
    notifempty
    create 0640 root root
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/suricata.pid 2>/dev/null` 2>/dev/null || true
    endscript
}
  1. Отправка в SIEM - вместо локального хранения

  2. Фильтрация событий - логировать только alerts

Безопасность и лучшие практики

Рекомендации по развертыванию

  1. Начинайте с IDS режима:

    • Мониторьте трафик без блокировки
    • Изучайте алерты
    • Tune правила перед IPS
  2. Регулярное обновление правил:

# Cron job для автоматического обновления
# В VyOS через task scheduler
set system task-scheduler task update-suricata executable path '/opt/vyatta/bin/vyatta-op-cmd-wrapper update suricata'
set system task-scheduler task update-suricata interval '1d'
commit
  1. Мониторинг производительности:
# Статистика packet drop
tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats") | .stats.capture'
  1. Whitelist легитимного трафика:

    • Scanning инструменты
    • Monitoring системы
    • Backup servers
  2. Сегментация сети:

    • Разные правила для разных сегментов
    • DMZ с более строгими правилами
    • LAN с фокусом на lateral movement
  3. Интеграция с firewall:

    • Suricata для детекции
    • Firewall для enforcement
    • Автоматизация блокировок
  4. Резервирование ресурсов:

    • CPU: минимум 2 cores для Suricata
    • RAM: 2-4 GB в зависимости от трафика
    • Disk: быстрый SSD для логов
  5. Backup конфигурации:

save /config/backup-suricata-$(date +%Y%m%d).config

Compliance требования

Suricata помогает выполнить:

  • PCI DSS - мониторинг сетевой безопасности
  • HIPAA - детекция несанкционированного доступа
  • GDPR - обнаружение утечек данных
  • SOC 2 - continuous monitoring

Производительность

Рекомендуемые характеристики

Малая сеть (< 100 Mbps):

  • CPU: 2 cores
  • RAM: 2 GB
  • Disk: SSD

Средняя сеть (100-500 Mbps):

  • CPU: 4 cores
  • RAM: 4 GB
  • Disk: Fast SSD

Большая сеть (> 500 Mbps):

  • CPU: 8+ cores
  • RAM: 8+ GB
  • Disk: NVMe SSD
  • Рассмотреть dedicated IDS/IPS appliance

Оптимизация

Конфигурация для высокой производительности:

# /etc/suricata/suricata.yaml (примерно)
af-packet:
  - interface: eth0
    cluster-id: 99
    cluster-type: cluster_flow
    defrag: yes
    use-mmap: yes
    tpacket-v3: yes
    ring-size: 2048
    block-size: 32768

threading:
  set-cpu-affinity: yes
  detect-thread-ratio: 1.5

Заключение

Suricata в VyOS предоставляет enterprise-grade защиту:

  • Comprehensive detection - широкий спектр угроз
  • Multi-protocol - поддержка всех основных протоколов
  • Real-time analysis - анализ в реальном времени
  • Flexible rules - гибкая система правил
  • Rich logging - детальное логирование в JSON
  • SIEM integration - интеграция с monitoring системами

Основные сценарии использования:

  • Защита периметра сети
  • Мониторинг DMZ
  • Детекция advanced threats
  • Compliance и audit
  • Incident response
  • Threat hunting

Правильная настройка и tune Suricata обеспечивает:

  • Раннее обнаружение угроз
  • Предотвращение успешных атак
  • Visibility в сетевой активности
  • Соответствие требованиям безопасности
  • Форензику инцидентов

Suricata - важный компонент defense-in-depth стратегии для VyOS роутеров в cloud и enterprise окружениях.