Skip to main content

Asegurando nuestro sistema: Arno's firewall + Snort + Base

Posted in

En el anárquico mundo de Internet, es imprescindible la seguridad. Sea para la red local de nuestro hogar, oficina o la de un servidor. Es un mundo creado por el hombre, y por lo tanto siempre vulnerable. No existe un sistema realmente infranqueable, siempre ha habido y siempre habrá agujeros que un intruso podrá explotar para hacerse con el control, o sacar información de nuestra máquina. No obstante existen sistemas más seguros que otros (se die que OpenBSD es el más paranóico), pero lo cierto es que la robustez de un sistema depende casi totalmente del administrador. Por esto es imprescindible contar con unas buenas herramientas que nos ayuden a evitar la intrusión indeseada y que nos informen en caso de éxito para el atacante. En este artículo mostraremos paso por paso la instalación y configuración básica de Snort + Base + Arno's firewall.

Las Herramientas

Arno's Firewall

Como todo el mundo sabe, el núcleo Linux dispone del framework NetFilter que es el encargado de manejar los paquetes que enviamos y llegan a nuestro sistema. La herramientas más conocida para administrarlo es IpTables, que nos permite crear reglas de filtrado de trafico en nuestro sistema (si, algo parecido a un firewall). Es muy interesante aprender como funciona IpTables, aunque debido a su gran potencia y flexiblidad supone mucho tiempo. Por eso existen aplicaciones como firestarter: un entorno gráfico muy amigable en GTK que configura IpTables por nosotros. O Arno's Firewall: un gran y potente bash script que bien configurado supondrá un gran obstáculo para nuestros agresores.

Si lo único que se quiere es instalar un Firewall en nuestro ordenador personal, recomiendo utilizar firestarter. Pero si lo que queremos es un Firewall para nuestro servidor o router, mucho mejor Arno's firewall ya que es más potente (y complejo) que firestarter y no necesita más que Bash y Iptables para funcionar.

Arno's iptables entre otras muchas cosas nos permite:

    Todo lo que permite NAT y SNAT
    Sopote a multiples conexiones de internet con balanceo de carga
    Filtro mediante MAC
    Crear DMZs
    Detección de escaneo de puertos
    Proteccion contra varios ataques DoS como SYN-floodng y ICMP-flooding
    Administrar perfectamente los puertos de nuestro sistema
    Protección contra ataques de fuerza bruta por SSH

Y todo mediante la simple configuración de un archivo de texto.
Para más información visita la web de Arno's Firewall

 

Snort + BASE

Podriamos rellenar páginas y páginas sobre Snort, pero aqui solo vamos a nombrarlo y explicar un poco por encima sus posiblidades.Snort es un sniffer y IDS (Sistema de detección de intrusos). Implementa un motor de detección de ataques que funciona mediante reglas que nosotros mismos podemos definir, y alerta ante cualquier anomalía detectada por esas reglas.
El lenguaje de creación de reglas es muy flexible, potente y relativamente sencillo, aunque aqui no apdrenderemos como crearlas, utilizaremos las ya hechas por la comunidad. Entre ellas disponemos de alerta contra Troyanos, DoS, FTP, SSH, ataques WEB, CGI, Nmap, etc...
Hay que decir que instalar Snort en una ordenador de escritorio es un poco absurdo, recomendable sólo para los más paranóicos. En cambio es de gran utilidad para un Router/Firewall, por el que pasa todo el tráfico de nuestra red.
Snort también puede funcionar con una base de datos SQL (MySQL, PostgreSQL o Oracle), guardando en ella toda la información de las alertas detectadas. En nuestro caso utilizaremos Postgres.

BASE (Basic Analysis and Security Engine), es una aplicación Web para la monitorización de Snort. Necesitaremos instalar un servidor apache con soporte PHP y SQL. La configuración es tan sencilla como indicar que Base de Datos utiliza snort.

 

El proceso

Arno's Firewall

 

