Está en la página 1de 7

FAIL2BAN: INSTALACION y CONFIGURACION

ndice de contenido
INTRODUCCIN................................................................................................................................2 INSTALACION Y CONFIGURACION FAIL2BAN..........................................................................2 1.- INSTALACIN..........................................................................................................................2 2.- CONFIGURACIN DE LAS OPCIONES GENERALES.......................................................3 3.- CONFIGURACIN DE LOS SERVICIOS CONCRETOS......................................................4 3.1 Servicio FTP......................................................................................................................4 4.- ARRANQUE Y ROTACIN DEL SERVICIO.........................................................................6 4.1 Configuracin de determinadas acciones en el arranque ..................................................6 4.2 Arranque del servicio fail2ban...........................................................................................7 4.3 Rotacin del servicio fail2ban............................................................................................7 BIBLIOGRAFA..................................................................................................................................7

Fecha: Septiembre 2012

INTRODUCCIN
Un intento frecuente de conseguir acceso a un servidor suele ser mediante ataques por fuerza fruta (brute-force attack) a los servicios que tiene el servidor. A priori, con una buena poltica de seguridad en las contraseas, este tipo de ataques no es efectivo, pero es cierto que tiene un elevado consumo de ancho de banda y tambin de carga para la CPU del servidor que administras. Para evitar estos ataques en tu servidor Linux, y de paso el consumo de ancho de banda y CPU, existen diversas opciones, que aportan un mayor nivel de seguridad a los servidores, entre ellas fail2ban. Fail2Ban es una aplicacin Python que trabaja sobre los archivos de registro (logs) que generan los servicios del servidor, los analiza regularmente y busca intentos de acceso fallidos. Cuando los encuentra, atendiendo al nmero de intentos de acceso en un determinado periodo de tiempo, toma ciertas medidas que van desde una simple notificacin por correo electrnico al administrador, hasta un baneo (temporal o indefinido) que puede ser parcial (a un servicio del servidor que administramos) o total (a todos los servicios que ofrece nuestro servidor). El funcionamiento es muy sencillo: para cada servicio de nuestro servidor que deseemos proteger con fail2ban debemos indicar:

el archivo de registro (logfile) del servicio el patrn (filter) que se buscar en el logfile del servicio (directorio /etc/fail2ban/filter.d) las acciones que se llevarn a cabo (actions) (directorio /etc/fail2ban/action.d) y el nmero de intentos fallidos que se permiten en cada periodo de tiempo

De esta forma, el demonio que ejecuta fail2ban en nuestro servidor tiene los parmetros suficientes para poder actuar ante un posible ataque por fuerza bruta a alguno de los servicios que corren nuestros servidores. Observaciones: Nuestra instalacin y configuracin va a ser en una Fedora17.

INSTALACION Y CONFIGURACION FAIL2BAN 1.- INSTALACIN


El fail2ban se encuentra empaquetado en los repositorios oficiales de la mayora de distribuciones Linux (tambin se puede descargar fail2ban desde su pagina oficial). Ejecutamos el siguiente comando para instalarlo: yum install fail2ban La instalacin de fail2ban crea la siguiente estructura en la carpeta /etc/fail2ban: /etc/fail2ban |-- action.d | |-- hostsdeny.conf | |-- iptables-allports.conf | |-- ... |-- fail2ban.conf |-- filter.d | |-- apache-auth.conf | |-- postfix.conf | |-- |-- jail.conf

El archivo fail2ban.conf es el archivo de configuracin del demonio que ejecuta fail2ban analizando los logs del sistema y en el vamos a poder definir diferentes opciones como son el archivo de registro del propio fail2ban, el detalle de este archivo, etc Jail.conf es el archivo donde se definen que servicios van a analizarse y con qu criterios. Para cada servicio se define un jail que consta como mnimo de una expresin regular (filter), una accin (action), y el fichero de registro del servicio en cuestin (logpath). El directorio action.d contiene los scripts de las distintas acciones que pueden asociarse a un determinado jail. Y el directorio filter.d contiene distintos archivos con las exprexiones regulares para cada servicio. La instalacin incluye los archivos para las acciones ms comunes (envio de correo, whois, baneo con iptables, host.deny,) y las expresiones regulares (filters) de multiples servicios (ftp, ssh, correo, apache, ). Todos los archivos finalizados en .conf son editables, aunque es recomendable no modificarlos, y utilizar un archivo con el mismo nombre pero acabado en .local en lugar de .conf para escribir nuestra configuracion. La configuracin escrita en los archivos .local siempre tendrn preferencia ante las .conf. De esta forma se asegura que no se pierda nuestra configuracin al actualizar a otra versin (no es necesario duplicar todas las directivas, realmente solo con poner aquellas que deseemos modificar ser suficiente).

