LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.
Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

Fail2ban es un software de prevención de intrusiones de código abierto y libre desarrollado en el lenguaje de programación Python. Fail2ban funciona mediante el control de los archivos de registro como /var/log/pwdfail, /var/log/auth.log, /var/log/secure, etc... Y la prohibición de la dirección IP después de muchos intentos fallidos de contraseña. Se utiliza para actualizar las reglas del cortafuegos IPTables rechazando la dirección IP por una cantidad especificada de tiempo.

En este artículo se explica cómo instalar y configurar Fail2ban bajo RHEL, CentOS y Fedora. Fail2ban se ejecuta como un demonio que utiliza secuencias de comandos de Python para analizar los archivos de registro de intrusiones y se suma reglas personalizadas para el archivo de configuración iptables para prohibir el acceso a determinadas direcciones IP.

Instale Fail2ban en RedHat / CentOS / Fedora

Antes de ir para la instalación y configuración de Fail2Ban, me gustaría decir que la mayoría de los atacantes que intentan obtener acceso root a través de SSH. Por lo tanto, le recomiendo que preste mucha atención a las cosas como desactivar las conexiones ssh root y utilice par de claves ssh para la autenticación, etc.

Fail2Ban no es un paquete predeterminado, y por lo tanto no está disponible en sistemas Linux, por lo que tendrá que agregar y activar terceros repositorios RPMForge o repositorio EPEL en su máquina Linux. Una vez que haya agregado repositorio, instalarlo usando los siguientes comandos YUM.

# yum install fail2ban

Configuración por defecto de la sección Fail2Ban

El archivo de configuración Fail2Ban principal se encuentra en / etc/fail2ban/jail.conf. Así, ábralo con editor VI o cualquier editor que se sienta cómodo.

# vi /etc/fail2ban/jail.conf

También puedes ver el fichero sin los comentarios así: (para compararlo con la última parte de este artículo)

# cat /etc/fail2ban/jail.conf | grep -v '#'

Ahora, podrás ver sección default con algunas reglas básicas que se siguen por el mismo fail2ban. Si quiere añadir una capa extra de protección para su servidor, se puede personalizar la sección de cada regla de acuerdo a sus necesidades.

  [DEFAULT]

 # "Ignoreip" puede ser una dirección IP, una máscara CIDR o un host DNS.  Fail2ban no lo hará
 # Prohibir una serie que coincide con una dirección en esta lista.  Varias direcciones pueden ser
 # Define mediante separador de espacio.
 ignoreip = 127.0.0.1

 # "Bantime" es el número de segundos que un host está prohibido.
 bantime = 600

 # Un host está prohibida si se ha generado "maxretry" durante la última "findtime"
 # Segundos.
 findtime = 600

 # "Maxretry" es el número de fallos antes de una serie baneado.
 maxretry = 3 

Permítaseme describir cada sección de las reglas con su descripción y para qué usamos estas reglas.

ignoreip: IgnoreIP le permite crear una lista blanca ciertas direcciones IP de bloqueo. Aquí, usted puede especificar una lista de direcciones IP con espacio separado y asegúrese de incluir su dirección.

bantime: El número de segundos que un anfitrión se le prohibió el acceso al servidor. El valor predeterminado es de 600 (600 segundos = 10 minutos), es posible aumentar esta cifra a una hora o más si lo desea.

findtime: La cantidad de tiempo que el anfitrión tiene que entrar en el valor predeterminado de 10 minutos, esto significa que si un intento de acogida, y fallo.

maxretry: El número de intentos fallidos de inicio de sesión antes de que un equipo se bloquea para la duración del tiempo de prohibición.

Sección Configuración de ssh-iptables para Fail2Ban

La siguiente sección es la sección ssh-iptables por defecto y se activa de forma predeterminada. Por lo tanto, no es necesario realizar ningún cambio en esta sección

[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=root, sender=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.]
logpath  = /var/log/secure
maxretry = 5

Usted puede encontrar los detalles de cada regla se describen a continuación.

enabled: habilitada: Esta sección se refiere que la protección SSH está activado. Puede desactivarlo cambiando la palabra "true" a "false".

