miércoles, 5 de mayo de 2010

Fail2Ban: configurar para sshd

1. ¿Qué es un IDS?.

Definición: Un sistema de detección de intrusos (o IDS de sus siglas en inglés Intrusion Detection System) es un programa usado para detectar accesos no autorizados a un computador o a una red. Estos accesos pueden ser ataques de habilidosos hackers, o de Script Kiddies que usan herramientas automáticas

2. Instalación Fail2ban

En este caso solo hemos tenido que ejecutar:

[root@sol10]: yum install fail2ban

3. Configuración

Vamos a configurar fail2ban solo para sshd, pero podríamos hacerlo para Apache, postfix, sendmail, etc… por lo que omitiremos los archivos de configuración que no sean para ssh.

Esquema de directorios

/etc/fail2ban/
├── action.d
│ ├── dummy.conf
│ ├── hostsdeny.conf
│ ├── iptables.conf
│ ├── mail-whois.conf
│ ├── mail.conf
│ └── shorewall.conf
├── fail2ban.conf
├── filter.d
│ ├── apache-auth.conf
│ ├── apache-noscript.conf
│ ├── couriersmtp.conf
│ ├── postfix.conf
│ ├── proftpd.conf
│ ├── qmail.conf
│ ├── sasl.conf
│ ├── sshd.conf
│ └── vsftpd.conf
└── jail.conf

Viendo el esquema de directorios podemos imaginar que primero filtra los datos que coge de los logs y luego en función de lo que obtenga ejecuta la acción correspondiente.

3.2 fail2ban.conf

Este archivo es el principal del programa, podemos ver el nivel de log y demás. En principio no hay que tocar nada.

Si quisiéramos cambiar el nivel de log para que cree un archivo más detallado lo podemos hacer con:

[root@sol10]: fail2ban-client set loglevel 1

3.3 sshd.conf

Aquí pongo parte del archivo con las modificaciones que hemos hecho:

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 617 $
#

# The DEFAULT allows a global definition of the options. They can be override
# in each jail afterwards.

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.

ignoreip = 192.168.1.0/24

# "bantime" is the number of seconds that a host is banned.
bantime = 36000

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 6000

# "maxretry" is the number of failures before a host get banned.
maxretry = 3

# "backend" specifies the backend used to get files modification. Available
# options are "gamin", "polling" and "auto". This option can be overridden in
# each jail too (use "gamin" for a jail and "polling" for another).
#
# gamin: requires Gamin (a file alteration monitor) to be installed. If Gamin
# is not installed, Fail2ban will use polling.
# polling: uses a polling algorithm which does not require external libraries.
# auto: will choose Gamin if available and polling otherwise.
backend = auto

# This jail corresponds to the standard configuration in Fail2ban 0.6.
# The mail-whois action send a notification e-mail with a whois request
# in the body.

[ssh-iptables]

enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=root, sender=fail2ban@mail.com]
logpath = /var/log/secure <-LO MAS IMPORTANTE maxretry = 3 En este caso lo hemos configurado para que no tenga en cuenta los ataques provenientes de nuestra red con el parámetro ignoreip. Otro parámetro interesante es el bantime, que es el tiempo en segundos que baneará una ip. A continuación pasamos a habilitar la auditación de los logs de ssh y para eso ponemos el enable a true y le indicamos el path de los logs que tiene que mirar para saber quien está atacando al equipo. 3.4 filter.d/sshd.conf

Una vez que tenemos configurado el servicio para que vigile el ssh ahora vamos a ver el filtro que aplica (no tenemos que cambiar nada):

failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from \s*$
^%(__prefix_line)sFailed [-/\w]+ for .* from (?: port \d*)?(?: ssh\d*)?$
^%(__prefix_line)sROOT LOGIN REFUSED.* FROM \s*$
^%(__prefix_line)s[iI](?:llegalnvalid) user .* from \s*$
^%(__prefix_line)sUser \S+ from not allowed because not listed in AllowUsers$
^%(__prefix_line)srefused connect from \S+ \(\)\s*$
^%(__prefix_line)sAddress .* POSSIBLE BREAK-IN ATTEMPT\s*$


Aquí vemos, entre otras, que en los logs busca cadenas como: “Authentication failure” ó “sROOT LOGIN REFUSED”.

Si queremos añadir nuevas reglas podemos hacerlo con el comando fail2ban-regex:

[root@sol10]: fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed' 'authentication failed'

[root@sol10]: fail2ban-regex '18-07-2008 12:13:01 [1.2.3.4] authentication failed' '\[\] authentication failed'

3.5 action.d/iptables.conf

En este archivo se definen las reglas que se van a llevar a cabo según el tipo de servicio, para ssh que es nuestro caso agregará en iptables unas reglas (no hay que tocar nada).

# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: IP address
# number of failures
#

fail2ban bloqueando ip ssh

Aquí vemos como fail2ban ha agregado una regla a iptables y ha bloqueado una ip tras 3 intentos de logeo fallidos.
Publicar un comentario
Related Posts Plugin for WordPress, Blogger...