El post que buscas se encuentra eliminado, pero este también te puede interesar

instalación y configuración de fail2ban

Anuncios

Debido a la publicación en un post anterior referente a: jail.conf: que es un archivo de configuración de Fail2ban, que sirve para evitar ataques de fuerza bruta. Con bloqueo de ips durante 15 minutos a cada 3 intentos.

EL POST ANTERIOR >>>>>>>AQUI<<<<<<

Muchas personas comentaron el post consultando que era fail2ban y viendo la necesidad acá publico este nuevo post de como instalar el fail2ban espero les sea de ayuda a todos.


fail2ban es un sistema de prevención de intrusiones basado en patrones y bastante flexible. Aca vamos a ver como instalarlo y configurar algunos filtro que no vienen por defecto.Es un programa escrito en Python la instalación no tiene mucho misterio.

Descarga según las DISTRIBUCIONES

Gentoo
Debian
Ubuntu
Fedora: yum install fail2ban
Red Hat/CentOS
Ipcop
Mandriva: activado en el repositorio oficial solo ejecutar "urpmi fail2ban"
openSUSE
Slackware

Ya instalado

Ya tenemos el fail2ban instalado en /usr/bin/fail2ban si todo ha ido bien, si hacemos un fail2ban -h deberíamos ver la ayuda, algo así como:

Fail2Ban v0.5.1 reads log file that contains password failure report
and bans the corresponding IP addresses using firewall rules.

-b start fail2ban in background.
-d start fail2ban in debug mode.
-c <FILE> read configuration file FILE.
-p <FILE> create PID lock in FILE.
-h display this help message.
-i <IP(s)> IP(s) to ignore.
-k kill a currently running Fail2Ban instance.
-r <VALUE> allow a max of VALUE password failure.
-t <TIME> ban IP for TIME seconds.
-v verbose. Use twice for greater effect.
-V print software version.


Todo genial, ya tenemos que localizar el fichero de configuración y adaptarlo a nuestras necesidades, con unos pequeños retoques estaremos listos..

El fichero en cuestión es el /etc/fail2ban.conf.example lo renombramos a .conf para poder trabajar sobre él..

mv /etc/fail2ban.conf.example /etc/fail2ban.conf

Ahora lo editamos con nuestro editor favorito y vamos recorriendo las lineas que tiene y cambiaremos las que más nos interesan:..

Bien, en este apartado, se nos da la posibilidad de correr fail2ban como daemon, cosa que nos interesa, por eso le decimos que "background=true".

# Option: background.
# Notes.: start fail2ban as a daemon. Output is redirect to logfile..
# Values: [true | false] Default: false.
#.
background = true

¿Dónde van a estar los logs?.

Tenemos dos opciones, o bien decirle que use syslog, y que todo lo que haga vaya al /var/log/messages o bien que cree su propio fichero /var/log/fail2ban.log, podeis hacer lo que creais conveniente, a mi personalmente me gusta tenerlo todo bien ordenado, por eso le digo que tenga su propio fichero de logs..

# Option: logtargets.
# Notes.: log targets. Space separated list of logging targets..
# Values: STDERR SYSLOG file Default: /var/log/fail2ban.log.
#
logtargets = /var/log/fail2ban.log

¿Cuántos intentos vamos a dejar antes de banear la ip?.

Por defecto vienen 3, personalmente creo que es un buen número de intentos, ¿quién no se ha equivocado dos veces al meter el nombre de usuario o contraseña? Por tanto, lo dejamos tal cual viene..


# Option: maxretry.
# Notes.: number of retrys before IP gets banned..
# Values: NUM Default: 3.
#.
maxretry = 3

¿Cuánto tiempo vamos a banear a la ip que intenta atacarnos?.

Por defecto vienen 600 segundos, que son 10 minutos, a mi juicio es poco tiempo, ya que le baneamos, que sea por un tiempo razonable y se canse, así que yo he optado por poner 36000 que son 10 horas.

# Option: bantime.
# Notes.: number of seconds an IP will be banned..
# Values: NUM Default: 600.
#.
bantime = 36000

Esta opción es bastante interesante, nos permite hacer excepciones con quién baneamos..

Por ejemplo si conectamos siempre desde una ip o desde varias ips fijas y sabemos que somos nosotros y nadie más, podemos decirle que a estas ips no las ignore, pese a que tengamos un día torpón y fallemos más de 3 veces el login..

