Installare Snort da sorgenti su Debian 6.0
Oggi voglio installare e configurare snort direttamente dai sorgenti.Ebbene si,mi sono stufato di installare questo magnifico ids dai repositori che hanno versioni obsolete e “bugate”.Praticamente oltre a snort andremo ad installare anche un server Mysql e un Server Apache.Come distribuzione mi sono basato su Debian 6.
1) Iniziamo con installare sia le dipendenze che i servizi necessari:
apt-get install apache2 apache2-doc autoconf automake bison ca-certificates ethtool flex g++ gcc gcc-4.4 libapache2-mod-php5 libcrypt-ssleay-perl libmysqlclient-dev libnet1 libnet1-dev libpcre3 libpcre3-dev libphp-adodb libssl-dev libtool libwww-perl make mysql-client mysql-common mysql-server ntp php5-cli php5-gd php5-mysql php-pear sysstat usbmount vim nano
Compiliamo alcune dipendenze necessarie per un buon funzionameno di snort:
installare libpcap:
cd /usr/local/src && wget http://www.tcpdump.org/release/libpcap-1.3.0.tar.gz tar -zxf libpcap-1.3.0.tar.gz && cd libpcap-1.3.0 ./configure --prefix=/usr/local/ && make && make install
installare libdnet:
cd /usr/local/src && wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz tar -zxf libdnet-1.12.tgz && cd libdnet-1.12 ./configure --prefix=/usr/local --enable-shared && make && make install
installare daq:
cd /usr/local/src && wget http://www.snort.org/dl/snort-current/daq-2.0.0.tar.gz tar -zxf daq-2.0.0.tar.gz && cd daq-2.0.0 ./configure --prefix=/usr/local && make && make install
se dovesse comparire il seguente errore
ERROR! Libpcap library version >= 1.0.0 not found.
Get it from http://www.tcpdump.org
eseguite il comando
ldconfig -v
e ricompilate
Aggiorna il path delle librerie.
echo >> /etc/ld.so.conf /usr/lib echo >> /etc/ld.so.conf /usr/local/lib && ldconfig
2) Installare, configurare e testare Snort:
cd /usr/local/src && wget http://labs.snort.org/snort/2940/snort.conf -O snort.conf wget http://www.snort.org/dl/snort-current/snort-2.9.4.tar.gz -O snort-2.9.4.tar.gz tar -zxf snort-2.9.4.tar.gz && cd snort-2.9.4 ./configure --prefix=/usr/local --enable-sourcefire && make && make install mkdir /etc/snort /etc/snort/rules /var/log/snort /var/log/barnyard2 /usr/local/lib/snort_dynamicrules touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules groupadd snort && useradd -g snort snort chown snort:snort /var/log/snort /var/log/barnyard2 cp /usr/local/src/snort-2.9.4/etc/*.conf* /etc/snort cp /usr/local/src/snort-2.9.4/etc/*.map /etc/snort cp /usr/local/src/snort.conf /etc/snort nano/etc/snort/snort.conf
Cambia queste linee nel file di configurazione snort.conf:
Line #45 – ipvar HOME_NET 192.168.1.0/24 – Rete interna
Line #48 – ipvar EXTERNAL_NET !$HOME_NET
Line #104 – var RULE_PATH ./rules
Line #113 – var WHITE_LIST_PATH ./rules
Line #114 – var BLACK_LIST_PATH ./rules
Line #297 – aggiungere questo alla fine della linea “decompress_depth 65535” max_gzip_mem 104857600
Line #521 – aggiungere questa linea – output unified2: filename snort.log, limit 128
Line #553 – cancellare o commentare tulle le regole che iniziano “include $RULE_PATH” ad eccezione di “local.rules”
nano /etc/snort/rules/local.rules
Inserire una semplice regola :
alert icmp any any -> any any (msg:"ICMP test"; sid:10000001; rev:1;)
Ora si inizia a giocare 😛 eseguiamo questo comando:
/usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0
Se compare questo errore
snort: error while loading shared libraries: libdnet.1: cannot open shared object file: No such file or directory
digitate sul terminale e successivamente in /etc/bash.bashrc
LD_LIBRARY_PATH=/usr/local/lib export LD_LIBRARY_PATH
da un altro host pingare il server Debian.
3) Installare e configurare Barnyard2
cd /usr/local/src && wget https://github.com/firnsy/barnyard2/archive/master.tar.gz tar -zxf master.tar.gz && cd barnyard2-* autoreconf -fvi -I ./m4 && ./configure --prefix=/usr/local --with-mysql && make && make install mv /usr/local/src/barnyard2-master/etc/barnyard2.conf /etc/snort cp schemas/create_mysql /etc/snort/ nano /etc/snort/barnyard2.conf
Line #220 cambiare in output alert_fast
commentate la linea 30 (manca per il momento il file sid-msg.map)
Alla fine del file aggiungere:
output database: log, mysql, user=snort password=<mypassword> dbname=snort host=localhost
4) Configurazione server Mysql.
mysql -u root -p #Inserire la password inserita all'installazione. mysql> create database snort; mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost; mysql> SET PASSWORD FOR snort@localhost=PASSWORD('mypassword'); mysql> use snort; mysql> source /etc/snort/create_mysql mysql> show tables; #vedere le tabelle importate mysql> exit
Fate partire snort e barnyard2 con questi due comandi:
/usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 & /usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /etc/snort/bylog.waldo &
Eseguite nuovamente un ping da un’altra macchina e vedrete nel database la nuova entri
mysql -uroot -p -D snort -e "select count(*) from event"
5) Configurare Apache e installare acidbase (frontend per snort).
apt-get install acidbase
Qui è utilizzeremo i pacchetti contenenti sul repositori visto che la vesione del software di acidbase non è più stata aggiornata da un pò di tempo e quindi durante l’installazione seguire la procedura guidata (consigliato):
a)selezionale mysql
b)inserire la password
oppure andremo a modificare il file database.conf in /etc/acidbase/:
$alert_user='snort'; $alert_password='mypassword'; $basepath=''; $alert_dbname='snort'; $alert_host='localhost'; $alert_port='3306'; $DBtype='mysql';
modificare il file /etc/acidbase/apache.conf e modificate questa variabile in modo tale da rendere visibile acidbase a tutta la rete home:
allow from 192.168.1.0/24
Andare sul proprio browser e digitare http://<ip server snort>/acidbase e seguire la procedura guidata:
6) Creazione di uno script per snort e barnyard e lo chiamiamo snortbarn.
nano /etc/init.d/snortbarn
Copiare nel seguente script:
#! /bin/sh # ### BEGIN INIT INFO # Provides: snortbarn # Required-Start: $remote_fs $syslog mysql # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Interactive: true # Short-Description: Start Snort and Barnyard ### END INIT INFO . /lib/init/vars.sh . /lib/lsb/init-functions mysqld_get_param() { /usr/sbin/mysqld --print-defaults | tr " " "\n" | grep -- "--$1" | tail -n 1 | cut -d= -f2 } do_start() { log_daemon_msg "Starting Snort and Barnyard" "" # Make sure mysql has finished starting ps_alive=0 while [ $ps_alive -lt 1 ]; do pidfile=`mysqld_get_param pid-file` if [ -f "$pidfile" ] && ps `cat $pidfile` >/dev/null 2>&1; then ps_alive=1; fi sleep 1 done /sbin/ifconfig eth1 up /usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 & /usr/local/bin/barnyard2 -q -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /etc/snort/bylog.waldo 2> /dev/null & log_end_msg 0 return 0 } do_stop() { log_daemon_msg "Stopping Snort and Barnyard" "" kill $(pidof snort) 2> /dev/null kill $(pidof barnyard2) 2> /dev/null log_end_msg 0 return 0 } case "$1" in start) do_start ;; stop) do_stop ;; restart) do_stop do_start ;; *) echo "Usage: snort-barn {start|stop|restart}" >&2 exit 3 ;; esac exit 0
Rendere lo script eseguibile e creare un boot di partenza
chmod +x /etc/init.d/snortbarn insserv -f -v snortbarn
7)Inserire nuove regole con pulledpork.
Come al solito scaricare e compilare il software.
cd /usr/src && wget http://pulledpork.googlecode.com/files/pulledpork-0.6.1.tar.gz tar -zxf pulledpork-0.6.1.tar.gz && cd pulledpork-0.6.1 cp pulledpork.pl /usr/local/bin && cp etc/*.conf /etc/snort vi /etc/snort/pulledpork.conf
commentare le linee 22 e 26.
Andare sul sito di snort registrarsi e recuperare il proprio “oinkcode” pre scaricare le nuove “rules”
Per il set di regole per Emerging Threats Open non hai bisogno di nulla.
Line # 20: inserici il tuo codice o commenta se non vuoi utlizzare questo tipo di regole
Line # 23: de-commenta Emerging Threats rule set (io l’ho commentato per il momento)
Line # 71: cambia in: rule_path=/etc/snort/rules/snort.rules
Line # 86: cambia in: local_rules =/etc/snort/rules/local.rules
Line # 89: cambia in: sid_msg=/etc/snort/sid-msg.map
Line # 112: cambia in: config_path=/etc/snort/snort.conf
Line # 122: cambia in: distro=Debian
Line # 169: de-commenta e cambia in: enablesid=/etc/snort/enablesid.conf
Line # 171: de-commenta e cambia in: disablesid=/etc/snort/disablesid.conf
Line # 172: de-commenta e cambia in: modifysid=/etc/snort/modifysid.conf
echo pcre:fwsam >> /etc/snort/disablesid.conf # disables all block (fwsam) rules
Fai partire pulledpork
/usr/local/bin/pulledpork.pl -c /etc/snort/pulledpork.conf -T -l
Sul file di snort.conf devono essere visibili solo due include local.rules e snort.rules.
Line 546: aggiungere: include $RULE_PATH/snort.rules
Pulisci tutto con:
pkill snort && pkill barnyard2 rm -rf /var/log/snort/* /var/log/barnyard2/*
de-commentate la linea 30 sul file /etc/snort/barnyard2.conf
Configura una port span sullo switch o lascia la configurazione di monitoraggio sull’interfaccia eth0 e rifai partire snortbarn.
/etc/init.d/snortbarn restart
FINE