2.- CONFIGURACIN DE LAS OPCIONES GENERALES


Copiamos el archivo fail2ban.conf con el nombre fail2ban.local y lo editamos segn nuestras preferencias: cd /etc/fail2ban/ cp -pr fail2ban.conf fail2ban.local vi fail2ban.local - loglevel:nivel de detalle del log de fail2ban. Posibles valores 1=error,2=warn,3=info y 4=debug. Dejamos el valor por defecto 3 loglevel = 3 - logtarget: sirve para indicar dnde se mostrara o almacenara el log del propio fail2ban. Es posible redirigirlo a la salida standar (STDOUT), salida de errores standar (STDERR) o a un archivo (SYSLOG). Vamos a optar por almacenar el registro en un archivo en el directorio /var/log logtarget = /var/log/fail2ban.log - socket: se utiliza para indicar el archivo del socket de fail2ban. Dejamos el valor que aparece. socket = /var/run/fail2ban/fail2ban.sock Una vez guardados los cambios, nos centramos en el archivo jail.conf. Como en el caso anterior lo copiamos con el nombre de jail.local y editamos su contenido: cd /etc/fail2ban/ cp -pr jail.conf jail.local vi jail.local * Seccin [DEFAULT]: contiene los valores de los parmetros que se aplicarn por defecto a todos los servicios ( jails) que se definan, aunque estos valores pueden ser modificados dentro de cada jail:

- ignoreip: sirve para indicar IPs (separadas por espacios) o redes que no queremos que sean baneadas. Por ejemplo, la IP de loopback del propio servidor. ignoreip = 127.0.0.1 - bantime: periodo de tiempo (en segundos) durante el cual se mantendr el bloqueo del atacante. El valor -1 indicara que se bloquea para siempre. bantime = 600 - findtime: el nmero de fallos se ha de producir en un determinado intervalo de tiempo. Esta variable es la que indica el intervalo de tiempo en segundos. findtime = 600 - maxretry: nmero mximo de intentos fallidos que se permitirn en el intervalo de tiempo establecido (findtime). maxretry = 5 - backend: mtodo que se utilizar para comprobar la modificacin en los logs de los servicios. backend = gamin Las opciones son: inotify: Mediante pyinotify lee los cambios en los ficheros. gamin: Mediante Gamin controla los cambios en los ficheros polling: Comprueba peridicamente los cambios en los ficheros, en este caso no es necesario tener libreras complementarias. auto: Escoge por defecto inotify, sino puede elige gamin y si no puede usarlo pasa a polling. * BUG: Hay un problema con el pyInotify y la rotacin del log del fail2ban. Si se pone backend=inotify o backend=auto al rotar el log deja de banear. Ponemos backend=gamin.

3.- CONFIGURACIN DE LOS SERVICIOS CONCRETOS 3.1 Servicio FTP


Ahora slo nos queda activar el jail del servicio que queremos proteger, en nuestro caso, el servidor ftp proftpd. El archivo jail.conf ya incluye numerosos jails para los servicios ms conocidos, entre ellos el servidor ftp proftpd. Por defecto, la configuracin que trae fail2ban para proteger el servidor ftp proftpd es la siguiente: [proftpd-iptables] enabled = false filter = proftpd action = iptables[name=ProFTPD, port=ftp, protocol=tcp] sendmail-whois[name=ProFTPD, dest=you@example.com] logpath = /var/log/proftpd/proftpd.log maxretry = 6 Vamos a ver detalladamente cada opcin:

enabled: sirve para activar o desactivar el jail. logpath: archivo log que genera el servidor proftpd y en donde se buscan los patrones. filter: nombre del archivo de la carpeta filter.d que contiene el filtro para proftpd. action: la accin(o acciones) que se efectuar si se detecta un ataque. 4

