Использование Snort
Базовая настройка Snort
Snort ‒ это система обнаружения вторжения, которая способна в реальном времени осуществлять анализ трафика.
Для использования Snort необходимо установить пакеты snort и snort-extra. Пакет snort-extra содержит модуль для настройки SELinux, базовый набор правил для анализа трафика и скрипт, упрощающий первоначальную настройку snort.
В качестве примера настройки будет использован один из хостов, входящий в состав среды виртуализации РОСА Виртуализация. В первую очередь для установки необходимых пакетов требуется включить репозиторий DVD и примонтировать диск в директорию /mnt:
dnf config-manager --set-enabled DVD
mount -t iso9660 -o ro /dev/sr0 /mnt
Далее нужно установить пакеты snort и snort-extra:
dnf install snort snort-extra
Файл /etc/sysconfig/snort содержит параметры запуска snort, а /etc/snort/snort.conf является основным конфигурационным файлом. Перед запуском snort требуется самостоятельно выполнить необходимые настройки либо воспользоваться утилитой install-snort-extra, которая запускается без каких-либо параметров и настраивает SELinux, копирует в директорию /etc/snort базовые правила для анализа трафика и устанавливает основной конфигурационный файл /etc/snort/snort.conf:
install-snort-extra
Installing SELinux policy module: snort-extra
Installing snort rules and change /etc/snort/snort.conf
Далее в файле /etc/snort/snort.conf потребуется указать адрес сетевого интерфейса или же адрес внутренней сети и все остальные адреса, которые будут считаться внешними (рисунок 17):
ipvar HOME_NET 192.168.210.162/32
ipvar EXTERNAL_NET !$HOME_NET

Рисунок 17 ‒ Редактирование файла /etc/snort/snort.conf
В файле /etc/sysconfig/snort в качестве сетевого интерфейса следует прописать ovirtmgmt (рисунок 18):
INTERFACE=ovirtmgmt

