Instalar y configurar fail2ban
fail2ban es un sistema de prevención de intrusiones basado en patrones. Durante mucho tiempo he usado DenyHosts, pero fail2ban me parece mucho mas flexible. Vamos a ver como instalarlo y configurar algunos filtros que nos vienen por defecto:
Al ser un programa escrito en Python la instalación no tiene mucho misterio. Podemos hacerlo de la misma forma en por código fuente:
wget http://downloads.sourceforge.net/project/fail2ban/fail2ban-stable/fail2ban-0.8.4/fail2ban-0.8.4.tar.bz2?use_mirror=ovh tar xjf fail2ban-0.8.4.tar.bz2 cd fail2ban-0.8.4 python setup.py install
O bien simplemente mediante el gestor de paquetes yum:
# yum install fail2ban
Para configurar fail2ban deberemos tener en cuenta los siguientes ficheros:
Mediante /etc/fail2ban/fail2ban.conf se define una configuración muy genérica:
- loglevel: Nivel de detalle que queda guardado en los logs
- logtarget: Dónde se guarda el log. Sus posibles valores són:
- STDOUT
- STDERR
- SYSLOG
- Nombre de fichero
- socket: socket para comunicar el cliente (fail2ban-client) con el daemon
Dentro de /etc/fail2ban/filter.d/ podemos encontrar varios patrones predefinidos que podemos usar:
# ls /etc/fail2ban/filter.d/ apache-auth.conf apache-noscript.conf courierlogin.conf dovecot.conf lighttpd-fastcgi.conf php-url-fopen.conf pure-ftpd.conf sieve.conf vpopmail.conf wuftpd.conf apache-badbots.conf apache-overflows.conf couriersmtp.conf exim.conf named-refused.conf postfix.conf qmail.conf sshd.conf vsftpd.conf xinetd-fail.conf apache-nohome.conf common.conf cyrus-imap.conf gssftpd.conf pam-generic.conf proftpd.conf sasl.conf sshd-ddos.conf webmin-auth.conf
Por otro lado dentro de /etc/fail2ban/action.d/ tenemos las acciones que podemos aplicar al encontrar los patrones en los logs:
# ls /etc/fail2ban/action.d/ complain.conf ipfilter.conf iptables.conf iptables-new.conf mail-whois.conf sendmail-buffered.conf sendmail-whois-lines.conf dshield.conf ipfw.conf iptables-multiport.conf mail-buffered.conf mail-whois-lines.conf sendmail.conf shorewall.conf hostsdeny.conf iptables-allports.conf iptables-multiport-log.conf mail.conf mynetwatchman.conf sendmail-whois.conf
Para configurar los patrones a buscar y que acción aplicar tenemos el fichero /etc/fail2ban/jail.conf. En dicho fichero podemos encontrar en la sección DEFAULT las siguientes opciones:
- ignoreip: Listado de IPs separadas por espacios que no queremos que sean baneadas
- backend: Indicamos el método por el que se leerán los logs. Las opciones són:
- gamin: Mediante Gamin controla los cambios en los ficheros
- polling: Comprueba periódicamente los cambios en los ficheros, en este caso no es necesario tener librerías complementarias
- auto: Escoge por defecto gamin y si no puede usarlo para a polling
- findtime: Tiempo durante el cual se consideran los reintentos
- maxretry: Número máximo de reintentos fallidos dentro del findtime antes de ser baneado
A continuación de estos valors por defecto debemos añadir que quetemos monitorizar.
Por ejemplo, para proteger el daemon SSH mediante iptables y que nos avise por mail con el whois de la IP deberemos añadir lo siguiente en el fichero /etc/fail2ban/jail.conf:
[ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=22, protocol=tcp] sendmail-whois[name=SSH, dest=jordi@systemadmin.es david@systemadmin.es, sender=fail2ban@systemadmin.es] logpath = /var/log/secure maxretry = 5
Primero de todo, entre corchetes, definimos el nombre que le queremos dar a la combinación filtro-acción. A continuación las opciones són:
- enabled: Podemos activar y deactivar las reglas mediante esta opción. Para habilitar el monitor usamos un 1 y un 0 para deshabilitarlo
- filter: Filtro o conjunto de filtros presentes dentro de /etc/fail2ban/filter.d/ que buscaran patrones dentro del fichero de log
- actionAcción o conjunto de acciones a realizar en el caso que se cumplan las condiciones
- logpath: Fichero contra el cual se buscan los patrones
Además podemos sobrescribir las opciones generales, por ejemplo cambiar el maxretry por cualquier otro valor.
En el caso del ejemplo, se buscan intentos fallidos de login por SSH y las acciones que se producen són:
- iptables: Con las opciones “[name=SSH, port=22, protocol=tcp]” indicamos que cree una chain con el nombre SSH (fail2ban-SSH) que bloquee la IP que ha fallado por el puerto 22 protocolo TCP
- correo: Con las opciones “[name=SSH, dest=jordi@systemadmin.es david@systemadmin.es, sender=fail2ban@systemadmin.es]” indicamos el nombre identificativo del servicio (SSH), la o las direcciones destino y la dirección que queremos que aparezca como originante
En el caso que se produzca un baneo, se añade la IP en la chain bloqueando según los parámetros y nos avisará mediante un correo como el siguiente:
Hi, The IP 1.2.3.4 has just been banned by Fail2Ban after 5 attempts against SSH. Here are more information about 1.2.3.4: [Querying whois.arin.net] [Redirected to whois.apnic.net] [Querying whois.apnic.net] [whois.apnic.net] % [whois.apnic.net node-3] % Whois data copyright terms http://www.apnic.net/db/dbcopyright.html inetnum: 1.2.3.0 - 1.2.3.255 netname: Debogon-prefix descr: APNIC Debogon Project descr: APNIC Pty Ltd country: AU admin-c: GM85-AP tech-c: GM85-AP mnt-by: APNIC-HM mnt-routes: MAINT-AU-APNIC-GM85-AP status: ASSIGNED PORTABLE changed: hm-changed@apnic.net 20100122 changed: hm-changed@apnic.net 20100203 source: APNIC route: 1.2.3.0/24 descr: APNIC debogon project testing origin: AS9838 country: AU mnt-by: MAINT-AU-APNIC-GM85-AP changed: hm-changed@apnic.net 20100203 source: APNIC person: George Michaelson address: PO Box 2131 address: Milton, QLD 4064 address: Australia country: AU phone: +61-7-3858-3100 fax-no: +61-7-3858-3199 e-mail: ggm@apnic.net nic-hdl: GM85-AP mnt-by: MAINT-AU-APNIC-GM85-AP changed: ggm@apnic.net 20010306 changed: ggm@apnic.net 20010720 source: APNIC
5. January 2011 at 12:51 pm :
Excelente, la verdad que fail2ban es una muy buena herramienta para evitar ataques DoS al servicio SSH
5. January 2011 at 1:01 pm :
Me ha servido de mucho !!!
5. January 2011 at 3:06 pm :
Yo coincido con danyx, es una buena herramienta.
En nuestro caso lo usamos para evitar que nos hagan fuerza bruta a un vsftpd.
Un saludo
15. April 2011 at 7:16 pm :
Sólo una nota que me acaba de ocurrir, al trabajar con /var/log/secure el servidor ssh debe volcar ahí el log, esto se consigue configurando en /etc/ssh/sshd_config esto:
SyslogFacility AUTHPRIV
En una máquina que estaba configurando estaba como AUTH sólo y no estaba escribiendo el log.
Saludos
23. January 2013 at 6:22 pm :
Una pregunta, una vez que una ip haya sido bloqueado, como se puede hacer para desbloquearla?
26. September 2016 at 4:09 pm :
Al final siempre acabo mirandote.
Saludos Jordi.