La instalación de arno's firewall es muy sencilla. Si utilizamos debian bastará con un 'aptitude install arno-iptables-firewall' y luego debconf iniciará un asistente para la configuración básica. No obstante aqui enseñaremos como instalarlo desde el paquete original.
En primer lugar lo descargamos de la web de Arno

tar xvzf arno-iptables-firewall*.tar.gz
cd arno-iptables-firewall*

El archivo arno-iptables-firewall es el script principal que ejecuta todas las reglas de iptables según la configuración del archivo firewall.conf. Necesitamos que se ejecute cada vez que iniciamos el sistema, para ello supondremos que estamos utilizando el sistema de arranque SysV (el más común).
¡Cuidado! los directorios pueden variar según nuestra distribución.

 
cp arno-iptables-firewall /etc/init.d
chmod +x /etc/init.d/arno-iptables-firewall
for N in 2 3 4 5; do ln -s /etc/init.d/arno-iptables-firewall /etc/rc${N}.d/S20arno-iptables-firewall; done
for N in 0 1 6; do ln -s /etc/init.d/arno-iptables-firewall /etc/rc${N}.d/K20arno-iptables-firewall; done

Ahora copiamos el archivo de configuración de ejemplo

mkdir /etc/arno-iptables-firewall
cp -r etc/arno-iptables-firewall/* /etc/arno-iptables-firewall/

Ya esta completada la instalación. Ahora solo nos queda jugar un poco con el archivo de configuración (/etc/arno-iptables-firewall/firewall.conf). Esta muy bien documentado, asi que solo nombraremos las opciones básicas para su funcionamiento.

    INT_IF="eth1" La interfaz internat (LAN). Todo el tráfico sera aceptado por esta interfaz.
    EXT_IF="eth0" La interfaz externa (internet). Todo el tráfico sera denegado (menos el que especifiquemos)
    INTERNAL_NET="192.168.1.0/24" La red de área local
    EXTERNAL_NET="10.0.0.0/24 La red conectada a internet"
    LAN_OPEN_TCP="80 22" Los puertos TCP abiertos a la LAN
    OPEN_TCP="8080 21" Los puertos TCP abiertos a internet
    NAT=1 Con 1 damos internet a la red local
    NAT_TCP_FORWARD="22,21>192.168.1.30 Con esto redireccionamos los puertos 22 y 21 a la ip 1.30"

 

Por último en el archivo custom-rules podemos definir nuestras propias reglas IpTables, que seran ejecutadas antes que ninguna otra. Y en el directorio plugins tenemos varios archivos que podemos activar editandolos y introduciendo ENABLED=1

Snort

La instalación de snort también es bastante sencilla. Lo instalaremos con suporte PostgreSQL. Suponemos que ya tenemos postgres instalado y funcionando.
Antes de nada necesitamos instalar las dependencia libpcap, libpcre y libpq sea con el gestor de paquetes de nuestra distribución o manualmente
En Debian etch serian los siquietes paquetes (las versiones pueden cambiar): build-essential libpcap0.8-dev libpcre3 libpcre3-dev libpq4

Instalación

Descargamos el paquete con el código fuente de snort.org

tar xvzf snort-*.tar.gz
cd snort-*
./configure --with-postgresql
make
make install
groupadd snort

useradd -g snort snort
mkdir -p /etc/snort/rules
mkdir /var/log/snort
cp etc/snort.conf /etc/snort/snort.conf
cp etc/reference.config /etc/snort/
cp etc/reference.config /etc/snort/
cp etc/classification.config /etc/snort/
cp etc/threshold.conf /etc/snort/
cp etc/unicode.map /etc/snort/
mkdir /var/log/snort

Puede que necesitemos crear un link simbólico de la libreria libpq5 de postgres: "ln -s /usr/local/pgsql/lib/libpq.so.5 /usr/lib/"

Las reglas

Las reglas que ofrece snort gratuitamente son antiguas y escasas. Por eso recomiendo utilizar las de Debian. Para ello descargamos los paquetes snort-rules-default de http://www.us.debian.org/distrib/packages
Busquemos la versión más cercana a la nuestra. En mi caso he utilizado la 2.7 de Debian sid. Desempaquetamos el .deb con deb2tar, deb2tgz, dpkg o cualquier otro. Luego copiamos el contenido del directorio rules en /etc/snort/rules.

cp snort-rules-default*/etc/rules/* /etc/snort/rules/

Configuración

Ahora editamos el archivo de configuración de snort /etc/snor/snort.conf y modificamos las siguientes líneas.

    var HOME_NET 192.168.1.0/24
    var EXTERNAL_NET !$HOME_NET #any seria otra buena opción, si no confiamos en nuestra red local
    var RULE_PATH /etc/snort/rules
    output database: log, postgresql, user=snort password=snort dbname=snort host=localhost

 

Es recomendable leerse detalladamente el archivo de configuración de snort.

 

Snort y PostgreSQL

Llegados a este punto, vamos a crear la base de datos y usuario snort con el password 'snort'. Suponemos que ya tenemos postgres instalado y funcionando correctamente.

su postgres
psql template1
CREATE DATABASE snort;
CREATE USER snort PASSWORD 'snort';
\q

psql snort < [directorio_codigo_fuente_snort]/schemas/create_postgresql

psql snort

GRANT INSERT, SELECT, UPDATE ON TABLE data,detail,encoding,event,icmphdr,iphdr,opt,reference,reference_system,
schema,sensor,sig_class,sig_reference,signature,tcphdr,udphdr TO snort;

GRANT USAGE,SELECT,UPDATE ON TABLE reference_ref_id_seq,reference_system_ref_system_id_seq,sensor_sid_seq,
sig_class_sig_class_id_seq,signature_sig_id_seq to snort;

GRANT DELETE ON TABLE acid_ag,acid_ag_alert,acid_event,acid_ip_cache,base_roles,base_users,data,detail,encoding,event,
icmphdr,iphdr,opt,reference,reference_system,schema,sensor,sig_class,sig_reference,signature,tcphdr,udphdr TO snort;

\q

Para ejecutar snort haremos: /usr/local/bin/snort -i eth0 -c /etc/snort/snort.conf

Y si queremos hacer el script de inicio para que arranque automaticamente:

cat < /etc/init.d/snort
#!/bin/bash

if [ "$1" == "start" ]; then
/usr/local/bin/snort -i eth0 -c /etc/snort/snort.conf -D

else if [ "$1" == "stop" ]; then
kill -15 `pidof snort`
fi
fi
[CONTROL+C]

chmod +x /etc/init.d/snort

update-rc.d snort defaults #o el comando correspondiente para nuestra distribución
/etc/init.d/snort start

BASE

La instalación de BASE es muy sencilla. Esta hecho en PHP, lo único que necesitamos es copiar los archivos en un directorio de apache y iniciar la configuración asistida mediante un navegador web. En primer lugar descargamos el paquete de base.secureideas.net Suponemos que tenemos apache+php funcionando con el directorio /var/www como raiz.

tar xvzf base*.tar.gz
cp -r base-[version].tar.gz /var/www/base

Por último abrimos un navegador web y accedemos a http://localhost/base. Nos aparecerá un pequeño asistente donde deberemos añadir la base de datos, contraseña y usuario para que BASE pueda acceder a los datos generados por snort.

El aspecto final de BASE funcionando es este:

Nota del autor

Por último decir que este manual es bastante incompleto. Snort y Arno's Firewall disponen de muchisimas más posiblidades que las mencionadas aqui. Recomiendo visitar la documentación oficial de los dos proyectos. Además soy consciente de que me he dejado varios pasos, debido a que elaboré el texto tras tenerlo todo funcionando. Agradezco cualquier aportación/correción del contenido de este artículo.