2006/11/13

Smoothwall Express 2.0 + Snort (with MySQL)

Чтобы включить систему обнаружения атак (IDS) Snort в Smoothwall достаточно установить соответствующую галочку в web-интерфейсе, но такой путь не предоставит всех возможностей для работы с IDS Snort. Данное описание охватывает обновление версии Snort, добавление возможности вести события (alerts) в базе (mysql) и установку инструментария для работы с накопленной базой событий.

Поэтому первым дело необходимо установить обновленную версию Snort для Smoothwall Express 2.0. Последнюю версию данного расширения можно взять тут.

1. Поместить скаченное расширение на Smoothwall Express можно с помощью scp:

scp user@hostname:~/Snort-Update-2.x.x-MySQL.tgz /tmp

2. Разархивируем содержимое архива и все станет на свои места

tar zxvf ./Snort-Update-2.x.x-MySQL.tgz -C /

3. Переписать файл файл /usr/local/bin/snort новым файлом snort-mysql

cp /usr/local/bin/snort-mysql /usr/local/bin/snort
cp: overwrite `/usr/local/bin/snort'? y

4. Подготовить базу данных Snort, для этого в дистрибутиве Snort в директории schemas имеются скрипты для различных СУБД - для MySQL - create_mysql. Необходимо создать 2 базы данных - snort_db и snort_archive_db - первая непосредственно для отслеживания событий, вторая для архивирования старых событий (понадобится для работы с BASE).

5. Отредактировать /etc/snort.conf

Закомментировать
# include /etc/snort/vars
Задать переменные
var HOME_NET [192.168.1.0/24,212.122.83.100]
var EXTERNAL_NET !$HOME_NET
В препроцессор sfportscan можно добавить список хостов для игнорирования событий о сканировании портов сканерами домашней сети (HOME_NET)
ignore_scanners { 192.168.1.0/24 }
Добавить output-описания:
output alert_full: alert # Snort будет продолжать писать в /var/log/snort/alert
output database: log, mysql, user=user password=pass dbname=snort_db host=192.168.1.1 # и в БД

6. Проверить работоспособность новой версии Snort можно, запустив комманду:

/usr/local/bin/snort -c /etc/snort.conf -D -u snort -g snort -d -e -z -i eth1

Если все в порядке в списке процессов (ps ax) одним из последних будет Snort.

Скрипт /usr/local/bin/restartsnort не подходит для использования, поэтому его необходимо заменить на рабочий вариант.
# cat > /usr/local/bin/stopsnort
#!/bin/bash
kill -9 `cat /var/run/snort*.pid`
[Ctrl + C]
# cat > /usr/local/bin/startsnort
#!/bin/bash
/usr/local/bin/snort -c /etc/snort.conf -D -u snort -g snort -d -e -z -i eth1
[Ctrl + C]
# cat > /usr/local/bin/restartsnort
#!/bin/bash
/usr/local/bin/stopsnort; sleep 3; /usr/local/bin/startsnort
[Ctrl + C]
# chmod 755 /usr/local/bin/stopsnort
# chmod 755 /usr/local/bin/startsnort
# chmod 755 /usr/local/bin/restartsnort

Если в конфигурационном файле snort.conf включен препроцессор perfmonitor, то необходимо добавить в ротацию журналов файл /var/log/snort/snort.stats - он достаточно быстро растет. Препроцессор rpc_decode можно выключить (закомментировать), если не используются RPC-службы.

Для удобной работы с накопленной базой событий существует система BASE (Basic Analysis and Security Engine). Это "реинкарнация" старой ACID-системы, которая в данный момент больше не развивается. BASE активно разрабатывается и всегда доступен на SourceForge. Для работы с BASE нужно иметь несколько дополнительных средств:

  • ADODB
  • GD
  • PEAR
  • Image_Graph
Если есть pear, ставится элементарно:
pear install Image_Color
pear install Image_Canvas-alpha
pear install Image_Graph-alpha

Если с pear сложности, достаточно скачать все эти пакеты с http://pear.php.net/, распаковать в одну директрию, например Image и эту директорию положить в такое место, куда по умолчанию заглядывает php.

Установка BASE проста

# tar -xvzf base-x.x.x.tar.gz
# cd base-x.x.x
# cp base_conf.php.dist base_conf.php

Редактируем base_conf.php:

$BASE_urlpath = “/base”;
$DBlib_path = "Путь до adodb";
$DBtype = "mysql";
$alert_dbname = "snort_db";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "snort";
$alert_password = "new_password";
$archive_dbname = "snort_archive_db";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "snort";
$archive_password = "new_password ";

Аналогична установка для /base_archive:

$BASE_urlpath = “/base_archive”;
$DBlib_path = "Путь до adodb";
$DBtype = "mysql";
$alert_dbname = "snort_archive_db";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "snort";
$alert_password = "new_password";
$archive_dbname = "snort_archive_db";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "snort";
$archive_password = "new_password ";

Теперь Base доступен по адресу http://hostname/base (архив http://hostname/base_archive).

Ссылки:
  1. Snort 2.x.x (Plain, MySQL, PostgreSQL, ODBC, All)
  2. Snort, Apache, PHP, MySQL, and BASE on SuSe Setup Guide
  3. Detection of the Telecommunication Attacks: Theory and Practice, Snort
  4. The Three Snort Pigs. Snort Sensor Tuning Using SnortCenter
  5. More Suitable, Faster, Better: Snort + MySQL

No comments: