Представь, что твоя сеть — это крепость. Стены высокие, ворота прочные, но что если враг уже внутри? Система обнаружения вторжений (IDS) — это твои часовые, которые бдят 24/7. Сегодня мы разберем, как установить и настроить одного из самых надежных "часовых" в мире — Snort на Ubuntu. Это не просто инструкция, а полноценный гайд от Senior DevOps, который поможет тебе создать эффективную систему мониторинга сетевой безопасности.
Что такое Snort и зачем он нужен?
Snort — это мощная система обнаружения и предотвращения сетевых вторжений с открытым исходным кодом. Он анализирует сетевой трафик в реальном времени, ищет подозрительные активности и атаки, используя сигнатурный и аномальный анализ. Давай разберем, почему именно Snort:
- Бесплатный и open-source — полный контроль над системой
- Гибкая настройка — тысячи правил и возможность создавать свои
- Высокая производительность — обрабатывает гигабитные потоки
- Активное сообщество — постоянные обновления правил
Подготовка системы Ubuntu к установке Snort
Перед началом установки убедись, что у тебя свежая версия Ubuntu (22.04 LTS или 24.04 LTS) и права суперпользователя. Давай подготовим систему:
1. Обновление системы и установка зависимостей
# Обновляем список пакетов
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 необходим для захвата сетевых пакетов. Скачаем и соберем последнюю версию:
# Создаем рабочую директорию
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
# Возвращаемся в рабочую директорию
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
-j$(nproc) использует все доступные ядра процессора для ускорения сборки.
4. Проверка установки
# Проверяем версию Snort
snort --version
# Ожидаемый вывод:
# Snort++ 3.1.78.0
# ...
# Проверяем доступные плагины
snort --plugin-list
Базовая настройка Snort на Ubuntu
Теперь настроим Snort для работы в режиме IDS. Создадим необходимую структуру каталогов и конфигурационные файлы.
5. Создание структуры каталогов
# Создаем системные каталоги
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. Копирование конфигурационных файлов
# Копируем конфигурационные файлы из исходников
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
Отредактируем основной конфигурационный файл. Давай создадим базовую конфигурацию:
-- /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
# Скачиваем последние 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. Создание локальных правил
Создадим файл для своих правил. Например, заблокируем сканирование портов:
# Создаем файл локальных правил
sudo nano /etc/snort/rules/local.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. Проверка конфигурации
# Проверяем конфигурацию на ошибки
sudo snort -c /etc/snort/snort.lua --plugin-path /usr/local/lib/snort/plugins --check
# Если все хорошо, увидишь:
# Snort successfully validated the configuration!
# Snort exiting
11. Тестовый запуск в режиме IDS
# Запускаем 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 сервис:
# Создаем файл сервиса
sudo nano /etc/systemd/system/snort.service
[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
# Перезагружаем systemd и включаем автозапуск
sudo systemctl daemon-reload
sudo systemctl enable snort
sudo systemctl start snort
sudo systemctl status snort
Мониторинг и анализ логов Snort
Установка завершена, но это только начало. Давай настроим мониторинг логов для эффективного анализа угроз.
13. Настройка ротации логов
# Устанавливаем logrotate
sudo apt install -y logrotate
# Создаем конфигурацию для ротации логов Snort
sudo nano /etc/logrotate.d/snort
/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 и памяти
Часто задаваемые вопросы (FAQ)
Snort не видит сетевой трафик, что делать?
Во-первых, проверь правильность указания сетевого интерфейса командой ip a. Убедись, что Snort запущен с правами root. Проверь, не блокирует ли трафик фаервол: sudo iptables -L. Для теста запусти Snort в режиме сниффера: sudo snort -i eth0 -v.
Как обновлять правила Snort?
Для Community Rules просто перекачай архив с официального сайта. Для автоматического обновления создай cron задачу:
# Добавь в 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 укажи:
alert_syslog = {
level = 'info',
facility = 'local4',
options = 'nocanon'
}
Затем настрой rsyslog для пересылки логов в SIEM.
Заключение
Поздравляю! Ты успешно установил и настроил Snort на Ubuntu. Теперь у тебя есть мощная система обнаружения сетевых вторжений, которая мониторит трафик 24/7. Помни, что установка — это только первый шаг. Регулярно обновляй правила, анализируй логи, настраивай фильтры под свою сетевую инфраструктуру.
Как следующий шаг, рекомендую:
- Настроить интеграцию с системой мониторинга (Prometheus + Grafana)
- Реализовать автоматическое блокирование IP через интеграцию с iptables или fail2ban
- Настроить централизованный сбор логов с нескольких сенсоров
- Реализовать тестирование правил через воспроизведение известных атак
Безопасность — это процесс, а не состояние. Регулярно пересматривай свою конфигурацию, следи за новыми угрозами и не забывай про обучение. Удачи в защите твоей сетевой инфраструктуры!