Vous êtes sur la page 1sur 9

INSTALANDO Y CONFIGURANDO DEBIAN(SQUEEZE)\SNORT IDS E IPS

Instalando y configurando Debian(Squeeze)\Snort IDS e IPS


(Autor: Andrs Hernndez, email: andy1818ster@gmail.com, creacin: 03/08/2013)

Este documento es una traduccin, correccin y actualizacin del original Building a Debian\Snort based IDS Jason Weir jason.weir@nhrs.org 12/7/2011. En este documento se mostrara como instalar y configurar Snort 2.9.5.3, Barnyard2-1.13 beta y BASE 1.4.5. *Importante: este documento est dirigido a usuarios que cuenten con experiencia en entornos Linux y tengan conocimiento en instalacin, configuracin y correccin de errores en MySQL y Apache, esto debido a que no se abordarn dichos temas de manera especfica en este documento. ***Se recomienda seguir estrictamente el orden de ejecucin de los comandos, como se presentan en este documento***

Contenido:
1. Instalacin de los paquetes base 2. Instalacin de prerrequisitos para Snort 3. Instalacin y configuracin de Snort IDS 4. Instalacin de pulledpork y reglas (so_rules, preproc_rules y rules) 5. Prueba de Snort y creacin de regla bsica 6. Configuracin de MySQL para Snort 7. Instalacin y configuracin de barnyard2 8. Configuracin de Apache y PHP 9. Instalacin y configuracin de BASE 10. Configuracin Snort IPS

