Snort 3

Network Analysis v3.12.2.0 · 23.04.2026 активный

Следующее поколение Snort IDS/IPS на C++: модульная архитектура с плагинами, нативный IPv6, многопоточная обработка пакетов, унифицированный синтаксис правил и совместимость с миллионами существующих сигнатур.

v3.12.2.0
23.04.2026 current
Добавлен 26.06.2026 · Обновлён 26.06.2026 · Network Analysis
Установка
# Debian / Ubuntu (сборка из исходников)
sudo apt install build-essential libpcap-dev libpcre3-dev   libdnet-dev zlib1g-dev liblzma-dev openssl libssl-dev   libhwloc-dev cmake pkg-config

# Зависимость libdaq
git clone https://github.com/snort3/libdaq && cd libdaq
./configure && make && sudo make install && cd ..

# Snort 3
git clone https://github.com/snort3/snort3
cd snort3 && ./configure_cmake.sh --prefix=/usr/local
cd build && make -j$(nproc) && sudo make install

# Проверка установки
snort --version

# Запуск с конфигом
sudo snort -c /usr/local/etc/snort/snort.lua -i eth0
переведено ИИ

Snort++

Snort 3 — это следующее поколение системы предотвращения вторжений (IPS) Snort.
Этот файл расскажет вам о возможностях Snort++ и проведет вас через шаги от загрузки до демонстрации.
Если вы не знакомы со Snort, сначала ознакомьтесь с документацией Snort.
Мы рассмотрим следующие темы:


ОБЗОР

Эта версия Snort++ включает новые функции, а также все функции Snort 2.X и исправления ошибок базовой версии Snort, за исключением указанных ниже:

Проект = Snort++
Бинарный файл = snort
Версия = 3.0.0 (Сборка 250) на основе 2.9.11

Вот некоторые ключевые особенности Snort++:

  • Поддержка нескольких потоков обработки пакетов
  • Использование общей конфигурации и таблицы атрибутов
  • Простая, скриптуемая конфигурация
  • Делает ключевые компоненты подключаемыми (pluggable)
  • Автоопределение служб для конфигурации без портов
  • Поддержка "липких" буферов (sticky buffers) в правилах
  • Автогенерация справочной документации
  • Лучшая кроссплатформенная поддержка
  • Упрощение тестирования компонентов
  • Использование общей сетевой карты

Дополнительные функции, запланированные на roadmap:

  • Поддержка конвейерной (pipelining) обработки пакетов
  • Поддержка аппаратного выгрузки (offload) и интеграции с планом данных (data plane)
  • Поддержка прокси-режима
  • Поддержка Windows

ЗАВИСИМОСТИ

Если вы уже собирали Snort, у вас может быть всё необходимое. Если нет, скачайте последнее:

  • CMake для сборки из исходников
  • DAQ с https://github.com/snort3/libdaq для ввода/вывода пакетов
  • dnet с https://github.com/dugsong/libdnet.git для сетевых утилитарных функций
  • flex >= 2.6.0 с https://github.com/westes/flex для синтаксического анализатора JavaScript
  • g++ >= 7 или другой компилятор C++17
  • hwloc с https://www.open-mpi.org/projects/hwloc/ для управления привязкой к CPU
  • LuaJIT с http://luajit.org для конфигурации и скриптов
  • OpenSSL с https://www.openssl.org/source/ для файловых подписей SHA и MD5, опции правила protected_content и обнаружения службы SSL
  • pcap с http://www.tcpdump.org для логирования в стиле tcpdump
  • PCRE2 с http://www.pcre.org для сопоставления регулярных выражений
  • pkgconfig с https://www.freedesktop.org/wiki/Software/pkg-config/ для определения зависимостей сборки
  • zlib с http://www.zlib.net для декомпрессии

Дополнительные пакеты предоставляют опциональные функции. Проверьте руководство для получения подробной информации.

ЗАГРУЗКА

В разделе загрузок на snort.org доступен архив с исходным кодом:

snort-3.0.0-a3.tar.gz

Также вы можете получить код с помощью:

git clone https://github.com/snort3/snort3.git

Существуют отдельные пакеты extras для cmake, которые предоставляют дополнительные функции и демонстрируют, как собирать плагины. Исходный код extras находится в репозитории snort3_extra.git.

СБОРКА SNORT

Выполните следующие шаги:

  1. Настройте исходную директорию:

  2. Если вы используете клон с github:

    shell cd snort3/

  3. В противном случае сделайте так:

    shell tar zxf snort-tarball cd snort-3.0.0*

  4. Настройте путь установки:

    shell export my_path=/path/to/snorty

  5. Скомпилируйте и установите:

  6. Для сборки с помощью cmake и make запустите configure_cmake.sh. Он автоматически создаст и заполнит новую поддиректорию с именем 'build'.

    shell ./configure_cmake.sh --prefix=$my_path cd build make -j $(nproc) install

Примечание:

  • Если вы можете выполнить src/snort -V, сборка прошла успешно.
  • Если вы знакомы с cmake, вы можете запустить cmake/ccmake вместо configure_cmake.sh.
  • cmake --help выведет список доступных генераторов, таких как Xcode. Смело используйте любой, но помощь по ним будет предоставлена отдельно.

ЗАПУСК SNORT

