Primeramente tendremos que instalar mysql y php desde aquí.
Podéis descargar la última versión desde sección de descargas de la web de snort (clic aquí).
En mi ejemplo, descargaré la última versión a dia de hoy, la 2.8.5.1
Instalando Snort: Nos situaremos en el directorio donde hemos descargado Snort y:
tar xvzf snort-2.8.5.1.tar.gz
cd snort-2.8.5.1.tar.gz
Instalamos dependencias que nos haran falta para compilar snort:
# aptitude install php5-gd php5-ldap php5-dev php5-mysql php-pear libnet1 libnet1-dev libpcap0.8 libpcap-dev libpcap0.8-dev libpcre3 expect gobjc libpcre3-dev flex libnet0 libnet0-dev bison libmysql++-dev libapache2-mod-php5 php5-cgi -y
configuramos, compilamos e instalamos:
./configure --with-mysql --enable-flexresp --enable-sourcefire --enable-targetbased
make
# make install
crearemos los directorios para Snort:
# mkdir -p /etc/snort
# mkdir -p /var/log/snort
# mkdir -p /etc/snort/rules
copiaremos ficheros necesarios:
# cp -r preproc_rules/ /etc/snort/
# cp etc/*.conf* /etc/snort/
# cp etc/*.map /etc/snort/
Ahora ya tenemos Snort instalado, ahora necesitaremos descargar las reglas, para ello, descargaremos oinkmaster desde su web (clic aqui).
La versión a dia de hoy es la 2.0. la descargaré y me situare en el directorio de descarga y :
tar xvzf oinkmaster-2.0.tar.gz
cd oinkmaster-2.0
Ahora deberemos registrarnos a la página de Snort, nos enviaran un correo para confirmar el registro; cuando esté confirmado entraremos a nuestra área privada (sign in), > my account > subscriptions and oinkcodes > oinkcodes : veremos algo así:
Oinkcodes
xxxx92xxxxx .....
Copiaremos esa cadena de números y letras y lo incluiremos a la configuración del oinkmaster:
nano oinkmaster.conf
Buscaremos esta línea:
# url = http://www.snort.org/pub-bin/oinkmaster.cgi/
Eliminaremos la almohadilla del principio, cambiaremos <oinkcode> por nuestro código y también la versión del fichero por la versión de nuestro Snort; en mi ejemplo, la 2.8. Quedará así:
url = http://www.snort.org/pub-bin/oinkmaster.cgi/aquí tu código/snortrules-snapshot-2.8.tar.gz
Guardaremos el fichero con Control+o y saldremos del editor con Control+x
Ahora ejecutaremos oinkmaster para que nos descargue las reglas:
perl oinkmaster.pl -C oinkmaster.conf -o ./
Esperaremos un rato a que se descarguen y se descompriman.
Ahora moveremos las reglas (*.rules) que se nos an descomprimido en el actual directorio a snort:
# mv *.rules /etc/snort/rules/
creamos enlace simbólico:
# ln -s /usr/local/bin/snort /usr/sbin/snort
Crearemos un grupo y usuario específicos para manejar snort:
# groupadd snort
# useradd -g snort snort
Cambiamos grupo y dueño del directorio de logs de snort para que pueda ser utilizado por dicho dueño y grupo:
# chown snort:snort /var/log/snort/
# touch /var/log/snort/alert
# chown snort:snort /var/log/snort/alert
# chmod 600 /var/log/snort/alert
# touch /etc/snort/rules/local.rules
Configuraremos snort:
# nano /etc/snort/snort.conf
Buscaremos la línea : var RULE_PATH ../rules y la cambiaremos por:
var RULE_PATH /etc/snort/rules
también modificaremos la línea: var PREPROC_RULE_PATH ../preproc_rules y la cambiaremos por:
var PREPROC_RULE_PATH /etc/snort/preproc_rules
Buscaremos: # output database: log, mysql, user=root password=test dbname=db host=localhost y eliminaremos la almohadilla del principio y también haremos las siguientes modificaciones:
output database: log, mysql, user=snort password=un_password dbname=dbsnort host=localhost
Nota: cambiaremos un_password por una contraseña que queramos, la utilizaremos más adelante, no te la olvides ;-)
Ahora buscamos: # include $PREPROC_RULE_PATH/preprocessor.rules y eliminamos la almohadilla del principio, quedando:
include $PREPROC_RULE_PATH/preprocessor.rules
También eliminaremos la almohadilla de: # include $PREPROC_RULE_PATH/decoder.rules , quedando:
include $PREPROC_RULE_PATH/decoder.rules
Guardaremos el fichero con Control+o y cerraremos con Control+x
Creando la Base de Datos para Snort:
Ingresaremos:
mysql -u root -p
(ingresaremos la contraseña de nuestro usuario root de mysql).
Crearemos y configuraremos la BD:
CREATE DATABASE dbsnort;
GRANT CREATE, INSERT, SELECT, DELETE, UPDATE ON dbsnort.* TO snort@LOCALHOST;
SET PASSWORD FOR snort@LOCALHOST=PASSWORD('un_password');
FLUSH PRIVILEGES;
exit
Recordad sustituir un_password por vuestro password anterior.
Nos situaremos en el directorio donde descomprimimos snort, en mi caso es:
cd ~/snort-2.8.5.1/
Ejecutaremos el setup schema para la DB:
cd schemas
mysql -p -u snort dbsnort < create_mysql
Nos pedirá la contraseña que pusimos de un_password , la introducimos.
Instalando BASE para interpretar Snort gráficamente:
descargamos BASE de su web http://base.secureideas.net/
y descargamos ADOdb de su web http://adodb.sourceforge.net/
Por ejemplo, a dia de hoy descargo BASE 1.4.4 y ADOdb 5.10
Descomprimo con:
tar xvzf base-1.4.4.tar.gz && tar xvf adodb510.tgz
Cambio el nombre del directorio BASE para ser más ameno:
mv base-1.4.4 base
Los muevo a /var/www
# mv base/ adodb5/ /var/www
Damos acceso a apache:
# chown www-data /var/www/base/
Editamos php.ini :
# nano /etc/php5/cli/php.ini
Buscamos: error_reporting = E_ALL & ~E_NOTICE
Ahora existen dos posibilidades: tenemos la línea anter comentada (; delante) pero unas líneas más abajo la volvemos a tener descomentada o tenemos la línea anterior comentada y más abajo tenemos: error_reporting = E_ALL
Si estamos en el primer caso: no haremos nada.
Si estamos en el segundo: añadiremos a error_reporting = E_ALL lo que le falta para ser igual a la línea buscada, quedando: error_reporting = E_ALL & ~E_NOTICE , guardaremos el fichero y saldremos del editor. Reiniciaremos apache: /etc/init.d/apache2 restart
Instalaremos las extensiones PHP necesarias para BASE desde el repositorio de PHP (PEAR):
# aptitude install php-pear -y
# pear channel-update pear.php.net
# pear upgrade PEAR
# pear install Image_Color Image_Canvas Log Mail Mail_Mime Numbers_Roman Numbers_Words
Configuraremos BASE:
Introduciremos en el navegador :
http://localhost/base
En la página clic en continue.
Ahora seleccionaremos idioma, y le diremos la ruta de ADOdb, en mi caso: /var/www/adodb5
Clicaremos a Enviar Consulta (o lo que sea en vuestro idioma).
Ahora:
Pick a Database type: Dejaremos MySQL
Database Name: dbsnort
Database Host: localhost
Database Port: Pondremos el puerto que queramos, si lo dejamos en blanco será el que viene por defecto (3306). En mi caso, lo dejaré en blanco.
Database User Name: snort
Database Password: poned el que tengáis de un_password
Pulsaremos en Enviar Consulta.
Ahora nos pedirá un usuario y contraseña para acceder a BASE, lo ponemos y le damos a Enviar Consulta.
Ahora pulsamos sobre el botón: Create BASE AG
pulsamos sobre: step 5...
Ya estamos en la página principal de BASE.
Ahora nos falta iniciar Snort, crearemos un script:
# nano /etc/init.d/snort
Que contenga, el siguiente código:
#!/bin/bash
# This is a "simple" script written by bodhi.zazen to start snort.
# This script is released under the GPL V3.
# Feel free to make modifications.
# If you modify or redistribute this script please give the courtesy of credit.
# This script requires zenity if you wish to run it in X.
# Test root and display
############################################################
### Configuration options ###
############################################################
############################################################
# The following sections are used to configure snort
# Change "eth0" to the interface you wish to use with snort
#
IFACE="eth0"
# To Add hosts you wish to ignore to a "white list,
# Add them into the "WHITELIST"
# Be sure separate each ip address by a space
# Example WHITELIST='192.168.1.1 192.168.1.2'
WHITELIST=''
# The following section formats the $WHITELIST into proper syntax for snort
if [ -z "$WHITELIST" ] ; then
HOST=''
else
c='1'
for i in $WHITELIST; do
if [ "$c" = "1" ]; then
HOST="host "$i""
c='2'
else
HOST=""$HOST" or host "$i""
fi
done
fi
############################################################
#
# To start snort at boot, put :
#
# "/etc/init.d/snort boot"
#
# in /etc/rc.local (without quotes, above the line exit 0)
#
############################################################
# Sanity checks
if [ -z "$DISPLAY" ] || [ ! -x "/usr/bin/zenity" ]; then
D="e"
else
D="z"
fi
uid=$(/usr/bin/id -u)
if [ ! "$uid" = "0" ];then
case "$D" in
e)
sudo bash $0 $@
exit 0
;;
z)
if [ -x "/usr/bin/gksu" ];then
gksu "$0 $@"
exit 0
else
kdesu "$0 $@"
exit 0
fi
;;
esac
fi
# Check for stale lock files
if [ -z "$PID" ]; then
rm -f /var/run/snort_"${IFACE}"*
fi
# Declair variables
SNORT='/usr/local/bin/snort -c /etc/snort/snort.conf -u snort -g snort -D'
ZEN="/usr/bin/zenity"
ZENINF='$ZEN --width=700 --title "Bodhis snort script" --info --text'
ZENWARN='$ZEN --width=700 --title "Bodhis snort script" --warning --text'
ZENMSG='"$TXT"'
PID=`pidof snort`
#Set prompt colors
RED='\e[0;31m'
GREEN='\e[0;32m'
BLUE='\e[0;34m'
NC='\e[0m' # No Color
# functions
zeninfo ()
{
case "$D" in
e)
echo -e $BLUE"${TXT}" $NC
;;
z)
eval $ZENINF $ZENMSG
;;
esac
}
zenwarn ()
{
case "$D" in
e)
echo -e $RED"${TXT}" $NC
;;
z)
eval $ZENWARN $ZENMSG
;;
esac
}
start ()
{
#start snort
if [ -z "$HOST" ];then
$SNORT -i "$IFACE" &
else
$SNORT -i "$IFACE" not \(`echo "$HOST"`\)&
fi
# This sleep is necessary to allow snort to initialize.
# If you shorten it, snort may start, but fail.
# this sleep is skipped if you use the boot option
sleep 20
PID=`pidof snort`
if [ ! -z "$PID" ]; then
if [ ! -z "$WHITELIST" ]; then
TXT="Snort successfully started, using a Whitelist of "$WHITELIST""
else
TXT="Snort started successfully ..."
fi
zeninfo &
exit 0
else
TXT="Snort failed to start ..."
zenwarn &
exit 1
fi
}
stop ()
{
if [ ! -z "$PID" ]; then
kill -9 ""$PID""
rm -f /var/run/snort_"${IFACE}"*
TXT="Snort stopped ..."
zeninfo &
exit 0
else
TXT="Snort is not running ..."
zenwarn &
exit 1
fi
}
restart ()
{
if [ ! -z "$PID" ]; then
kill -9 "$PID"
rm -f /var/run/snort_"${IFACE}"*
fi
start
}
status ()
{
if [ ! -z $PID ] ; then
TXT="Snort is running ..."
else
TXT="Snort is not running ..."
fi
zeninfo &
}
case "$1" in
boot)
if [ ! -z "$PID" ]; then
exit 0
fi
if [ -z "$HOST" ];then
$SNORT -i "$IFACE" &
else
$SNORT -i "$IFACE" not \(`echo "$HOST"`\)&
fi
;;
start)
if [ ! -z "$PID" ]; then
TXT="Snort is already running ..."
zenwarn &
exit 1
else
start
fi
start
;;
stop)
stop
;;
restart|reload)
restart
;;
status)
status
;;
*)
TXT="Usage start|stop|restart|reload|status|boot"
zenwarn
exit 1
;;
esac
exit 0
Si vuestra interfaz es eth0 no tocaremos nada, pero si es diferente, por ejemplo eth1 , en el script cambiaremos IFACE="eth0" por IFACE="eth1"
Guardaremos con Control+o y saldremos con Control+x
Damos permisos:
# chown root:root /etc/init.d/snort
# chmod 500 /etc/init.d/snort
Iniciamos Snort:
# update-rc.d snort defaults
# /etc/init.d/snort restart
Ya tenemos nuestro Snort corriendo y ejecutándose en cada inicio.
Saludos.
Fuente principal: B!n@ry | Script Snort.init : bodhi.zazen | Adaptación a la actualidad, solución de errores y inclusión de oinkmaster por mí.
Si te da un error el pear install con Image-Canvas y Number-Words lo puedes arreglar con:
ResponderEliminar# pear install Image-Canvas-alpha Number-Words-alpha
para ver las gráficas de datos de alerta necesitarás teclear esto:
# pear install Image-Graph-alpha
para que entren en acción los cambios:
# /etc/init.d/apache2 restart
me sirvio mucho esta guia para un amigo, saludos y gracias
ResponderEliminarPuede interactuar Snort con Isa server o Cisco ASA, para tomar decisiones?
ResponderEliminarHola, qué tal!
ResponderEliminarSeguí todo paso a paso, pero al llegar al final:
Bodhis snort script:
Snort failed to start...
Sugerencias??
Gracias!
Mira, estuve mirando el script, y se supone que en el mismo se le dan permisos para levantar la iface... Claro que yo soy niubi aún. Algún consejo sobre cómo darle permisos? U_U Gracias!
ResponderEliminarMe parece que no es cuestión de permisos. Sin embargo, antes del debug puede ser útil lo siguiente: Mirando en los logs de los demons, veo que snort sí inicia, no hay problemas con las librerías, y va todo bien hasta que:
ResponderEliminarJun 23 13:05:53 crazydiamond snort[2883]: FATAL ERROR: /etc/snort/snort.conf(153) => Unable to open the IIS Unicode Map file '/etc/snort/unicode.map'.
Claramente no puede abrir el archivo IIS Unicode Map >.< Consejos?
Muchas gracias de antemano =)
ENCONTRÉ LA SOLUCIÓN!!!
ResponderEliminarel problema mencionado anteriormente se debía a un fallo al copiar el archivo unicode.map, al principio. Se puede resolver al final simplemente copiando el archivo desde la carpeta descomprimida snort-2.8.6 (ésa es la versión en mi caso), a /etc/snort/
Una vez hecho eso, me percaté, también mirando el log, que snort no encontraba las reglas. Cosa extraña, había seguido tu guía paso a paso. Sin embargo, el problema era similar al mencionado anteriormente. Snort busca el siguiente path para las reglas:
/etc/snort/etc/snort/rules/
Y nosotros las tenemos en:
/etc/snort/rules/
Es tan sencillo como crear el path y copiar las reglas. Entonces, creamos carpetas hasta satisfacer la dirección que nos pide ( /etc/snort/etc/snort/rules/ ), y luego copiamos las reglas a este path que hemos creado. Estoy segura de que debe haber una manera menos engorrosa, pero en estos momentos siento que para ser niubi no estuve nada mal. =D
Espero que a alguien le sirva.
Estos pasos tambien son validos para OpenSuse?
ResponderEliminarHola, muy buen post. mi pregunta es que yo he escuchado un Plugin muy importante para snort llamado SPADE (Statitical Packet Anomaly Detector Engine) que permite detectar anomalias, he intentado instalarlo y anadirlo a mi snort pero no puedo, no se si tu tengas informacion de como instalarlo o pasos como este post...
ResponderEliminarMuchas Gracias..
Saludos
Hola, Mi consulta es si snort soporta wlan0 pq a la hora de configurarlo me dice q no soporta wlan0 y si lo dejo en eth0 tmb me tira error. Alguna idea?
ResponderEliminarMuchas Gracias.
Saludos