filter: Filtro: Esta sección por defecto establecida en sshd y se refiere al archivo de configuración (/etc/fail2ban/filter.d/sshd.conf) que contiene las reglas que fail2ban utiliza para encontrar coincidencias.

action: acción: Esta acción le dice a la fail2ban cuando debe prohibir una dirección IP coincidente n¡en un filtro en el archivo /etc/fail2ban/action.d/iptables.conf. Si el servidor tiene la configuración del correo, puede agregar la dirección de correo electrónico, donde fail2ban le envía una alerta por correo electrónico cada vez que se prohíbe una dirección IP. La sección del remitente se refiere al archivo /etc/fail2ban/action.d/sendmail-whois.conf.

logpath: La ruta del registro es la ubicación de los registros donde fail2ban hará un seguimiento.

maxretry: La máxima sección de reintentos es la misma definición que la opción por defecto que hemos hablado anteriormente.

Reinicio Servicio Fail2Ban

Una vez que haya realizado los cambios en el archivo de configuración fail2ban, a continuación, asegúrese siempre de que reinicie el servicio Fail2Ban.

# chkconfig --level 23 fail2ban on
# service fail2ban start
Starting fail2ban:                                         [  OK  ]

Verificación de reglas de iptables fail2ban

Compruebe las reglas que fail2ban añade en efecto dentro de la sección de la tabla IP.

# iptables -L

He hecho algunos intentos fallidos de inicio de sesión desde uno de nuestros servidores al servidor en el que instaló fail2ban y funciona. Usted ve la dirección IP prohibido de mi servidor.

Message from syslogd@localhost at Nov 23 13:57:53 ...
fail2ban.actions: WARNING [ssh-iptables] Ban 172.16.2.2
iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
fail2ban-SSH  tcp  --  anywhere             anywhere            tcp dpt:ssh
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp multiport dports 5901:5903,6001:6003
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain fail2ban-SSH (1 references)
target     prot opt source               destination
DROP all -- 172.16.2.2 anywhere
RETURN     all  --  anywhere             anywhere

Para ver las actuales intentos fallidos de inicio de sesión ssh, ejecute el siguiente comando, se mostrará una lista de intentos fallidos de intentos por los anfitriones.

# cat /var/log/secure | grep 'Failed password' |  sort | uniq -c

1 Nov 19 16:53:37 localhost sshd[28185]: Failed password for root from 172.16.25.125 port 1302 ssh2 1 Nov 23 13:57:43 localhost sshd[19079]: Failed password for root from 172.16.2.2 port 57599 ssh2 1 Nov 23 13:57:46 localhost sshd[19079]: Failed password for root from 172.16.2.2 port 57599 ssh2 1 Nov 23 13:57:50 localhost sshd[19079]: Failed password for root from 172.16.2.2 port 57599 ssh2 1 Oct 18 14:11:58 localhost sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:03 localhost sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:11 localhost sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:16 localhost sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:22 localhost sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:28 localhost sshd[8711]: Failed password for root from 172.16.18.249 port 4763 ssh2 1 Oct 18 14:12:47 localhost sshd[10719]: Failed password for root from 172.16.18.249 port 4774 ssh2

Quite la dirección IP de Fail2Ban

Para quitar una dirección IP prohibida en las reglas IPTables fail2ban. Ejecute el siguiente comando.

# iptables -D fail2ban-ssh 1

Para cualquier información adicional, visite el sitio oficial Fail2ban página. Si tiene alguna pregunta algún comentario sobre este artículo, por favor nos dice a través de los comentarios.

Este es un ejemplo del fichero /etc/fail2ban/jail.conf

 


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

# La definición DEFAULT permite una configuración global de las opciones. Ellos pueden ser anulados
# en cada cárcel después.

[DEFAULT]

# "ignoreip" puede ser una dirección IP, una máscara CIDR o un host DNS. Fail2ban no 
# prohibirá un host que coincida con una dirección en esta lista. Varias direcciones pueden ser
# definidas usando el separador: comás o espacios
ignoreip =127.0.0.1192.168.0.99

# "bantime" es la cantidad de segundos que un host está prohibido.
bantime  =600

