Instalación de Snort en CentOS 6.3

Snort es un programa Open Source desarrollado para prevenir y detectar intrusiones en una red. De ahí los acrónimos IDS (intrusion detection system) y IPS (intrusion prevention system).

¿Cómo funciona?

Analiza todos los paquetes que salen/entran en la red monitoreada, los decodifica, aplica las reglas definidas en su configuración y devuelve los resultados/alertas.

Visto gráficamente:

Captura

 

Esta instalación se ha efectuado en un Linux CentOS 6.3 versión minimal. Primero se actualiza el sistema:

yum update

Se reinicia:

reboot

Se instalan los paquetes de desarrollo (para compilar las fuentes):

yum groupinstall "Development Tools"

Se instalan la dependencias para la compilación de Snort:

yum install libpcap libpcap-devel pcre pcre-devel tcpdump zlib-devel wget nano

Antes de compilar Snort, hay que instalar desde las fuentes:

  • llibdnet – una librería que permite efectuar toda una serie de operaciones de bajo nivel en los paquetes de red
  • DAQ - Data Acquisition library que viene utilizada desde la versión 2.9.0 de Snort para la captura de los datos

Se inicia con libdnet:

cd /usr/src

wget http://downloads.sourceforge.net/project/libdnet/libdnet/libdnet-1.11/li...

tar -xf libdnet-1.11.tar.gz

cd libdnet-1.11

./configure --prefix=/usr
make
make install

Se continua con DAQ:

cd /usr/src

wget http://www.snort.org/dl/snort-current/daq-2.0.0.tar.gz -O daq-2.0.0.tar.gz

tar -xf daq-2.0.0.tar.gz

cd daq-2.0.0

./configure
make
make install

Se termina esta parte con la instalación de la ultima versión de Snort disponible:

cd /usr/src

wget http://www.snort.org/dl/snort-current/snort-2.9.4.tar.gz -O snort-2.9.4.tar.gz

tar -xf snort-2.9.4.tar.gz

cd snort-2.9.4

./configure --enable-zlib --enable-sourcefire
make
make install

Se mira la versión de Snort instalada:

snort --version

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.4 GRE (Build 40)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team
           Copyright (C) 1998-2012 Sourcefire, Inc., et al.
           Using libpcap version 1.0.0
           Using PCRE version: 7.8 2008-09-05
           Using ZLIB version: 1.2.3

Se crean las carpetas utilizadas para la configuración:

mkdir /etc/snort
mkdir /etc/snort/rules
mkdir /etc/snort/preproc_rules
mkdir /etc/snort/so_rules
mkdir /usr/local/lib/snort_dynamicrules
mkdir /var/log/snort

Para iniciar Snort como servicio, se instala el script de arranque:

cd rpm

cp snortd /etc/init.d/
chmod +x /etc/init.d/snortd
chkconfig --add snortd
cp snort.sysconfig /etc/sysconfig/snort

Como el script lo inicia el usuario snort, se crea ese usuario en el sistema:

groupadd -g 40000 snort
useradd snort -d /var/log/snort -s /sbin/nologin -c SNORT_IDS –g snort

useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

Como el script busca el binario de Snort en la carpeta /usr/sbin, se crea un enlace simbólico:

ln -s /usr/local/bin/snort /usr/sbin/snort

Ahora se pueden descargar las reglas brindadas por los desarrolladores de Snort Para hacerlo, hay que registrarse en la sitio web: https://www.snort.org/signup

Una vez creada la cuenta se accede y en la pagina que aparece se selecciona la imagen “Get Rules”. En la nueva pagina se selecciona el enlace “Download from the command line” y luego el enlace “Get a Oinkcode”. En la nueva pagina aparecerá el código asignado. Se crea la carpeta donde descargar las reglas:

cd /usr/src

mkdir snortrules

cd snortrules

y se descarga utilizando la siguiente sintaxis:

wget http://www.snort.org/sub-rules/<filename>/<oinkcode-here> -O <output-filename>

Suponiendo que el oinkcode sea: caa1498ca806ff92ef816ab0808cb6e9f6

Se descargarán de la siguiente forma:

