Установка Snort на Ubuntu 22.04/24.04 - Пошаговая инструкция | AdminWiki

Установка Snort на Ubuntu: Полное руководство для мониторинга сетевой безопасности

18 декабря 2025 10 мин. чтения #devops #ids #linux #snort #ubuntu #безопасность #сетевой мониторинг
Содержание статьи

Представь, что твоя сеть — это крепость. Стены высокие, ворота прочные, но что если враг уже внутри? Система обнаружения вторжений (IDS) — это твои часовые, которые бдят 24/7. Сегодня мы разберем, как установить и настроить одного из самых надежных "часовых" в мире — Snort на Ubuntu. Это не просто инструкция, а полноценный гайд от Senior DevOps, который поможет тебе создать эффективную систему мониторинга сетевой безопасности.

Что такое Snort и зачем он нужен?

Snort — это мощная система обнаружения и предотвращения сетевых вторжений с открытым исходным кодом. Он анализирует сетевой трафик в реальном времени, ищет подозрительные активности и атаки, используя сигнатурный и аномальный анализ. Давай разберем, почему именно Snort:

  • Бесплатный и open-source — полный контроль над системой
  • Гибкая настройка — тысячи правил и возможность создавать свои
  • Высокая производительность — обрабатывает гигабитные потоки
  • Активное сообщество — постоянные обновления правил
Важно: Snort может работать в трех режимах: сниффер (sniffer), регистратор пакетов (packet logger) и полноценная система обнаружения вторжений (IDS). Мы будем настраивать именно IDS режим.

Подготовка системы Ubuntu к установке Snort

Перед началом установки убедись, что у тебя свежая версия Ubuntu (22.04 LTS или 24.04 LTS) и права суперпользователя. Давай подготовим систему:

1. Обновление системы и установка зависимостей

bash
# Обновляем список пакетов
sudo apt update && sudo apt upgrade -y

# Устанавливаем необходимые зависимости
sudo apt install -y build-essential libpcap-dev libpcre3-dev \
  libdumbnet-dev bison flex zlib1g-dev liblzma-dev openssl \
  libssl-dev libnghttp2-dev libluajit-5.1-dev pkg-config \
  libhwloc-dev libcmocka-dev libnetfilter-queue-dev \
  libmnl-dev libunwind-dev liblz4-dev libsqlite3-dev

2. Установка DAQ (Data Acquisition Library)

DAQ необходим для захвата сетевых пакетов. Скачаем и соберем последнюю версию:

bash
# Создаем рабочую директорию
mkdir ~/snort_src && cd ~/snort_src

# Скачиваем последнюю версию DAQ
wget https://github.com/snort3/libdaq/archive/refs/tags/v3.0.15.tar.gz -O libdaq.tar.gz

# Распаковываем и собираем
tar -xzf libdaq.tar.gz
cd libdaq-*
./bootstrap
./configure
make
sudo make install

Установка Snort 3 на Ubuntu

Теперь перейдем к основной части — установке Snort 3 (последней версии).

3. Сборка и установка Snort

bash
# Возвращаемся в рабочую директорию
cd ~/snort_src

# Скачиваем Snort 3
wget https://github.com/snort3/snort3/archive/refs/tags/3.1.78.0.tar.gz -O snort3.tar.gz

# Распаковываем
 tar -xzf snort3.tar.gz
cd snort3-*

# Конфигурируем с поддержкой всех необходимых модулей
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc
cd build
make -j$(nproc)
sudo make install
Внимание: Процесс компиляции может занять 10-20 минут в зависимости от мощности системы. Параметр -j$(nproc) использует все доступные ядра процессора для ускорения сборки.

4. Проверка установки

bash
# Проверяем версию Snort
snort --version

# Ожидаемый вывод:
# Snort++ 3.1.78.0
# ...

# Проверяем доступные плагины
snort --plugin-list

Базовая настройка Snort на Ubuntu

Теперь настроим Snort для работы в режиме IDS. Создадим необходимую структуру каталогов и конфигурационные файлы.

5. Создание структуры каталогов

bash
# Создаем системные каталоги
sudo mkdir -p /etc/snort
sudo mkdir -p /var/log/snort
sudo mkdir -p /usr/local/lib/snort_dynamicrules

# Создаем каталоги для правил
sudo mkdir -p /etc/snort/rules
sudo mkdir -p /etc/snort/so_rules
sudo mkdir -p /etc/snort/lists
sudo mkdir -p /etc/snort/preproc_rules

6. Копирование конфигурационных файлов