# Un host está prohibido si ha llegado al "maxretry" durante el último "tiempo de búsqueda"
# segundos.
findtime  =600

# "maxretry" es la cantidad de fallos antes de que un host sea prohibido.
maxretry =3

# "backend" especifica el backend utilizado para obtener la modificación de archivos. Disponible
# Las opciones son "gamin", "polling" y "auto". Esta opción puede ser anulada en
# cada cárcel también (use "gamin" para una cárcel y "polling" para otra).
#
# gamin:    requiere que se instale Gamin (un monitor de alteración de archivos). Si Gamin
#           no está instalado, Fail2ban usará sondeo.
# polling:  utiliza un algoritmo de sondeo que no requiere bibliotecas externas.
# auto:     elegirá Gamin si está disponible y, de lo contrario, sondeará.


backend = auto


# Esta cárcel corresponde a la configuración estándar en Fail2ban 0.6.
# La acción de whois por correo envía un correo electrónico de notificación con una solicitud whois
# en el cuerpo.

[ssh-iptables]

enabled  =true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo., sender=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.]
logpath  = /var/log/messages
maxretry =5

[proftpd-iptables]

enabled  =true
filter   = proftpd
action   = iptables[name=ProFTPD, port=ftp, protocol=tcp]
           sendmail-whois[name=ProFTPD, dest=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.]
logpath  = /var/log/messages
maxretry =6

# Esta cárcel obliga al backend a "sondear".

[sasl-iptables]

enabled  =true
filter   = sasl
backend  = polling
action   = iptables[name=sasl, port=smtp, protocol=tcp]
           sendmail-whois[name=sasl, dest=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.]
logpath  = /var/log/mail

# Aquí usamos TCP-Wrappers en lugar de Netfilter / Iptables. "ignoreregex" es
# utilizado para evitar la prohibición del usuario "myuser".

[ssh-tcpwrapper]

enabled     =false
filter      = sshd
action      = hostsdeny
              sendmail-whois[name=SSH, dest=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.]
ignoreregex = for myuser from
logpath     = /var/log/messages

# Esta cárcel demuestra el uso de comodines en "logpath".
# Además, es posible dar otros archivos en una nueva línea.

[apache-tcpwrapper]

enabled  =true
filter   = apache-auth
action   = hostsdeny
logpath  = /var/log/apache2/error_log
maxretry =6

# La ruta hosts.deny se puede definir con el argumento "file" si no está
# en / etc.

[postfix-tcpwrapper]

enabled  =true
filter   = postfix
action   = hostsdeny
           sendmail[name=Postfix, dest=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.]
logpath  = /var/log/mail
bantime  =300

# Do not ban anybody. Just report information about the remote host.
# A notification is sent at most every 600 seconds (bantime).

[vsftpd-notification]

enabled  =false
filter   = vsftpd
action   = sendmail-whois[name=VSFTPD, dest=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.]
logpath  = /var/log/messages
maxretry =5
bantime  =1800

# Same as above but with banning the IP address.

[vsftpd-iptables]

enabled  =false
filter   = vsftpd
action   = iptables[name=VSFTPD, port=ftp, protocol=tcp]
           sendmail-whois[name=VSFTPD, dest=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.]
logpath  = /var/log/messages
maxretry =5
bantime  =1800

# Ban hosts which agent identifies spammer robots crawling the web
# for email addresses. The mail outputs are buffered.

[apache-badbots]

enabled  =true
filter   = apache-badbots
action   = iptables-multiport[name=BadBots, port="http,https"]
           sendmail-buffered[name=BadBots, lines=5, dest=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.]
logpath  = /var/log/apache2/access_log
bantime  =172800
maxretry =1

[courierpop3]

enabled  =true
port     = pop3
filter   = courierlogin
action   = iptables[name=%(__name__)s, port=%(port)s]
logpath  = /var/log/mail
maxretry =5


[courierimap]

enabled  =true
port     = imap2
filter   = courierlogin
action   = iptables[name=%(__name__)s, port=%(port)s]
logpath  = /var/log/mail
maxretry =5

No estás registrado para postear comentarios