wget http://www.snort.org/sub-rules/snortrules-snapshot-2940.tar.gz/caa1498ca... -O snortrules-snapshot-2940.tar.gz

Se descomprime el archivo:

tar -xf snortrules-snapshot-2940.tar.gz

Se copian los archivos de configuración de Snort en la carpeta creada anteriormente:

cp etc/* /etc/snort/
cp ../snort-2.9.4/etc/attribute_table.dtd /etc/snort/

Se copian las reglas en las respectivas carpetas:

cp rules/* /etc/snort/rules/
cp preproc_rules/* /etc/snort/preproc_rules/

Se copian los objetos precompilados para la versión 6.X de CentOS en la respectiva carpeta:

cp so_rules/precompiled/RHEL-6-0/i386/2.9.4.0/* /usr/local/lib/snort_dynamicrules/

Se crean los archivos para las reglas definidas localmente:

touch /etc/snort/rules/white_list.rules
touch /etc/snort/rules/black_list.rules
touch /etc/snort/rules/local.rules

Se cambian los permisos para las carpetas a las que debe acceder el usuario snort creado:

cd /etc

chown -Rf snort:snort snort
chown -Rf snort:snort /var/log/snort

 

Configuración de Snort

Para la configuración de Snort el archivo que hay que modificar es snort.conf que se encuentra en la carpeta /etc/snort. Se abre:

nano /etc/snort/snort.conf

La primera línea que hay que modificar es:

ipvar HOME_NET any

En esta línea se indica el rango de IP locales que serán protegidas por snort. En el caso en que el rango de nuestra red local sea: 192.168.1.1/192.168.1.255, se pone:

ipvar HOME_NET 192.168.1.1/24

La segunda línea que hay que modificar es:

ipvar EXTERNAL_NET any

Donde se pone:

ipvar EXTERNAL_NET !$HOME_NET

Que significa: cualquier IP que no sean las locales. Luego se modifican las líneas relacionadas con los archivos y carpetas de configuración:

var RULE_PATH ../rules
var SO_RULE_PATH ../so_rules
var PREPROC_RULE_PATH ../preproc_rules
var WHITE_LIST_PATH ../rules
var BLACK_LIST_PATH ../rules

Para que queden:

var RULE_PATH rules
var SO_RULE_PATH so_rules
var PREPROC_RULE_PATH preproc_rules
var WHITE_LIST_PATH rules
var BLACK_LIST_PATH rules

En el bloque 6 se configura el tipo de salida para los registros. Después de esta línea:

# output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types

Se añade:

output unified2: filename snort.log, limit 128

Para terminar, en el bloque 8, se modifican las siguientes líneas:

# include $PREPROC_RULE_PATH/preprocessor.rules
# include $PREPROC_RULE_PATH/decoder.rules
# include $PREPROC_RULE_PATH/sensitive-data.rules

Para que queden:

include $PREPROC_RULE_PATH/preprocessor.rules
include $PREPROC_RULE_PATH/decoder.rules
include $PREPROC_RULE_PATH/sensitive-data.rules

Se guardan los cambios y se "compilan" las reglas para las "Shared Objet Rules":

cd /usr/local/bin

snort -c /etc/snort/snort.conf --dump-dynamic-rules=/etc/snort/so_rules

Se cambian los permisos en los archivo creados en la carpeta so_rules:

chown -Rf snort:snort /etc/snort/so_rules/*

Se abre nuevamente el archivo de configuración de Snort:

nano /etc/snort/snort.conf

y al final del archivo, se modifica este bloque:

# include $SO_RULE_PATH/bad-traffic.rules
# include $SO_RULE_PATH/chat.rules
# include $SO_RULE_PATH/dos.rules
# include $SO_RULE_PATH/exploit.rules
# include $SO_RULE_PATH/icmp.rules
# include $SO_RULE_PATH/imap.rules
# include $SO_RULE_PATH/misc.rules
# include $SO_RULE_PATH/multimedia.rules
# include $SO_RULE_PATH/netbios.rules
# include $SO_RULE_PATH/nntp.rules
# include $SO_RULE_PATH/p2p.rules
# include $SO_RULE_PATH/smtp.rules
# include $SO_RULE_PATH/snmp.rules
# include $SO_RULE_PATH/specific-threats.rules
# include $SO_RULE_PATH/web-activex.rules
# include $SO_RULE_PATH/web-client.rules
# include $SO_RULE_PATH/web-iis.rules
#include $SO_RULE_PATH/web-misc.rules

para que quede:

include $SO_RULE_PATH/bad-traffic.rules
include $SO_RULE_PATH/chat.rules
include $SO_RULE_PATH/dos.rules
include $SO_RULE_PATH/exploit.rules
include $SO_RULE_PATH/icmp.rules
include $SO_RULE_PATH/imap.rules
include $SO_RULE_PATH/misc.rules
include $SO_RULE_PATH/multimedia.rules
include $SO_RULE_PATH/netbios.rules
include $SO_RULE_PATH/nntp.rules
include $SO_RULE_PATH/p2p.rules
include $SO_RULE_PATH/smtp.rules
include $SO_RULE_PATH/snmp.rules
include $SO_RULE_PATH/specific-threats.rules
include $SO_RULE_PATH/web-activex.rules
include $SO_RULE_PATH/web-client.rules
include $SO_RULE_PATH/web-iis.rules
include $SO_RULE_PATH/web-misc.rules

 

Se guardan los cambios y se efectúa una primera prueba para averiguar que la configuración esté bien:

snort -c /etc/snort/snort.conf -T

Si el mensaje final es:

Snort successfully validated the configuration!
Snort exiting

Todo está bien.

¿Cómo se puede probar el programa para saber si efectivamente está detectando los paquetes definidos en las reglas?

Escribiendo una de prueba. La sintaxis para escribir una regla es:

acción protocolo IPorigen puertorigen dirección IPdestino puertodestino Opción1 Valor1 Opción2 Valor2 OpciónN ValorN sid revisión

un ejemplo:

nano /etc/snort/rules/local.rules

Al final del archivo ponemos:

alert icmp any any -> any any (msg:"ICMP Testing Rule"; sid:1000001; rev:1;)

Guardamos los cambios. Esta regla nos alertará cada vez que el sistema capturará un paquete de Ping (Protocolo ICMP).

Las partes importantes:

  • acción = alert El sistema nos alertará
  • Protocolo = ICMP
  • any Cualquier IP de origen
  • any Cualquier Puerto de origen
  • -> dirección
  • any Cualquier IP de destino
  • any Cualquier puerto de destino
  • msg:"ICMP Testing Rule"; Opción y valor
  • sid = 1000001 Un identificativo único de la regla. Hay que utilizar números mayores a un millón ya que:
    • el rango de 0 a 99 es reservado para uso futuro
    • el rango de 100 a 1000000 es reservado a las reglas distribuidas por los desarrolladores de Snort
  • rev =1 Indica que es la primera versión de la regla que estamos escribiendo

Para probar la regla iniciamos Snort de manera que envíe las alertas a la consola del terminal Linux:

snort -c /etc/snort/snort.conf -A console

Ahora desde otra ventana terminal efectuamos un ping a una dirección cualquiera:

ping google.com

Aparecerá:

Captura

En la ventana de Snort:

Captura

Para salir del modo consola: CTRL-C

Ya podemos iniciar Snort como servicio:

service snortd start

En este caso las alertas se guardarán en el archivo /var/log/snort/alert:

tail -f /var/log/snort/alert

En otra ventana terminal, ejecutamos nuevamente el comando de ping:

ping google.com

En la ventana del log de alerta de Snort, volverán a aparecer los mensajes.

Terminada esta prueba, quitamos la regla de local.rules y reiniciamos Snort.

Anexo el manual de Snort.

¿Consejos?

AdjuntoTamaño
Icono PDF snort_manual.pdf1.36 MB

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

2 comentarios

Muy buena guía, he seguido

Muy buena guía, he seguido otras, pero siempre omiten la parte de la creación de las carpetas o no lo explican muy bien, de manera que al ejecutar el Snort me daba error. Para instalarlo actualmente no más hay que cambiar las versiones de Snort, daq y libdnet por las últimas. Deberias hacer una guia para el Snorby o el Base

Suscribirse a Comentarios de "Instalación de Snort en CentOS 6.3" Suscribirse a VozToVoice - Todos los comentarios