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 65535max_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.

Cattura icmp

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"

entry snort

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

acidbase1

b)inserire la password

acidbase2

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:

base1 base2 base3 base4 base5

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