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
- И многие другие
Архитектура работы
- Capture - захват пакетов с интерфейса
- Decode - декодирование протоколов
- Detection - применение правил детекции
- Logging - запись событий
- Alert - генерация алертов
- 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 socketunix_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 генерирует слишком много ложных алертов.
Решение:
- 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
- Whitelist известных хостов:
# В правилах добавить исключения
pass ip 192.168.1.50 any -> any any (msg:"Whitelist monitoring server"; sid:1000001; rev:1;)
- Настроить address groups - исключить внутренний трафик из некоторых правил
Высокая загрузка CPU
Проблема: Suricata потребляет много CPU.
Диагностика:
show system processes
top
Решение:
- Оптимизация 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 ]
- Отключить ненужное логирование:
delete service suricata log eve flow
delete service suricata log eve stats
commit
- Ограничить правила - использовать только необходимые категории
Логи переполняют диск
Проблема: /var/log/suricata/
занимает много места.
Решение:
- Ротация логов:
# /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
}
Отправка в SIEM - вместо локального хранения
Фильтрация событий - логировать только alerts
Безопасность и лучшие практики
Рекомендации по развертыванию
Начинайте с IDS режима:
- Мониторьте трафик без блокировки
- Изучайте алерты
- Tune правила перед IPS
Регулярное обновление правил:
# 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
- Мониторинг производительности:
# Статистика packet drop
tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats") | .stats.capture'
Whitelist легитимного трафика:
- Scanning инструменты
- Monitoring системы
- Backup servers
Сегментация сети:
- Разные правила для разных сегментов
- DMZ с более строгими правилами
- LAN с фокусом на lateral movement
Интеграция с firewall:
- Suricata для детекции
- Firewall для enforcement
- Автоматизация блокировок
Резервирование ресурсов:
- CPU: минимум 2 cores для Suricata
- RAM: 2-4 GB в зависимости от трафика
- Disk: быстрый SSD для логов
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 окружениях.