Рисунок 18 ‒ Редактирование файла /etc/sysconfig/snort
После всех предварительных настроек необходимо выполнить проверку корректности конфигурации snort, и в случае успеха вывод команды будет заканчиваться сообщением "Snort successfully validated the configuration!":
snort -T -c /etc/snort/snort.conf
.
.
.
--== Initialization Complete ==--
,,_ -*> Snort! <*-
o" )~ Version 2.9.20 GRE (Build 82)
'''' By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
Copyright (C) 2014-2022 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using libpcap version 1.10.0 (with TPACKET_V3)
Using PCRE version: 8.44 2020-02-12
Using ZLIB version: 1.2.11
Rules Engine: SF_SNORT_DETECTION_ENGINE Version 3.2 <Build 1>
Preprocessor Object: SF_GTP Version 1.1 <Build 1>
Preprocessor Object: SF_FTPTELNET Version 1.2 <Build 13>
Preprocessor Object: SF_DNS Version 1.1 <Build 4>
Preprocessor Object: SF_DNP3 Version 1.1 <Build 1>
Preprocessor Object: SF_DCERPC2 Version 1.0 <Build 3>
Preprocessor Object: SF_SSLPP Version 1.1 <Build 4>
Preprocessor Object: SF_SSH Version 1.1 <Build 3>
Preprocessor Object: SF_SMTP Version 1.1 <Build 9>
Preprocessor Object: SF_SIP Version 1.1 <Build 1>
Preprocessor Object: SF_SDF Version 1.1 <Build 1>
Preprocessor Object: SF_S7COMMPLUS Version 1.0 <Build 1>
Preprocessor Object: SF_REPUTATION Version 1.1 <Build 1>
Preprocessor Object: SF_POP Version 1.0 <Build 1>
Preprocessor Object: SF_MODBUS Version 1.1 <Build 1>
Preprocessor Object: SF_IMAP Version 1.0 <Build 1>
Total snort Fixed Memory Cost - MaxRss:802792
Snort successfully validated the configuration!
Snort exiting
Затем необходимо запустить snortd и проверить его статус:
systemctl restart snortd.service
systemctl status snortd.service
На рисунке 19 показан результат успешного запуска системы snort.

Рисунок 19 ‒ Успешный запуск системы snort
Пример применения Snort для анализа трафика SSH
Для тестового примера обнаружения вторжения можно воспользоваться правилом анализа SSH-трафика, отслеживающего попытки подбора пароля:
alert tcp any any -> $HOME_NET 22 (msg:"SSH brute force login attempt"; flow: to_server, established; content:"SSH"; nocase; offset: 0; depth: 4; detection_filter: track by_src, count 5, seconds 60; classtype: misc-attack; sid:10000001; rev: 1;)
Эту строку необходимо добавить в файл /etc/snort/rules/local.rules и перезапустить snortd:
systemctl restart snortd.service
При обнаружении попытки подбора пароля к SSH-серверу в файле /var/log/snort/alert будут регистрироваться соответствующие предупреждения:
11/06-12:07:35.588265 [**] [1:10000001:1] SSH brute force login attempt [**] [Classification: Misc Attack] [Priority: 2] {TCP} 192.168.210.69:44816 -> 192.168.210.162:22
11/06-12:07:35.653354 [**] [1:10000001:1] SSH brute force login attempt [**] [Classification: Misc Attack] [Priority: 2] {TCP} 192.168.210.69:44824 -> 192.168.210.162:22
11/06-12:07:35.652514 [**] [1:10000001:1] SSH brute force login attempt [**] [Classification: Misc Attack] [Priority: 2] {TCP} 192.168.210.69:44822 -> 192.168.210.162:22
11/06-12:07:35.664541 [**] [1:10000001:1] SSH brute force login attempt [**] [Classification: Misc Attack] [Priority: 2] {TCP} 192.168.210.69:44834 -> 192.168.210.162:22
11/06-12:07:35.691606 [**] [1:10000001:1] SSH brute force login attempt [**] [Classification: Misc Attack] [Priority: 2] {TCP} 192.168.210.69:44840 -> 192.168.210.162:22
Количество полностью идентичных событий, регистрируемых в единицу времени, настраивается в файле /etc/snort/threshold.conf. В качестве примера разрешена регистрация только одного уникального события в течении 60 секунд. Все остальные идентичные события, произошедшие в установленный период времени, не будут регистрироваться (рисунок 20).

Рисунок 20 ‒ Настройка регистрируемых событий
Уведомления Snort
Для рассылки уведомлений по электронной почте требуется установить пакеты swatch и swatch-systemd. Пакет swatch-systemd позволяет запускать swatch в качестве сервиса.
Для настройки сервиса уведомлений Snort нужно выполнить следующие действия:
- для установки соответствующих пакетов выполнить команду:
dnf install swatch swatch-systemd
- в файле /etc/snort/snort.conf заменить строку:
output alert_syslog: LOG_AUTH LOG_ALERT
на строку (рисунок 21):
output alert_syslog: LOG_LOCAL2 LOG_ALERT

Рисунок 21 ‒ Редактирование файла /etc/snort/snort.conf
- в файле файле /etc/sysconfig/snort следует закомментировать строку
"ALERTMODE=fast"(рисунок 22);

Рисунок 22 ‒ Редактирование файла /etc/sysconfig/snort
- в файл /etc/rsyslog.conf добавить строки (рисунок 23):
Save snort alert also to /var/log/snort/alert.log
local2.alert /var/log/snort/alert.log

Рисунок 23 ‒ Редактирование файла /etc/rsyslog.conf
- перезапустить сервисы rsyslog и snortd:
systemctl restart rsyslog.service snortd.service
После проделанных изменений регистрация событий snort будет регистрироваться в файл /var/log/messages и дублироваться в файл /var/log/snort/alert.log. Количество однотипных событий, регистрируемых в единицу времени, настраивается в файле /etc/snort/threshold.conf.
Важно ‒ Настоятельно рекомендуется установить лимит на количество идентичный событий, регистрируемых в единицу времени, чтобы избежать избыточной нагрузки на почтовую систему. Конфигурационный файл /etc/sysconfig/swatch содержит параметры запуска для сервиса swatch, в том числе log-файл, за которым ведётся мониторинг:
SWATCH_ARGS="--tail-file=/var/log/snort/alert.log"
Файл /etc/swatch.conf содержит правила для рассылки уведомлений по электронной почте:
watchfor /Priority\: (1|2)/
mail root@localhost,subject="[SNORT] Priority $1 Alert!"
- включить и запустить сервис swatch:
systemctl enable --now swatch.service
С вышеописанной конфигурацией все события, попавшие в файл /var/log/snort/alert.log и имеющие приоритет 1 или 2, будут отправлены по адресу root@localhost. Для проверки работоспособности данного примера требуется запустить сервис postfix на настраиваемом хосте:
systemctl start postfix.service