Snort IDS
1. Instalacin de los paquetes base
Se asume que se ha instalado el SO Debian squeeze 6.0.7 previamente y este se encuentra funcionando con un entorno grfico y una conexin funcional a Internet, mediante la interfaz eth0, adems de contar con los repositorios de su preferencia (sources.list) para la descarga de los paquetes especificados en este documento. (Para este documento la instalacin del SO Debian Squeeze 6.0.7 se realiz en una mquina virtual creada en VMware v9.0.2 build-1031769 y se utilizaron los repositorios: deb http://mmc.geofisica.unam.mx/debian/ squeeze main contrib non-free, deb-src http://mmc.geofisica.unam.mx/debian/ squeeze contrib main non-free) Instalacin de SSH: # apt-get install ssh Necesitaremos SSH para la conexin a repositorios en Snort y GitHub (Barnyard2).

ANDRES HM

INSTALANDO Y CONFIGURANDO DEBIAN(SQUEEZE)\SNORT IDS E IPS


Instalacin de los paquetes base: # apt-get install apache2 libapache2-mod-php5 libwww-perl mysql-server mysql-common mysql-client php5mysql libnet1 libnet1-dev libpcre3 libpcre3-dev autoconf libcrypt-ssleay-perl libmysqlclient-dev php5-gd php-pear libphp-adodb php5-cli libtool libssl-dev gcc-4.4 g++ automake gcc make flex bison apache2-doc ca-certificates

2. Instalacin de prerrequisitos para Snort


Instalacin de libpcap: # cd /usr/src # wget http://www.tcpdump.org/release/libpcap-1.4.0.tar.gz # tar -zxvf libpcap-1.4.0.tar.gz # cd libpcap-1.4.0 # ./configure --prefix=/usr --enable-shared # make # make install Instalacin de libdnet: # cd /usr/src # wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz # tar -zxvf libdnet-1.12.tgz # cd libdnet-1.12 # ./configure --prefix=/usr --enable-shared # make # make install Instalacin de DAQ: # apt-get -y install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0 Prerrequisitos de DAQ # cd /usr/src # wget http://www.snort.org/dl/snort-current/daq-2.0.1.tar.gz # tar -zxvf daq-2.0.1.tar.gz # cd daq-2.0.1 # ./configure # make # make install Actualizando el path de la librera compartida: # echo >> /etc/ld.so.conf /usr/lib # ldconfig

ANDRES HM

INSTALANDO Y CONFIGURANDO DEBIAN(SQUEEZE)\SNORT IDS E IPS 3. Instalacin y configuracin de Snort


Instalacin: # cd /usr/src # wget http://labs.snort.org/snort/2953/snort.conf # wget http://www.snort.org/dl/snort-current/snort-2.9.5.3.tar.gz -O snort-2.9.5.3.tar.gz # tar -zxvf snort-2.9.5.3.tar.gz # cd snort-2.9.5.3 # ./configure --enable-sourcefire # make # make install # mkdir /etc/snort /etc/snort/rules /var/log/snort /var/log/barnyard2 /usr/local/lib/snort_dynamicrules # mkdir /etc/snort/so_rules /etc/snort/preproc_rules # touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules /etc/snort/bylog.waldo /etc/snort/rules/so_rules.rules /etc/snort/snort.stats # groupadd snort # useradd -g snort snort # chown snort:snort /var/log/snort /var/log/barnyard2 # cp /usr/src/snort-2.9.5.3/etc/*.conf* /etc/snort # cp /usr/src/snort-2.9.5.3/etc/*.map /etc/snort # cp /usr/src/snort.conf /etc/snort Configuracin global: # nano /etc/snort/snort.conf Editar las siguientes lneas: Lnea #45 - ipvar HOME_NET 172.26.12.0/22 Coloca la red interna que deseas proteger Lnea #48 - ipvar EXTERNAL_NET any Puedes colocar una red especifica o any para cualquier red Lnea #104 - var RULE_PATH ../rules cambiar ruta por: /etc/snort/rules Lnea #105 - var RULE_PATH ../so_rules cambiar ruta por: /etc/snort/so_rules Lnea #106 - var RULE_PATH ../preproc_rules cambiar ruta por: /etc/snort/preproc_rules Lnea #113 - var WHITE_LIST_PATH ../rules cambiar ruta por: /etc/snort/rules Lnea #114 - var BLACK:LIST_PATH ../rules cambiar ruta por: /etc/snort/rules Lnea #121 - config disable_decode_alerts verificar que la lnea este descomentada Lnea #194 - config pcre_match limit: 3500 verificar que la lnea este descomentada y el valor asignado sea el sealado Lnea #268-269 comentar estas lneas (no son necesarias ya que trabajaremos sobre ipv4) Lnea #272 preprocessor frag3_global: max_frags 65536 - verificar que la lnea este descomentada y el valor asignado sea el sealado Lnea #276 preprocessor stream5_global: verificar que track_tcp tenga como valor asignado yes, cambiar: track_icmp no, \ por track_icmp yes, \ (si track_icmp no se encuentra agregarlo), agregar track_ip yes, \ y max_ip 16384, \ - despus de esta lnea agregar max_icmp 65536, \ Lnea #292 abajo de esta lnea agregar: preprocessor stream5_icmp: timeout 30 y debajo de esta agregar esta lnea: Preproccessor stream5_ip: 30

ANDRES HM

INSTALANDO Y CONFIGURANDO DEBIAN(SQUEEZE)\SNORT IDS E IPS


Lnea #296 # preprocessor prefmonitor: time 300 file /var/snort/snort.stats pktcnt 10000 descomentar y cambiar ruta por: /etc/snort/snort.stats Lnea #299 agregar despus de decompress_depth 65535 esto: max_gzip_mem 104857600 Lnea #419 y 422 - (opcional para deteccin de escaneo de puertos o arp spoof) descomentar Lnea #523 agregar esta lnea: output unified2: filename snort.log, limit 128 (hacer espacio si no hay para agregarla) Lnea #535 include classification.config - verificar que la lnea este descomentada Lnea #549-663 (puede variar el nmero de lneas) comentar todas las lneas que contengan include $RULE_PATH excepto la que contiene local.rules Lnea #671-673 descomentar

4. Instalacin de pulledpork y reglas


Para mantener nuestras reglas al da usaremos pulledpork. Instalacin de pulledpork: # cd /usr/src # wget http://pulledpork.googlecode.com/files/pulledpork-0.6.1.tar.gz # tar -zxvf pulledpork-0.6.1.tar.gz # cd pulledpork-0.6.1 # cp pulledpork.pl /usr/local/bin # cd etc/ # cp *.conf /etc/snort Configuracin: # nano /etc/snort/pulledpork.conf Editar las siguientes lneas: *Nota: necesitaras darte de alta en la pgina http://www.snort.org y despus de activar t cuenta debers solicitar tu Oinkcode. Lnea #20 Modificar agregando el nombre del paquete de reglas a descargar desde la pgina de Snort y nuestro oinkcode, siguiendo el ejemplo que se muestra en esa seccin. Ej. rule_url=https://www.snort.org/reg-rules/|snortrules-snapshot-2946.tar.gz (este paquete puede ser otro, visitar la pgina web de Snort para verificar los ms actuales) |el_oinkcode_va_aqui Lnea #22 agregar nuestro oinkcode en el rea marcada Ej. rule_url=https//www.snort.org/reg-rules/|opensource.gz(esto se queda igual) |el_oinkcode_va_aqui Lnea #26 - comentar Lnea #71 - cambiar por: rule_path=/etc/snort/rules/snort.rules Lnea #86 - cambiar por: local_rules =/etc/snort/rules/local.rules Lnea #89 cambiar por: sid_msg=/etc/snort/sid-msg.map Lnea #112 cambiar por: config_path=/etc/snort/snort.conf Lnea #116 cambiar por: sostub_path=/etc/snort/rules/so_rules.rules Lnea #124 cambiar por: distro=Debian-Lenny Lnea #167 descomentar y cambiar por: snort_version=2.9.5.3

ANDRES HM

INSTALANDO Y CONFIGURANDO DEBIAN(SQUEEZE)\SNORT IDS E IPS


Lnea #171 - descomentar y cambiar por: enablesid=/etc/snort/enablesid.conf Lnea #173 - descomentar y cambiar por: disablesid=/etc/snort/disablesid.conf Lnea #174 - descomentar y cambiar por: modifysid=/etc/snort/modifysid.conf # echo pcre:fwsam >> /etc/snort/disablesid.conf - Deshabilitar todo el bloque de reglas fwsam Iniciar pulledpork # /usr/local/bin/pulledpork.pl -c /etc/snort/pulledpork.conf -T -l *Ahora puedes ver tus reglas; local.rules y snort.rules en /etc/snort/rules. Configurando reglas de preprocesador y so_rules # cd tmp/ # tar -zxvf snortrules-snapshot-XXXX.tar.gz sustituir XXXX por el nmero de versin marcado que se encuentre en el directorio (este paquete fue descargado previamente por pulledpork) # mv -v preproc_rules/ /etc/snort # mv v so_rules/ /etc/snort # cd rules/ # cp *.*/etc/snort/rules *Importante: si el paquete de reglas que intentamos descomprimir no se encuentra en del directorio tmp/, tendr que ser descargado de la pgina http://www.snort.org, una vez hecho esto se debern repetir los pasos anteriores ahora desde el directorio en donde se descarg el paquete de reglas.

5. Prueba de Snort y creacin de regla bsica


Creacin de regla de prueba: # nano /etc/snort/rules/local.rules Ingresar esta regla simple: alert icmp any any -> $HOME_NET any (msg:"ICMP ping"; sid:1000000; rev:1;) Inicio y test de Snort en modo IPS (continuos mode) # /usr/local/bin/snort -T c /etc/snort/snort.conf *Al finalizar la ejecucin de este comando se mostrara la siguiente leyenda: Snort successfully validated the configuration! esto quiere decir que Snort est bien configurado # nano /etc/snort/snort.conf *Verificar que la lnea 547 sea igual a esto: include $RULE:PATH/local.rules # /usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 *Despus de ejecutar este comando abre otra ventana y realiza un ping a cualquier direccin ip que desees, si Snort est funcionando de manera correcta te mostrara algo como esto:

ANDRES HM

INSTALANDO Y CONFIGURANDO DEBIAN(SQUEEZE)\SNORT IDS E IPS


02/09-11:29:43.450236 02/09-11:29:43.450251 02/09-11:29:44.450949 02/09-11:29:44.450957 [**] [1:10000001:0] ICMP ping [**] [Priority: 0] {ICMP} 172.26.12.1 -> 172.26.12.2 [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 172.26.12.2 -> 172.26.12.1 [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 172.26.12.1 -> 172.26.12.2 [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 172.26.12.2 -> 172.26.12.1

Para terminar la ejecucin Snort pulsa las teclas: Ctrl+c.

6. Configuracin de MySQL para Snort


Creacin de la base de datos: # mysql -u root -p ingresar password cuando se solicite mysql> create database snort; mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost; mysql> SET PASSWORD FOR snort@localhost=PASSWORD('tupassword'); mysql> exit; Importar la base de datos preconfigurada de Snort: # cd /usr/src # wget https://github.com/firnsy/barnyard2/archive/v2-1.13.tar.gz # tar zxvf v2-1.13.tar.gz # mysql -u root -p < /usr/src/barnyard2-2-1.13/schemas/create_mysql snort ingresar password cuando se solicite # mysql -u root -p ingresar password cuando se solicite mysql> use snort; mysql> show tables; - con esto debe observar las tablas importadas en la base de datos mysql> exit ;

7. Instalacin y configuracin de barnyard2


Instalacin: # apt-get install libpcap-dev # apt-get install libtool # cd /usr/src/barnyard2-2-1.13 # ./autogen.sh # ./configure --with-mysql # make # make install # mv /usr/local/etc/barnyard2.conf /etc/Snort Configuracin: # nano /etc/snort/barnyard2.conf - Lnea #214- debajo de esta : output alert_fast

ANDRES HM

INSTALANDO Y CONFIGURANDO DEBIAN(SQUEEZE)\SNORT IDS E IPS


Al final del archivo agregar la lnea: output database: log, mysql, user=snort password=<mypassword> dbname=snort host=localhost Iniciando barnyard2 y snort: # /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 Nuevamente hacemos ping desde consola en otra ventana a una direccin ip. Para verificar que realmente se estn guardando los eventos en la base de datos tecleamos: # mysql u root -p -D snort -e "select count(*) from event" ingresar password cuando se solicite

8. Configuracin de Apache y PHP


Configuracin: # cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled # nano /etc/php5/apache2/php.ini - Lnea #517 cambiar por: error_reporting= E_ALL & ~E_NOTICE # a2enmod ssl # pear config-set preferred_state alpha # pear channel-update pear.php.net # pear install --alldeps Image_Color Image_Canvas Image_Graph # /etc/init.d/apache2 restart

9. Instalacin y configuracin de BASE


Instalacin: # cd /usr/src # wget http://sourceforge.net/projects/secureideas/files/BASE/base-1.4.5/base-1.4.5.tar.gz # tar -zxvf base-1.4.5.tar.gz # cp -r base-1.4.5 /var/www/base # chmod 777 /var/www/base Configuracin: Abrir en el navegador: https://localhost/base - la direccin ip del servidor apache 1. Click en Continue 2. Elegir espaol e ingresar en Path to adodb: /usr/share/php/adodb 3. Click en Continue 4. Ingresar Database Name: snort, Database Host: localhost, Database Port: dejar en blanco, Database User Name: snort, Database Password: mypass 5. Click en Continue 6. Llenar el formulario de usuario administrador 7. Click en Continue 8. Click en "create baseag" 9. Click en Continue to step 5

ANDRES HM

INSTALANDO Y CONFIGURANDO DEBIAN(SQUEEZE)\SNORT IDS E IPS


10. Ahora podemos ver las alertas generadas por Snort de manera ordena y ms manejable Limpiando: # rm /var/www/index.html # chmod 755 /var/www/base # pkill snort && pkill barnyard2 # rm -rvf /var/log/snort/* /var/log/barnyard2/* # nano /etc/snort/snort.conf Lnea #548 - agregar: include $RULE_PATH/snort.rules # nano /etc/Snort/Snort.conf - Lnea #682-699 - descomentar *Hasta este punto hemos configurado Snort para que funcione como un IDS (avanzamos a su vez en algunos aspectos de la configuracin para IPS), guardando sus eventos en un log y una base de datos haciendo uso de Barnyard2, mostrndolos en un entorno grafico mediante el uso de BASE.

Snort IPS

10. Configuracin Snort IPS


Configuracin: # nano /etc/snort/snort.conf Lnea #547 y 548 comentar # nano /etc/snort/snort.conf Debajo de la lnea #548 agregar include $RULE_PATH/ips.rules # touch /etc/snort/rules/ips.rules # nano /etc/snort/ips.rules Agregar la siguiente regla: drop tcp any any -> any 80 (msg:Bloquea trafico tcp port 80; sid:2000000; rev:1;) Agregando iptable: # iptables -I OUTPUT -p tcp --dport 80 -j NFQUEUE *Para eliminar la iptable usar: iptables --flush *Nota: podemos crear cualquier regla con su correspondiente iptable. Inicio y test de Snort IPS (inline mode) # /usr/local/bin/snort --daq nfq -Q --daq-dir /usr/local/lib/daq --daq-var device=eth0 -c /etc/snort/snort.conf -l /var/log/snort --A full v Ahora solo resta navegar en internet en alguna pgina que utilice el protocolo http y el puerto 80, que en general son la mayora y veremos como la conexin a dicha pgina ser bloqueada y en la consola de Snort aparecer la alerta del bloqueo. Si visualizamos el log alert: #more /var/log/snort/alert

ANDRES HM

INSTALANDO Y CONFIGURANDO DEBIAN(SQUEEZE)\SNORT IDS E IPS


Podremos observar que nuestra regla de ips esta funcionado y bloquea todo el trfico tcp por el puerto 80.

ANDRES HM