Snort es un sniffer de paquetes y un detector de intrusos basado en red (se monitoriza todo un dominio de colisión). Es un software muy flexible que ofrece capacidades de almacenamiento de sus bitácoras tanto en archivos de texto como en bases de datos abiertas como lo es MySQL. Implementa un motor de detección de ataques y barrido de puertos que permite registrar, alertar y responder ante cualquier anomalía previamente definida. Así mismo existen herramientas de terceros para mostrar informes en tiempo real (ACID) o para convertirlo en un Sistema Detector y Preventor de Intrusos.
Versiones de software
Sistema Operativo: Debian Jessie
Snort: snort-2.9.7.6
Instalación
Agregar los repositorios necesarios
vim /etc/apt/sources.list
deb http://repo.percona.com/apt jessie main deb-src http://repo.percona.com/apt jessie main
deb http://packages.dotdeb.org jessie all deb-src http://packages.dotdeb.org jessie all
cd /usr/src && wget http://www.dotdeb.org/dotdeb.gpg && cat dotdeb.gpg | apt-key add -
apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
Y actualizar los repositorios
apt update
Instalar las dependencias necesarias
apt install apache2 autoconf automake bison ca-certificates ethtool flex git g++ gcc gcc-4.9 libapache2-mod-php5 libcrypt-ssleay-perl libmysqlclient-dev libnet1 libnet1-dev libpcre3 libpcre3-dev libphp-adodb libssl-dev libtool libwww-perl make percona-server-client-5.6 percona-server-common-5.6 percona-server-server-5.6 ntp php5-cli php5-gd php5-mysql php-pear sendmail sysstat usbmount iputils-ping
Añadir la siguientes líneas al archivo rc.local antes de exit0 (sustituir eth0 por la interfaz de vuestra máquina)
vim /etc/rc.local
ethtool --offload eth0 rx off tx off ethtool -K eth0 gso off ethtool -K eth0 gro off exit 0
Instalar los pre-requisitos de Snort (libcap, libdnet, DAQ)
Libpcap
# cd /usr/src && wget http://www.tcpdump.org/release/libpcap-1.7.4.tar.gz # tar -zxvf libpcap-* && cd libpcap-* # ./configure --prefix=/usr && make && make install
Libdnet
cd /usr/src && wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz tar -zxvf libdnet-* && cd libdnet-* ./configure --prefix=/usr --enable-shared && make && make install
DAQ
cd /usr/src && wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz tar -zxvf daq-*.tar.gz && cd daq-* ./configure && make && make install
Actualizar la ruta de la librería
echo >> /etc/ld.so.conf /usr/lib echo >> /etc/ld.so.conf /usr/local/lib && ldconfig
Instalar, configurar y probar snort
cd /usr/src && wget https://www.snort.org/downloads/snort/snort-2.9.7.6.tar.gz tar -zxvf snort-*.tar.gz && cd snort-* ./configure --enable-sourcefire && make && make install mkdir /usr/local/etc/snort /usr/local/etc/snort/rules /var/log/snort /var/log/barnyard2 /usr/local/lib/snort_dynamicrules touch /usr/local/etc/snort/rules/white_list.rules /usr/local/etc/snort/rules/black_list.rules /usr/local/etc/snort/sid-msg.map groupadd snort && useradd -r -g snort snort && passwd snort chown snort:snort /var/log/snort /var/log/barnyard2 -R cp /usr/src/snort-*/etc/*.conf* /usr/local/etc/snort cp /usr/src/snort-*/etc/*.map /usr/local/etc/snort
Configuración
Editar el archivo de configuración de snort
vim /usr/local/etc/snort/snort.conf
Línea #45 - ipvar HOME_NET 192.168.1.0/24 Línea #48 - ipvar EXTERNAL_NET !$HOME_NET Línea #104 - var RULE_PATH ./rules Línea #109 - var WHITE_LIST_PATH ./rules Línea #110 - var BLACK_LIST_PATH ./rules Línea #519 - añadir esta nueva línea: output unified2: filename snort.log, limit 128 Línea #547 - comentar todas las include $RULE_PATH/ menos la primera include $RULE_PATH/local.rules
Crear la variable de la ruta de las reglas
RULE_PATH=/usr/local/etc/snort/rules/
Crear archivo local.rules y añadir una norma para probar
vim /usr/local/etc/snort/rules/local.rules
alert icmp any any -> $HOME_NET any (msg:"ICMP test"; sid:10000001; rev:1;)
Hacemos un testeo de la configuración
/usr/local/bin/snort -T -c /usr/local/etc/snort/snort.conf
Ejecutar el siguiente comando y generar trafico ICMP con un ping desde otra consola
/usr/local/bin/snort -A console -q -u snort -g snort -c /usr/local/etc/snort/snort.conf -i eth0
Si se genera algo así es que está bien configurado
02/09-11:29:43.450236 [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 172.26.12.1 -> 172.26.12.2 02/09-11:29:43.450251 [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 172.26.12.2 -> 172.26.12.1
Instalar y configurar Barnyard2 para aumentar el rendimiento y liberar a Snort de trabajos de proceso.
cd /usr/src/ && git clone https://github.com/firnsy/barnyard2 && cd barnyard2 autoreconf -fvi -I ./m4 && ./configure --with-mysql --with-mysql-libraries=/usr/lib/x86_64-linux-gnu && make && make install mv /usr/local/etc/barnyard2.conf /usr/local/etc/snort cp schemas/create_mysql /usr/src
Editar el archivo de configuración de barnyard2
vim /usr/local/etc/snort/barnyard2.conf Línea #27 sustituir por /usr/local/etc/snort/reference.config Línea #28 sustituir por /usr/local/etc/snort/classification.config Línea #29 sustituir por /usr/local/etc/snort/gen-msg.map Línea #30 sustituir por /usr/local/etc/snort/sid-msg.map Línea #227 sustituir por output alert_fast Añadir al final del archivo: output database: log, mysql, user=snort password=<contraseña> dbname=snort host=localhost
MySQL
Configurar Mysql
Securizar mysql
mysql_secure_installation
Crear la base de datos de snort y el usuario
mysql -u root -p mysql> create database snort; mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost; mysql> SET PASSWORD FOR snort@localhost=PASSWORD('<contraseña>'); mysql> use snort; mysql> source /usr/src/create_mysql mysql> exit;
Iniciar Snort y barnyard con los siguientes comandos
/usr/local/bin/snort -q -u snort -g snort -c /usr/local/etc/snort/snort.conf -i eth0 & /usr/local/bin/barnyard2 -c /usr/local/etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /usr/local/etc/snort/bylog.waldo -C /usr/local/etc/snort/classification.config &
Comprobar que se añaden correctamente los eventos. Se puede hacer un ping desde otra máquina para ver que el contador sube
mysql -u root -p -D snort -e "select count(*) from event"
Apache y PHP
Configuración de apache y PHP
vim /etc/php5/apache2/php.ini Línea #449 – cambiar la línea error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE a2enmod ssl a2dissite default-ssl ; a2ensite default-ssl pear config-set preferred_state alpha && pear channel-update pear.php.net pear install --alldeps Image_Color2 Image_Canvas Image_Graph /etc/init.d/apache2 restart
Instalar y configurar BASE
cd /usr/src && wget http://sourceforge.net/projects/secureideas/files/BASE/base-1.4.5/base-1.4.5.tar.gz mkdir /var/www/html/base tar -zxvf base-*.tar.gz && cd base* && cp -r * /var/www/html/base chmod 777 /var/www/html/base -R
En el navegador https://IP/base y seguir los pasos de configuración.
Snortbarn
Crear el archivo snortbarn
vim /etc/init.d/snortbarn
#! /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 eth0 up /usr/local/bin/snort -q -u snort -g snort -c /usr/local/etc/snort/snort.conf -i eth0 & /usr/local/bin/barnyard2 -q -c /usr/local/etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /usr/local/etc/snort/bylog.waldo -C /usr/local/etc/snort/classification.config 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
Darle permisos de ejecución y hacer que se inicie con el sistema
chmod +x /etc/init.d/snortbarn insserv -f -v snortbarn
Pulledpork
Tener las reglas actualizadas con pulledpork
cd /usr/src && git clone https://github.com/shirkdog/pulledpork cd pulledpork cp pulledpork.pl /usr/local/bin && cp etc/*.conf /usr/local/etc/snort
Crearse una cuenta en snort para conseguir el oinkcode
vim /usr/local/etc/snort/pulledpork.conf
Línea 19: introducir el “oinkcode” donde aparece Línea 26: introducir el “oinkcode” donde aparece Línea 29: descomentar: rule_url=https://rules.emergingthreats.net/|emerging.rules.tar.gz|open-nogpl Línea 133: cambiar a: distro=Debian-8-0 Línea 141: comentar la Blacklist Líneas 196-199: descomentar
echo pcre:fwsam >> /usr/local/etc/snort/disablesid.conf # disables all block (fwsam) rules chmod +x /usr/local/bin/pulledpork.pl /usr/local/bin/pulledpork.pl -c /usr/local/etc/snort/pulledpork.conf -T –l
Limpiar el sistema despues de la instalación
rm /var/www/html/index.html chmod 755 /var/www/html/base pkill snort && pkill barnyard2 rm -rf /var/log/snort/* /var/log/barnyard2/* vim /usr/local/etc/snort/rules/local.rules – Comentar la regla de prueba vim /usr/local/etc/snort/snort.conf – Línea 544: añadir: include $RULE_PATH/snort.rules
Ref:
https://s3.amazonaws.com/snort-org-site/production/document_files/files/000/000/049/original/Debian___Snort_based_Intrusion_Detection_System.pdf?AWSAccessKeyId=AKIAIXACIED2SPMSC7GA&Expires=1420223669&Signature=FjGmxPiTERMqNuU1ofWvWRpl%2Fq8%3D
http://es.wikipedia.org/wiki/Snort
Buenas noches
Tendran un manual como este adaptado para arch linux o manjaro, ya que algunas comandos son diferentes, quisiera implentarlo pero ya he intentado con varios tutoriales pero no funciona correctamentes
Saludos
Buenas,
yo no te recomendaría instalar snort en un arch ya que es mucho mas complicado ya que tienes que compilar todos los paquetes uno a uno y a la hora de actualizar te va dar muchos mas problemas. Por eso te recomiendo hacerlo sobre una Debian.
Buenas,
He seguido el tutorial línea a línea pero cuando trato de iniciar el snortbart creado en /etc/init.d me aparece el siguiente error:
/etc/init.d/snortbarn start
[….] Starting snortbarn (via systemctl): snortbarn.serviceFailed to start snortbarn.service: Unit snortbarn.service failed to load: No such file or directory.
failed!
¿Podrías ayudarme?
Gracias y un saludo.
Buenas,
Mira a ver si tiene permisos de ejecución.
Que sistema operativo estas utilizando?
Un saludo
Empecé de nuevo desde el principio y ya me funciona, gracias!