bash
# Копируем конфигурационные файлы из исходников
cd ~/snort_src/snort3-*
sudo cp -r etc/* /etc/snort/
sudo cp snort.lua /etc/snort/

# Устанавливаем права
sudo chown -R root:root /etc/snort
sudo chmod -R 755 /etc/snort

7. Настройка конфигурационного файла snort.lua

Отредактируем основной конфигурационный файл. Давай создадим базовую конфигурацию:

lua
-- /etc/snort/snort.lua
-- Базовая конфигурация Snort 3

HOME_NET = '192.168.1.0/24'  -- Замени на свою сеть
EXTERNAL_NET = 'any'

vars = 
{
    HOME_NET = HOME_NET,
    EXTERNAL_NET = EXTERNAL_NET,
    HTTP_PORTS = '80',
    SHELLCODE_PORTS = '!80',
    ORACLE_PORTS = '1521',
    SSH_PORTS = '22',
    DNS_SERVERS = '192.168.1.1',  -- Твой DNS сервер
    SMTP_SERVERS = HOME_NET,
    SQL_SERVERS = HOME_NET,
    TELNET_SERVERS = HOME_NET,
    HTTP_SERVERS = HOME_NET,
    SIP_SERVERS = HOME_NET
}

-- Настройка вывода логов
alert_syslog = 
{
    level = 'info',
    facility = 'local4'
}

-- Включение модулей
ips = 
{
    mode = tap,
    rules = [[include $RULE_PATH/snort3-community.rules]]
}

-- Настройка мониторинга сетевого интерфейса
binder = 
{
    { when = { proto = 'tcp', ports = '80 443', service = 'http' }, use = { type = 'inspection', name = 'http_inspect' } },
    { when = { proto = 'tcp', ports = '21', service = 'ftp' }, use = { type = 'inspection', name = 'ftp_server' } },
    { when = { proto = 'tcp', ports = '22', service = 'ssh' }, use = { type = 'inspection', name = 'ssh' } },
    { when = { proto = 'tcp', ports = '23', service = 'telnet' }, use = { type = 'inspection', name = 'telnet' } },
    { when = { proto = 'tcp', ports = '25 465 587', service = 'smtp' }, use = { type = 'inspection', name = 'smtp' } }
}

Установка и настройка правил для Snort

Правила — это "мозг" Snort. Они определяют, какие активности считать подозрительными. Мы установим бесплатные Community Rules.

8. Установка Community Rules

bash
# Скачиваем последние Community Rules
cd /etc/snort/rules
sudo wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz

# Распаковываем
sudo tar -xzf snort3-community-rules.tar.gz
sudo rm snort3-community-rules.tar.gz

# Переименовываем для удобства
sudo mv snort3-community-rules/* .
sudo rmdir snort3-community-rules

9. Создание локальных правил

Создадим файл для своих правил. Например, заблокируем сканирование портов:

bash
# Создаем файл локальных правил
sudo nano /etc/snort/rules/local.rules
rules
# /etc/snort/rules/local.rules
# Локальные правила для моей сети

# Обнаружение сканирования портов
alert tcp $EXTERNAL_NET any -> $HOME_NET any \
  (msg:"Потенциальное сканирование портов"; \
   flow:to_server,established; \
   detection_filter:track by_src, count 10, seconds 5; \
   threshold:type threshold, track by_src, count 10, seconds 5; \
   sid:1000001; rev:1;)

# Обнаружение SSH брутфорса
alert tcp $EXTERNAL_NET any -> $HOME_NET 22 \
  (msg:"Возможная атака brute-force на SSH"; \
   flow:to_server,established; \
   detection_filter:track by_src, count 5, seconds 60; \
   sid:1000002; rev:1;)

Запуск и тестирование Snort

Теперь протестируем нашу установку. Давай проверим конфигурацию и запустим Snort в тестовом режиме.

10. Проверка конфигурации

bash
# Проверяем конфигурацию на ошибки
sudo snort -c /etc/snort/snort.lua --plugin-path /usr/local/lib/snort/plugins --check

# Если все хорошо, увидишь:
# Snort successfully validated the configuration!
# Snort exiting

11. Тестовый запуск в режиме IDS

bash
# Запускаем Snort в фоновом режиме на интерфейсе eth0 (замени на свой)
sudo snort -c /etc/snort/snort.lua -i eth0 -A alert_fast -l /var/log/snort -k none -D

# Проверяем, что процесс запущен
ps aux | grep snort

# Смотрим логи в реальном времени
sudo tail -f /var/log/snort/alert_fast.txt

12. Создание systemd сервиса для автозапуска

Для production-окружения создадим systemd сервис:

bash
# Создаем файл сервиса
sudo nano /etc/systemd/system/snort.service
ini
[Unit]
Description=Snort 3 Network Intrusion Detection System
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/snort -c /etc/snort/snort.lua -i eth0 -A alert_fast -l /var/log/snort -k none
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
bash
# Перезагружаем systemd и включаем автозапуск
sudo systemctl daemon-reload
sudo systemctl enable snort
sudo systemctl start snort
sudo systemctl status snort

Мониторинг и анализ логов Snort

Установка завершена, но это только начало. Давай настроим мониторинг логов для эффективного анализа угроз.

13. Настройка ротации логов

bash
# Устанавливаем logrotate
sudo apt install -y logrotate

# Создаем конфигурацию для ротации логов Snort
sudo nano /etc/logrotate.d/snort
text
/var/log/snort/*.txt {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 640 root root
    sharedscripts
    postrotate
        systemctl reload snort > /dev/null 2>&1 || true
    endscript
}

14. Полезные команды для работы с Snort

Команда Описание
snort -c /etc/snort/snort.lua -i eth0 -A console Запуск с выводом алертов в консоль
snort -c /etc/snort/snort.lua -r capture.pcap Анализ сохраненного pcap файла
snort --list-plugins Показать все доступные плагины
grep -i "ssh" /var/log/snort/alert_fast.txt Поиск SSH алертов в логах

Оптимизация производительности Snort

Для высоконагруженных сетей важна оптимизация. Вот несколько советов от Senior DevOps:

  • Используй PF_RING или AF_PACKET для улучшения захвата пакетов
  • Настрой фильтрацию правил — отключай нерелевантные для твоей сети
  • Используй аппаратное ускорение при наличии Intel QuickAssist или подобных
  • Настройка CPU affinity — закрепи процессы за конкретными ядрами
  • Мониторинг ресурсов — следи за использованием CPU и памяти
Совет: Для production-окружения рассмотри использование Suricata как альтернативу или дополнение к Snort. Suricata лучше использует многопоточность и имеет встроенную поддержку многопоточного анализа.

Часто задаваемые вопросы (FAQ)

Snort не видит сетевой трафик, что делать?

Во-первых, проверь правильность указания сетевого интерфейса командой ip a. Убедись, что Snort запущен с правами root. Проверь, не блокирует ли трафик фаервол: sudo iptables -L. Для теста запусти Snort в режиме сниффера: sudo snort -i eth0 -v.

Как обновлять правила Snort?

Для Community Rules просто перекачай архив с официального сайта. Для автоматического обновления создай cron задачу:

bash
# Добавь в crontab -e
0 2 * * * cd /etc/snort/rules && wget -q -O - https://www.snort.org/downloads/community/snort3-community-rules.tar.gz | tar -xz && systemctl reload snort

Snort использует много CPU, как оптимизировать?

1. Отключи неиспользуемые препроцессоры в snort.lua
2. Используй фильтрацию правил по протоколам, которые есть в твоей сети
3. Рассмотри использование аппаратного ускорения
4. Увеличь размер снимка пакета (snap_len) если это допустимо

Как интегрировать Snort с SIEM системой?

Настрой вывод логов в syslog и направь их в SIEM. В конфигурации snort.lua укажи:

lua
alert_syslog = {
    level = 'info',
    facility = 'local4',
    options = 'nocanon'  
}

Затем настрой rsyslog для пересылки логов в SIEM.

Заключение

Поздравляю! Ты успешно установил и настроил Snort на Ubuntu. Теперь у тебя есть мощная система обнаружения сетевых вторжений, которая мониторит трафик 24/7. Помни, что установка — это только первый шаг. Регулярно обновляй правила, анализируй логи, настраивай фильтры под свою сетевую инфраструктуру.

Как следующий шаг, рекомендую:

  1. Настроить интеграцию с системой мониторинга (Prometheus + Grafana)
  2. Реализовать автоматическое блокирование IP через интеграцию с iptables или fail2ban
  3. Настроить централизованный сбор логов с нескольких сенсоров
  4. Реализовать тестирование правил через воспроизведение известных атак

Безопасность — это процесс, а не состояние. Регулярно пересматривай свою конфигурацию, следи за новыми угрозами и не забывай про обучение. Удачи в защите твоей сетевой инфраструктуры!

Поделиться:
Сохранить гайд? В закладки браузера