Вот несколько примеров. Если вы используете правила и/или конфигурации Talos, сначала задайте необходимые переменные в начале файлов snort.lua и snort_defaults.lua.

  • Snort++ предоставляет обширную справку из командной строки, включая:

    shell $my_path/bin/snort --help $my_path/bin/snort --help-module suppress $my_path/bin/snort --help-config | grep thread

  • Просмотрите и выведите содержимое pcap-файла. В следующих примерах замените a.pcap на ваш любимый файл:

    shell $my_path/bin/snort -r a.pcap $my_path/bin/snort -L dump -d -e -q -r a.pcap

  • Проверьте конфигурацию, с правилами или без:

    shell $my_path/bin/snort -c $my_path/etc/snort/snort.lua $my_path/bin/snort -c $my_path/etc/snort/snort.lua -R $my_path/etc/snort/sample.rules

  • Запустите в режиме IDS. В следующем примере замените pcaps/ на путь к директории с одним или несколькими файлами *.pcap:

    shell $my_path/bin/snort -c $my_path/etc/snort/snort.lua -R $my_path/etc/snort/sample.rules \ -r a.pcap -A alert_test -n 100000

  • Давайте подавим правило 1:2123. Мы могли бы отредактировать конфиг или просто сделать так:

    shell $my_path/bin/snort -c $my_path/etc/snort/snort.lua -R $my_path/etc/snort/sample.rules \ -r a.pcap -A alert_test -n 100000 --lua "suppress = { { gid = 1, sid = 2123 } }"

  • Запустите на директории с полной нагрузкой, используя несколько потоков обработки пакетов:

    shell $my_path/bin/snort -c $my_path/etc/snort/snort.lua -R $my_path/etc/snort/sample.rules \ --pcap-filter \*.pcap --pcap-dir pcaps/ -A alert_fast --max-packet-threads 8

Дополнительные примеры приведены в doc/usage.txt.

ТЕСТИРОВАНИЕ ФАЗЗЕРОМ

Snort включает фаззер-цели libFuzzer для тестирования различных компонентов. Для сборки и запуска фаззеров требуется Clang.

  • Сборка фаззеров с AddressSanitizer:

    shell CC=clang CXX=clang++ ./configure_cmake.sh --enable-fuzz-sanitizer --enable-fuzzers \ --enable-address-sanitizer cd build make fuzz -j $(nproc)

  • Если вам нужно указать пути include и библиотек для DAQ:

    shell CC=clang CXX=clang++ ./configure_cmake.sh --enable-fuzz-sanitizer --enable-fuzzers \ --enable-address-sanitizer --with-daq-includes=/path/to/daq/include --with-daq-libraries=/path/to/daq/lib cd build make fuzz -j $(nproc)

  • Запустите фаззер-цель, указав директорию корпуса (corpus). Каждая цель собирается в build/fuzz/:

    shell mkdir file_olefile_fuzz_corpus ./fuzz/file_olefile_fuzz ./file_olefile_fuzz_corpus

  • Если библиотеки DAQ находятся не в стандартном пути поиска библиотек, установите LD_LIBRARY_PATH:

    shell LD_LIBRARY_PATH=/path/to/daq/lib ./fuzz/file_olefile_fuzz ./file_olefile_fuzz_corpus

  • Нажмите Ctrl+C, чтобы остановить фаззер. Сохраненные файлы корпуса можно вывести с помощью:

    shell ls ./file_olefile_fuzz_corpus

  • Вместо AddressSanitizer соберите с инструментарием покрытия (coverage), чтобы измерить, какие кодовые пути использует фаззер:

    shell CC=clang CXX=clang++ ./configure_cmake.sh --enable-fuzz-sanitizer --enable-fuzzers \ --enable-fuzz-coverage cd build make fuzz -j $(nproc)

  • Запустите сборку покрытия на существующем корпусе (с использованием -runs=0 для повторного воспроизведения без генерации новых входных данных):

    shell LLVM_PROFILE_FILE="file_olefile_fuzz.profraw" ./fuzz/file_olefile_fuzz \ file_olefile_fuzz_corpus -runs=0 -detect_leaks=0

  • Сгенерируйте отчет о покрытии в формате HTML:

    shell llvm-profdata merge -sparse file_olefile_fuzz.profraw -o file_olefile_fuzz.profdata llvm-cov show -format=html -instr-profile=file_olefile_fuzz.profdata \ ./fuzz/file_olefile_fuzz -output-dir=file_olefile_fuzz_cov_html

Откройте file_olefile_fuzz_cov_html/index.html в браузере для просмотра отчета.

ДОКУМЕНТАЦИЯ

Ознакомьтесь с руководством, часть которого генерируется кодом, поэтому она всегда актуальна:

$my_path/share/doc/snort/snort_manual.pdf
$my_path/share/doc/snort/snort_manual.html
$my_path/share/doc/snort/snort_manual/index.html

В нем пока еще мало информации о "как" и "почему", но оно содержит всю доступную конфигурацию и т.д. Некоторые ключевые изменения в правилах:

  • необходимо использовать подпараметры content через запятую, например: content:"foo", nocase;
  • селекторы буферов должны стоять перед content и остаются в силе до тех пор, пока не будут изменены
  • селекторы буферов для PCRE были удалены
  • обратитесь к руководству для получения дополнительной информации о различиях Snort++ и Snort
  • обратитесь к разделу справки по руководству, чтобы понять, как определяются параметры и т.д.

Также оно охватывает новые функции, не продемонстрированные здесь:

  • snort2lua — инструмент для преобразования конфигурации и правил Snort 2.X в новый формат
  • новый HTTP-инспектор
  • биндер (binder) для сопоставления конфигурации с трафиком
  • мастер (wizard) для конфигурации, независимой от портов
  • улучшенный разбор правил — произвольные пробелы, комментарии в стиле C, комментарии #begin/#end
  • локальная и удаленная командная оболочка

SQUEAL

o")~

Мы надеемся, что вы так же в восторге от Snort++, как и мы. Дайте нам знать, что вы думаете, в рассылке snort-users. Тем временем мы продолжаем не останавливаться на достигнутом.

Комментарии
Войдите, чтобы оставить комментарий