Podemos también ignorar a una red entera indicando su máscara..

Yo por mi parte le he dicho que no banee a nadie de mi red privada y a otras dos ips desde las que conecto, pero por seguridad no puedo listarlas aquí..

# Option: ignoreip.
# Notes.: space separated list of IP's to be ignored by fail2ban..
# You can use CIDR mask in order to specify a range..
# Example: ignoreip = 192.168.0.1/24 123.45.235.65.
# Values: IP Default: 192.168.0.0/24.
#.
ignoreip = 192.168.1.0/24

Con estas dos opciones podemos decirle a nuestro sistema de que nos informe cuando fail2ban es iniciado, por defecto no viene nada, yo por mi parte le he dicho que me mande un mail avisandome de que se ha puesto en funcionamiento..

# Option: cmdstart.
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD Default:.
#.
cmdstart = echo "Se ha iniciado fail2ban" | mail -s "Fail2ban" manuelATtodo-linux.com..

Con esta opción es igual,pero para que nos informe si se ha parado el servicio, he creido conveniente que me avise al correo igualmente..

# Option: cmdend.
# Notes.: command executed once at the end of Fail2Ban.
# Values: CMD Default:.
#.
cmdend =echo "Se ha detenido fail2ban" | mail -s "Fail2ban" manuelATtodo-linux.com<

Para esta opción debeis tener corriendo un servidor de correo en el mismo host que el fail2ban, en mi caso lo tengo, así que sacaré partido de él.

Quiero que me avise al correo cuando se banea alguna ip, así que activo esta opción.

[MAIL]

# Option: enabled.
# Notes.: enable mail notification when banning an IP address..
# Values: [true | false] Default: false.
#.
enabled = true

Ahora tenemos que meter los datos de nuestro servidor de correo, los que vienen por defecto están bien..

# Option: host.
# Notes.: host running the mail server..
# Values: STR Default: localhost.
#.
host = localhost

# Option: port.
# Notes.: port of the mail server..
# Values: INT Default: 25.
#.
port = 25

Ahora rellenamos dos campos muy sencillos, que serán, el remitente del correo y a quién debe enviarlo, :.

# Option: from.
# Notes.: e-mail address of the sender..
# Values: MAIL Default: fail2ban.
#.
from = fail2ban

# Option: to.
# Notes.: e-mail addresses of the receiver. Addresses are space.
# separated..
# Values: MAIL Default: root.
#.
to = manuelATtodo-linux.com

El asunto del correo lo definimos en:.

# Option: subject.
# Notes.: subject of the e-mail..
# Tags: <ip> IP address.
# <failures> number of failures.
# <failtime> unix timestamp of the last failure.
# Values: TEXT Default: [Fail2Ban] Banned <ip>.
#.
subject = [Fail2Ban] Se ha baneado a <ip>..

Y ahora el cuerpo del correo que nos será enviado:.

# Option: message.
# Notes.: message of the e-mail..
# Tags: <ip> IP address.
# <failures> number of failures.
# <failtime> unix timestamp of the last failure
# <br> new line.
# Values: TEXT Default: .
#.
message = La ip <ip> ha sido baneada por Fail2Ban despues de

<failures> intentos fallidos...

Ahora nos metemos ya en la configuración de los servicios por los que fail2ban velará en nuestro sistema, el primero es para todos aquellos que tengan un servidor web Apache corriendo en la máquina, como es mi caso, pues tendré que entrar a retocar algunos parámetros de este apartado...

Lo primero es indicarle que sí tiene que activarse para Apache, eso se lo decimos en aquí..


[Apache]

# Option: enabled.
# Notes.: enable monitoring for this section..
# Values: [true | false] Default: false.
#.
enabled = true

Ahora le decimos de dónde tiene que recoger la información, pues del access_log, se lo indicamos:.

# Option: logfile.
# Notes.: logfile to monitor..
# Values: FILE Default: /var/log/httpd/access_log.
#.
logfile = /var/log/httpd/access_log

Ahora vienen las dos opciones que comentamos antes, si queremos que al iniciar el fail2ban para Apache se nos notifique de alguna forma, como se comentó antes, no lo vamos a volver a decir...

Siguiente paso, ¿qué ha de hacer iptables para banear una ip? ¿y cuando tenga que quitarle el ban? Pues eso lo indicamos en estas dos secciones que podemos dejar por defecto..

