RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Snort является системой предотвращения вторжений, способной работать в двух режимах “Sniffer Mode” и “Packet Logger Mode”.
Snort может быть использован для выявления различных атак, как,
например, переполнение буфера, скрытое сканирование портов, CGI
attacks, SMB probes, OS fingerprinting attempts, и многое другое. В
общем, сугубо полезная штука и распространяется по GNU GPL. Что понадобиться:
• MySQL
• Libnet
• Libpcap
• BASE
• Apache
• Php5
• php5-extensions
• snort-2.8.4.1
• FreeBSD 7.0
• oinkmaster-2.0_1
Установка MySQL:
Первым ставим MySQL, дабы в нем хранить логи. И создадим в ней базу и пользователя “snort”
mysql> create database snort; mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort; mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort@localhost; mysql> use mysql; mysql> set password for 'snort'@'localhost'=password('123'); mysql> set password for 'snort'@'%'=password('123'); mysql> flush privileges; mysql> exit
Установка SNORT:
После ставим сам snort. Естественно порты должны быть в актуальном состоянии.
#cd /usr/ports/security/snort/ && make install clean
ыбираем поддержку MySQL ([X] MYSQL Enable MySQL support)
Если в системе хватает всех библиотек, встать должно без проблем. Иначе качаем и ставим те библиотеки, которые попросит.
Правила Snort
Правила можно написать самому, иногда это действительно требуется, либо
же взять у snort.org. Как получить эти правила? Тут у нас есть три пути:
1.Зарегиться на сайте (https://www.snort.org/signup). Получать обновления каждые 30 дней.
2.Подписать на рассылку, обновления будут приходить в реальном времени, как только они становятся доступными.
3.Незарегистрированные пользователи получают статичные правила во время каждого крупного Snort-релиза
Как добывать, дело ваше, вообще не дорого подписаться, для одной машины
30 баков всего. Но зная русскую натуру и реалии жизни, думаю, первый
вариант всех устроит :).
После регистрации:
Успокоившись, что почти 90!!! метров (после распаковки 500 mb) скачались без ошибки. В архиве находятся
doc
etc
rules
so_rules
распаковываем и кладем в папку /usr/local/etc/snort/
Добыча правил посредством oinkmaster(update Snort signatures)
Ставим из портов, благо есть. Убрал поддержку ipv6 до 12 года еще далеко, а там может еще обновлюсь
#cd /usr/ports/security/oinkmaster/ && make install clean
идим
большой конфиг, но не пугаемся это в основном коменты :). Скажу сразу
свой <oinkcode> смотрим на сайте snort’a в разделе My
Account->Subscriptions and Oinkcodes->Oinkcodes
Мой конфиг:
# $Id: oinkmaster.conf,v 1.132 2006/02/02 12:05:08 andreas_o Exp $ # # url = http://www.snort.org/pub-bin/oinkmaster.cgi/<oinkcode>/snortrules-snapshot-2.8.tar.gz # Assume UNIX style by default: path = /bin:/usr/bin:/usr/local/bin # Temporary directory to use. # Поменял на свою, ибо по умолчанию кладет /tmp tmpdir = /home/oinkmaster/tmp/ # update_files = \.rules$|\.config$|\.conf$|\.txt$|\.map$ ####################################################################### # Files to totally skip (i.e. never update or check for changes) # # # # Syntax: skipfile filename # # or: skipfile filename1, filename2, filename3, ... # ####################################################################### skipfile local.rules skipfile deleted.rules skipfile snort.conf
Забегая
вперед, скажу что потребуется makesidex.pl который почему то с портами
не встал или я не нашел куда он делся, нужен для создания карты
сигнатур с измененными настройками.
Поэтому пришлось качать с сайта
oinkmaster -o snort/rules -C oinkmaster.conf -C autodisable.conf
Loading /usr/local/etc/oinkmaster.conf
Loading /usr/local/etc/autodisable.conf
Downloading file from http://www.snort.org/pub-bin/oinkmaster.cgi/*oinkcode*/snortrules-snapshot-2.8.tar.gz... done.
Archive successfully downloaded, unpacking... done.
Setting up rules structures... done.
Processing downloaded rules... disabled 1, enabled 0, modified 0, total=8179
Setting up rules structures... done.
Comparing new files to the old ones... done.
и результат обновления :)
Теперь переходим к конфигурированию
#vim /usr/local/etc/snort/snort.conf # В нем синем по черному (включен синтаксис vim’a) написано, что конфигурирование # надо проводить в 6! этапов: # 1) Установка переменных для вашей сети # 2) Настройка динамически загруженных библиотек (оставим по умолчанию, # ибо это пути к библиотекам) # 3) Настройка препроцессоров (так же оставим их) # 4) Конфигурирование параметров вывода (натравим на mysql) # 5) Add any runtime config directives (не знаю как правильно перевести, # интуитивно понятно) # 6) Подгонка правил
ачнем:
Куски конфига, т.е. те в которых были изменения.
Шаг первый, самый важный:
# Step #1: Set the network variables: # $HOME_NET определяет IP-адреса, считаемые адресами нашей домашней сети var HOME_NET [172.16.0.0/16] # # Можно использовать any (любой адрес). Для уменьшения нагрузки на snort, # многие присваивают значение not HOME_NET var EXTERNAL_NET !$HOME_NET # # Ну тут список ваших серверов, которые и будет защищать хрюндель. # следует убрать лишнее либо задать более конкретно # # List of DNS servers on your network var DNS_SERVERS $HOME_NET # List of SMTP servers on your network var SMTP_SERVERS $HOME_NET # List of web servers on your network var HTTP_SERVERS $HOME_NET # List of sql servers on your network var SQL_SERVERS $HOME_NET # List of telnet servers on your network var TELNET_SERVERS $HOME_NET # SNMP в помине не было #var SNMP_SERVERS $HOME_NET # # Ports you run web servers on и так и понятно можно вписывать как [80,8080] portvar HTTP_PORTS 80 # # Ports you want to look for SHELLCODE on. portvar SHELLCODE_PORTS !80 # # Ports you might see oracle attacks on #portvar ORACLE_PORTS 1521 # # Другие переменные # например AOL'вские сервера # AIM servers. var AIM_SERVERS [64.12.24.0/23,64.12.28.0/23,64.12.161.0/24,64.12.163.0/24,/ 64.12.200.0/24,205.188.3.0/24,205.188.5.0/24,205.188.7.0/24,205.188.9.0/24,/ 205.188.153.0/24,205.188.179.0/24,205.188.248.0/24] # # Путь до файла с правилами var RULE_PATH /usr/local/etc/snort/rules var PREPROC_RULE_PATH /usr/local/etc/snort/preproc_rules
Сразу к 4му шагу настройка выводов
# database: log to a variety of databases # --------------------------------------- # See the README.database file for more information about configuring # and using this plugin. # output database: log, mysql, user=snort password=123 dbname=snort host=localhost
5й пропускаем, а на последнем, 6ом шаге, выбираем сигнатуры которые будем использовать.
После выбора нужных, можно сказать что первоначальное конфигурирование завершено.
Далее, таблицы для snort ручками делать бессмысленно, делаем так:
mysql -p < /usr/local/share/examples/snort/create_mysql snort
вместо le0 можно указать любой другой прослушиваемый интерфейс), использованные опции означают:
-o - сменить порядок применения правил с Alert -» Pass -» Log order на Pass -»Alert -» Log order, это ускоряет несколько работу.
-i le0 - слушать указанный интерфейс. Можно опустить, если интерфейс один в системе (интерфейс vmwar так называется).
-d - выводить содержимое уровня приложения в пакетах, если стоит режим
избыточности вывода или ведения учёта пакетов (дополнительная
информация нам не помешает).
-с /etc/snort/snort.conf - использовать указанный конфигурационный файл.
При первом запуске выдал ошибку на dos.rules, типа не знает переменной
ORACLE_PORTS, оракла у мну нет, смело комментирую в правилах эту
строчку и все что связанно с oracle. Вот тут то нам и понадобиться
makesidex.pl, что бы при обновлении коменты не слетали.
После этого успешно стартануло :). Ставим запуск при загрузке:
#echo 'snort_enable="YES"' >> /etc/rc.conf
нализ логов посредством BASE
#cd /usr/ports/security/base&&make install clean
естественно поддержку мускула
[X] MYSQL Enable MySQL support
Выдал каку
Fatal error: Call to undefined function preg_match() in /usr/local/share/pear/PEAR/Frontend/CLI.php on line 57
лечиться
The fix: edit the pecl script (usually /usr/local/bin/pecl) and remove the ‘-n’ from the command line arguments.
По нашенски, надо убрать ключ “-n” из /usr/local/bin/pecl из строки в строке запуска (exec $PHP…)
Добавляем алиас в конфик апача
Alias /base “/usr/local/www/base” <Directory /usr/local/www/base> AllowOverride Options FileInfo Allow from all </Directory>
Ставим разрешения на изменения конфигурационных файлов в директории BASE (по умолчанию /usr/local/www/base)
Перезапускаем апач и конфигурим BASE
Заходим через любимый браузер на http://your_server/base и видим
Далее
Последний слеш не ставим
Далее вводим данные mysql
Далее вводим данные аутентификации, можно использовать системную учетку но лучше свою
Создание таблиц
Красный пугает, могли бы и эргономичней поступить(зеленым например)
Ну вот и все
Дальше будет куча проблем с ложными срабатываниями, но это уже другая тема
SnortSAM и IPFW
SnortSam - это плагин, может работать с многими фаерами (даже с isa), но нас интересует ipfw и это ipfw2
(поддержка таблиц), для ранних версий bsd придется пересобрать ядро.
#cd /usr/ports/security/snortsam/ #make install clean [X] IPFW Enable IPFW table checking if it set deny rules #cd /usr/local/etc/snortsam/ #cp snortsam.conf.sample snortsam.conf
то менял в конфиге, вообще очень гибкий инструмент, можно показать явно что ни когда не блочить, например
корневые днс и т.д и подгружать это из файла (include) или указать в самом конфиге.
# # pass defaultkey 123 # в примере порт 666, но мы не суеверные :) port 777 # accept 127.0.0.1, 123 # На сколько блочить keyinterval 10 minutes # В /var/log/ нужно содать такой файло logfile snortsam.log # Три уровня видения логов # 0: Quiet - No logging occurs. # 1: Sparse - Only errors are logged. # 2: Normal - Errors and blocks are logged. # 3: Verbose - Additional information (such as connections/disconnections) # are logged as well. loglevel 2 # Таблицы в которые будем заносить "врагов народа" ipfw2 le0 12 # # With tables rules like: # 00010 deny ip from any to table 1 via le0 # 00011 deny ip from table 2 to any via le0 # Путь к фаеру fwexec /sbin/ipfw # те самые днс include /usr/local/etc/snortsam/rootservers.cfg
Добавляем в ipfw правила
${FwCMD} add deny log ip from any to "table(1)" via le0 ${FwCMD} add deny log ip from "table(2)" to any via le0