Modificamos la configuracin del proftpd en el jail.local: vi jail.local [proftpd-iptables] enabled = true filter = proftpd action = iptables[name=ProFTPD, port=ftp, protocol=tcp] sendmail-whois[name=ProFTPD, dest=direccion@correo] logpath = /var/log/proftpd/proftpd.auth_log #bantime = -1 # -1 es indefinido bantime = 3600 findtime = 30 maxretry = 4 Hemos modificado la ubicacin del archivo de registro del servidor proftpd, y hemos aadido la direccin de email dnde enviar un correo con un whois del atacante. Comprobacin del formato fecha en los logs del protfpd: El formato del log del proftpd est en fecha espaola (ejemplo: 08/ago/2012), el fail2ban no es capaz de analizarlo y no banea. Tenemos que cambiar el formato del log del proftpd: vi /etc/proftpd.conf Modificamos esta lna: LogFormat auth "%v [%P] %h %t \"%r\" %s" Por esta otra: LogFormat auth "%v [%P] %h %{[%m/%d/%Y:%H:%M:%S]}t \"%r\" %s" Comprobacin del funcionamiento del filtro sobre el contenido del fichero log del proftpd: Ahora tenemos que comprobar que el contenido del fichero de log, cumple alguno de los filtros que vienen definidos por defecto, si no es as, hay que hacer uno especfico para nuestro caso. Los filtros definidos son (fichero /etc/fail2ban/filter.d/proftpd.conf):
\(\S+\[<HOST>\]\)[: \(\S+\[<HOST>\]\)[: \(\S+\[<HOST>\]\)[: \(\S+\[<HOST>\]\)[: -]+ -]+ -]+ -]+ USER \S+: no such user found from \S+ \[\S+\] to \S+:\S+$ USER \S+ \(Login failed\): Incorrect password\.$ SECURITY VIOLATION: \S+ login attempted\.$ Maximum login attempts \(\d+\) exceeded$

Para hacer esta comprobacin, tenemos la herramienta: fail2ban-regex: fail2ban-regex /var/log/proftpd/proftpd.auth_log /etc/fail2ban/filter.d/proftpd.conf Nos da como resultado:
Summary ======= Sorry, no match Look at the above section 'Running tests' which could contain important information.

Es decir, nuestro fichero log no se ajusta a los patrones del filtro, as que tenemos que hacer un patrn concreto para nuestro caso:
(.*) (.*) <HOST> (.*) (.*) 530

Lo aadimos en el fichero filter.d/proftpd.conf: cd /etc/fail2ban/filter.d/ vi proftpd.conf


failregex = \(\S+\[<HOST>\]\)[: -]+ USER \S+: no such user found from \S+ \[\S+\] to \S+:\S+$ \(\S+\[<HOST>\]\)[: -]+ USER \S+ \(Login failed\): Incorrect password\.$ \(\S+\[<HOST>\]\)[: -]+ SECURITY VIOLATION: \S+ login attempted\.$ \(\S+\[<HOST>\]\)[: -]+ Maximum login attempts \(\d+\) exceeded$ (.*) (.*) <HOST> (.*) (.*) 530

Ahora, si comprobamos con fail2ban-regex: fail2ban-regex /var/log/proftpd/proftpd.auth_log /etc/fail2ban/filter.d/proftpd.conf Nos da como resultado:
Success, the total number of match is <num> However, look at the above section 'Running tests' which could contain important information.

4.- ARRANQUE Y ROTACIN DEL SERVICIO 4.1 Configuracin de determinadas acciones en el arranque
Al reiniciar el servicio iptables y el propio servicio fail2ban, se pierden las reglas fail2ban de bloqueo a las ips atacantes. Para resolver este problema, tenemos que modificar las acciones de baneo: En el fichero /etc/fail2ban/action.d/iptables.conf, aadimos las siguientes lneas: cd /etc/fail2ban/action.d/ vi iptables.conf
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP echo "iptables -I fail2ban-<name> 1 -s <ip> -j DROP" >> /etc/fail2ban/action.d/ListadoIPsbloquedas.txt /usr/libexec/iptables.init save

En el fichero /etc/init.d/fail2ban, aadimos la siguiente lnea: vi /etc/init.d/fail2ban


start() { echo -n $"Starting fail2ban: " getpid if [ -z "$pid" ]; then $FAIL2BAN -x start > /dev/null RETVAL=$? fi if [ $RETVAL -eq 0 ]; then touch /var/lock/subsys/fail2ban echo_success sh /etc/fail2ban/action.d/ListadoIPsbloquedas.txt else echo_failure fi echo return $RETVAL }

4.2 Arranque del servicio fail2ban


Despus de guardar los cambios, iniciamos fail2ban: service fail2ban start Metemos el servicio en el arranque, as al reiniciar la mquina se levantar el fail2ban: systemctl enable fail2ban.service

4.3 Rotacin del servicio fail2ban


Integramos el fichero de log de fail2ban en el logrotate: cd /etc/logrotate.d/ vi fail2ban
/var/log/fail2ban.log { weekly rotate 7 missingok notifempty create 0600 root root postrotate /usr/bin/fail2ban-client set logtarget SYSLOG 2> /dev/null || true endscript }

BIBLIOGRAFA
http://www.fail2ban.org http://www.fail2ban.org/wiki/index.php/HOWTOs http://www.fail2ban.org/wiki/index.php/Manual http://www.aradaen.com/seguridad/fail2ban-protege-tu-servidor-de-ataques-por-fuerzabruta/ http://www.aradaen.com/sysadmin/instalar-fail2ban-en-servidores-centos-y-debian/

También podría gustarte