# Option: fwban.
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights..
# Tags: <ip> IP address.
# <failures> number of failures.
# <failtime> unix timestamp of the last failure.
# <bantime> unix timestamp of the ban time.
# Values: CMD.
# Default: iptables -I INPUT 1 -i eth0 -s <ip> -j DROP.
#.
fwban = iptables -I INPUT -s <ip> -j DROP

# Option: fwunban.
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights..
# Tags: <ip> IP address.
# <bantime> unix timestamp of the ban time.
# <unbantime> unix timestamp of the unban time.
# Values: CMD.
# Default: iptables -D INPUT -i eth0 -s <ip> -j DROP.
#.
fwunban = iptables -D INPUT -s <ip> -j DROP

¿Cómo va a reconocer fail2ban que tiene que bannear a alguien? Pues porque encuentre las determinadas palabras en los logs, eso lo definimos enyo he añadido la de user notfound).

# Option: failregex.
# Notes.: regex to match the password failure messages in the logfile..
# Values: TEXT Default: authentication failure|user .* not found.
#.
failregex = authentication failure|user .* not found|*. User notfound.

Se acabó la cosa para Apache, ahora entramos en la sección de nuestro servidor Ssh.

Le decimos que queremos habilitar el fail2ban para ssh:

[SSH]

# Option: enabled
# Notes.: enable monitoring for this section.
# Values: [true | false] Default: true
#
enabled = true

Ahora debemos indicarle, al igual que hicimos con Apache, donde ha de recoger los datos en los que basarse para banear ips, en mi caso, los logs del sshd están en /var/log/secure poned vuestro PATH a los logs, ¡¡no el mio!!

# Option: logfile
# Notes.: logfile to monitor.
# Values: FILE Default: /var/log/secure
#
logfile = /var/log/secure

Ahora vienen las opciones para notificarnos (si queremos) cuando se inicialice fail2ban y cuando se acabe, no las comentamos.

Pasamos directamente a las ordenes que se le pasaran a iptables tanto para banerar como para desbanear ips, las podemos dejar por defecto.

# Option: fwbanrule
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <failtime> unix timestamp of the last failure
# <bantime> unix timestamp of the ban time
# Values: CMD
# Default: iptables -I INPUT 1 -i eth0 -s <ip> -j DROP
#
fwban = iptables -I INPUT -s <ip> -j DROP

# Option: fwunbanrule
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <bantime> unix timestamp of the ban time
# <unbantime> unix timestamp of the unban time
# Values: CMD
# Default: iptables -D INPUT -i eth0 -s <ip> -j DROP
#
fwunban = iptables -D INPUT -s <ip> -j DROP

Y ya, solo tenemos que fijarnos en las palabras clave que ha de buscar fail2ban en los logs para determinar cuando sí y cuando no se está intentando el login

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile.
# Values: TEXT Default: Authentication failure|Failed password|Invalid user
#
failregex = Authentication failure|Failed password|Invalid user

Ya tenemos el fichero listo, lo guardamos y salimos.

Ahora solo debemos arracar el fail2ban como root y esperar los resultados, que no se harán esperar, vamos a hacer una prueba.

Me loggeo en una máquina cuya ip no está en la sección ignore y me pongo a fallar contra mi máquina:

(Protego las ips, por seguridad, no serán mostradas)

Anuncios

12 comentarios - instalación y configuración de fail2ban

@juanpablom85 +1
Mira la verdad q no use mucho linux, y por mi trabajo no creo hacerlo por ahora.. pero como Tatinga se esta convirtiendo en un diario virtual mas q un pagina de Inteligencia Colectiva, te dejo unos puntos por compartir buena data
Saludos
@due204 +1
Lo mando a fav y después lo miro bien
@kyd1980 +2
Buena info ! Gracias por compartir tus conocimientos.!

Saludos
@gonzaru77 +1
AAAAAAhhhhh. ahora esta mas claro. +10
@chipomegaman
Hola. Antes que nada gracias por el post. Sabés que estoy buscando por google porque no me envía el mail cuando se para o inicia sesión. Tengo puesto: cmdend =echo "Se ha detenido fail2ban" | mail -s "Fail2ban" mi@mail pero no pasa nada.
El correo lo tengo bien configurado, ya que probé en enviarme mails desde consola y sin problemas.
Nuevamente gracias, saludos!