Установка и настройка Snort на Debian Lenny

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. Если у вас получилось – черканите.

2 thoughts on “Установка и настройка Snort на Debian Lenny

  1. maroon

    на 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

    Reply
    1. anonymous Post author

      закомментируйте всё, что касается dynamicpreprocessor в конфиге

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *