Snort – это не только IDS (система обнаружения вторжений), но ещё и IPS (система их предотвращения) и соответственно борьбы с DDoS атаками. Интересной особенностью продукта является его опенсурсность, а также наличие бесплатных обновлений (платные появляется своевременно, а бесплатные с задержкой в 30 дней) наборов правил. Таким образом, мы получаем систему, которая анализирует с помощью многочисленных правил, шаблонов, триггеров и прочих интересных вещей, пакеты, протоколы и прочее, а также позволяет самому много всего интересного дописать если вы знаете что такое ISO/OSI :)
Поскольку на продакшн машинах у меня стоит дебиан ленни, то тестировалось всё именного под него. Проверял два варианта установки – из пакетов, а также собирал сам. При установке из пакетов всё равно нужно шаманить, но в целом процесс прошёл довольно быстро, просто и всё запустилось, но не в inline режиме (в инлайнт-режиме он не только сниффит пакеты, но может их блокировать или передавать соответствующие инструкции файрволу), а также в такой старой версии, что никакие сигнатуры обновить конечно же не получилось :) Но веб-морда (acidbase) встала как родная.
1. Установка из пакетов
Создаём в mysql пользователя и базу snort
aptitude snort-mysql acidbase zcat create_mysql.gz | mysql -u snort -D snort -pSNORT_BD_PASSWORD rm /etc/snort/db-pending-config dpkg --configure --pending dpkg-reconfigure snort-mysql |
Ну а дальше приступаем к конфигурации в файле /etc/snort/snort.conf – в принципе там всё понятно и ясно, а что не ясно – доступно в мануалах. Тестируем конфигурацию:
snort -c /etc/snort/snort.conf -T |
Затем для полного счастья конфигурируется Oinkmaster, который позволяет обновлять правила автоматически (регистрируетесь на snort.org, заходите в профиль и получаете код).
2. Установка из сырцов
Поскольку snort версии 2.7 при стабильной 2.9 меня не совсем устраивает, была предпринята установки всего этого хозяйства из сырцов. В последний раз я так мучался с компилляцией rtorrent на Debian Etch :)
Собственно я комментировать буду по-минимуму и приведу лишь листинги. Думаю, кто понимает, тот поймёт, а кто не понимает – тому snort и не нужен. Ниже приведён листинг установки снорта на дебиан линни с ошибками и способом их решения. В будущем планирую повторить на Debian Squeeze – думаю там количество замарочек будет в разы меньше. Итак, для начала:
aptitude install libpcap0.8-dev libnet1-dev libpcre3-dev libdnet-dev flex bison |
Зразу приведу список ОШИБОК, которые могут вылезти во время конфигурации, а также способы их решения.
Нет библиотеки daq_static
checking for daq_load_modules in -ldaq_static... no ERROR! daq_static library not found, go get it from http://www.snort.org/. wget http://www.snort.org/downloads/745 mv 745 daq-0.5.tar.gz tar xzf daq-0.5.tar.gz |
Отсутствует flex и bison
checking for flex... no checking for bison... no checking for capable lex... insufficient configure: error: Your operating system\'s lex is insufficient to compile libsfbpf. flex is a lex replacement that has many advantages, including being able to compile libsfbpf. For more information, see http://www.gnu.org/software/flex/flex.html . aptitude install flex bison |
Проблема с несовместимостью lippcap, которая установлена в системе с той, что необходима для сборки.
checking for libpcap version >= "1.0.0"... no ERROR! Libpcap library version >= 1.0.0 not found. Get it from http://www.tcpdump.org aptitude remove libpcap wget http://www.tcpdump.org/release/libpcap-1.1.1.tar.gz tar xzf libpcap-1.1.1.tar.gz ./configure make make install aptitude install libpcap |
Отсутствуют заголовки mysql.h
ERROR: unable to find mysql headers (mysql.h) checked in the following places /usr /usr/include /usr/include/mysql /usr/mysql /usr/mysql/include /usr/local /usr/local/include /usr/local/include/mysql /usr/local/mysql /usr/local/mysql/include aptitude install libmysqlclient-dev iftop tcpdump |
Теперь вроде как всё и предварительные приготовления завершены. После этого у меня получилось выполнить:
./configure --with-mysql --with-dnet-libraries=/путь_к_libdnet/src/.libs/ --with-dnet-includes=/путь_к_libdnet/include make checkinstall ********************************************************************** Done. The new package has been installed and saved to /.../snort-2.9.0.4/snort_2.9.0.4-1_amd64.deb You can remove it from your system anytime using: dpkg -r snort ********************************************************************** |
Далее редактируем snort.conf в том числе и на предмет взаимодействия с mysql:
output database: log, mysql, user=snort password=snortpwd dbname=snort host=localhost |
Собственно запускаться снорт всё равно отказался, т.к. начал утвержать что для него в этой системе отсутствует библиотека libdnet.1
ldd /usr/local/bin/snort libdnet.1 => not found libmysqlclient.so.15 => /usr/lib/libmysqlclient.so.15 (0x00002b6db4f32000) libz.so.1 => /usr/lib/libz.so.1 (0x00002b6db533e000) libpcre.so.3 => /usr/lib/libpcre.so.3 (0x00002b6db5555000) libnsl.so.1 => /lib/libnsl.so.1 (0x00002b6db577d000) libm.so.6 => /lib/libm.so.6 (0x00002b6db5996000) libdl.so.2 => /lib/libdl.so.2 (0x00002b6db5c18000) libpcap.so.0.8 => /usr/lib/libpcap.so.0.8 (0x00002b6db5e1c000) libsfbpf.so.0 => /usr/local/lib/libsfbpf.so.0 (0x00002b6db604a000) libc.so.6 => /lib/libc.so.6 (0x00002b6db626f000) libpcap.so.1 => /usr/local/lib/libpcap.so.1 (0x00002b6db65d0000) libpthread.so.0 => /lib/libpthread.so.0 (0x00002b6db6809000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x00002b6db6a25000) /lib64/ld-linux-x86-64.so.2 (0x00002b6db4d12000) find /usr -name "libdnet*" -print |
Но если всё равно получаем:
checking for eth_set in -ldnet... no ERROR! dnet library not found, go get it from http://code.google.com/p/libdnet/ or use the --with-dnet-* options, if you have it installed in an unusual place |
то качаем отсюда исходники и собираем, а затем делаем ссылку, если после make install не легло куда надо:
http://code.google.com/p/libdnet ./configure make ln -s /usr/local/lib/libdnet.1.0.1 /usr/lib/libdnet.1 |
Запускаемся:
/usr/local/bin/snort -c /etc/snort/snort.conf -i venet0:0 |
Если не получилось и снорт ругается на непонятные слова в конфиге – такие как ipvar, то учтите что все эти слова надо поменять просто на var, т.к. ipvar можно использовать ТОЛЬКО, если вы скомпилировали снорт с поддержкой ipv6 (–enable-ipv6).
Если не находит динамических правил для препроцессоров, то создаём символическую ссылку куда надо:
Could not stat dynamic module path "/usr/local/lib/snort_dynamicrules": No such file or directory. ln -s /etc/snort/so_rules/precompiled/Debian-5-0/x86-64/2.9.0.0 /usr/local/lib/snort_dynamicrules |
Если ругается на compress_depth, decompress_depth, enable_gzip и прочие прелести – отключаем в конфиге и их:
ERROR: /etc/snort/snort.conf(214) => Invalid keyword 'compress_depth' for 'global' configuration. |
Также может вылезти ошибка про шаблоны групп портов. Вылечилось изменением search-method ac-split на ac-q.
ERROR: fpcreate.c(1555) Failed to compile port group patterns. |
Если у вас на машине 256 Mb RAM, то запустить снорт не получится пока не измените search-method на lowmem
В конце концов имеем при запуске замечательные строки:
[ Port Based Pattern Matching Memory ] [ LowMem Search-Method Memory Used : 55.1556 MBytes ] [ Number of patterns truncated to 20 bytes: 19145 ] pcap DAQ configured to passive. Acquiring network traffic from "venet0:0". Segmentation fault (core dumped) |
Которые уже следует бороть с помощью дебаггера типа gdb, но я устал и я ухожу ставить windows и wise installer. Если у вас получилось – черканите.
на SLES 10-11 при установке из rpm с http://software.opensuse.org
1. FATAL ERROR: ../../src/parser.c(5165) Could not stat dynamic module path “/usr/local/lib/snort_dynamicpreprocessor/”: No such file or directory.
сделать dynamicpreprocessor directory /usr/lib/snort/snort_dynamicpreprocessor/
2. FATAL ERROR: ../../src/parser.c(5165) Could not stat dynamic module path “/usr/local/lib/snort_dynamicengine/libsf_engine.so”: No such file or directory.
сделать dynamicengine /usr/lib/snort/snort_dynamicengine/libsf_engine.so
3. ln -s /etc/snort/so_rules/precompiled/OpenSUSE-11-3/i386/2.8.6.1 /usr/local/lib/snort_dynamicrules
4. FATAL ERROR: Unable to open rules file “/etc/snort/../rules/local.rules”: No such file or directory
var RULE_PATH /etc/snort/rules
закомментируйте всё, что касается dynamicpreprocessor в конфиге