Seguridad · 7 min read · Dec 30, 2025
Prevención de Ataques de Fuerza Bruta con Fail2ban en OpenSUSE 10.3
Prevención de Ataques de Fuerza Bruta con Fail2ban en OpenSUSE 10.3
Versión 1.0
Autor: Falko Timme
En este artículo mostraré cómo instalar y configurar fail2ban en un sistema OpenSUSE 10.3. Fail2ban es una herramienta que observa los intentos de inicio de sesión en varios servicios, por ejemplo, SSH, FTP, SMTP, Apache, etc., y si encuentra intentos de inicio de sesión fallidos una y otra vez desde la misma dirección IP o host, fail2ban detiene más intentos de inicio de sesión desde esa dirección IP/host bloqueándola con una regla de firewall de iptables.
¡Este documento se proporciona sin garantía de ningún tipo! Quiero decir que esta no es la única forma de configurar un sistema así. Hay muchas maneras de lograr este objetivo, pero este es el camino que elijo. No emito ninguna garantía de que esto funcione para ti.
1 Nota Preliminar
Fail2ban es similar a DenyHosts que cubrí en este tutorial: https://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts, pero a diferencia de DenyHosts que se centra en SSH, fail2ban se puede configurar para monitorear cualquier servicio que escriba intentos de inicio de sesión en un archivo de registro, y en lugar de usar /etc/hosts.deny solo para bloquear direcciones IP/hosts, fail2ban puede usar iptables y /etc/hosts.deny.
En este ejemplo, configuraré fail2ban para monitorear intentos de inicio de sesión en el servidor SSH, el servidor Proftpd, intentos de inicio de sesión en sitios web protegidos por .htaccess/.htpasswd, a Courier POP3 y Courier IMAP, y a SASL (para enviar correos electrónicos). Instalaré el paquete fail2ban que está disponible para OpenSUSE 10.3. Viene con una configuración predeterminada, pero desafortunadamente esa configuración no funciona del todo para la mayoría de los servicios mencionados anteriormente. Por lo tanto, crearé una configuración personalizada de fail2ban que he probado y que funciona para mí.
2 Instalando fail2ban
Fail2ban está disponible en el repositorio de Packman, así que primero debemos habilitarlo:
yast2 En YaST, ve a Software > Repositorios de la Comunidad:

Luego activa el Repositorio de Packman y presiona [Finalizar]:

Sal de YaST después:

Después, fail2ban se puede instalar de la siguiente manera:
yast2 -i fail2banLuego debemos crear los enlaces de inicio del sistema para fail2ban y comenzarlo:
chkconfig –add fail2ban
/etc/init.d/fail2ban start
Encontrarás todos los archivos de configuración de fail2ban en el directorio /etc/fail2ban.
3 Configurando fail2ban
El comportamiento predeterminado de fail2ban se configura en el archivo /etc/fail2ban/jail.conf. Échale un vistazo, no es difícil de entender. Hay una sección [DEFAULT] que se aplica a todas las demás secciones a menos que las opciones predeterminadas sean anuladas en las otras secciones.
Explico algunas de las opciones de configuración aquí:
- ignoreip: Esta es una lista separada por espacios de direcciones IP que no pueden ser bloqueadas por fail2ban. Por ejemplo, si la computadora desde la que te conectas al servidor tiene una dirección IP estática, es posible que desees listarla aquí.
- bantime: Tiempo en segundos que un host está bloqueado si fue capturado por fail2ban (600 segundos = 10 minutos).
- maxretry: Máx. número de intentos de inicio de sesión fallidos antes de que un host sea bloqueado por fail2ban.
- filter: Se refiere al archivo de filtro apropiado en /etc/fail2ban/filter.d.
- action: Se refiere al archivo de acción apropiado en /etc/fail2ban/action.d.
- logpath: El archivo de registro que fail2ban verifica para intentos de inicio de sesión fallidos.
Así es como se ve mi archivo /etc/fail2ban/jail.conf:
vi /etc/fail2ban/jail.conf| # Archivo de configuración de Fail2Ban # # Autor: Cyril Jaquier # # $Revision: 611 $ # # El DEFAULT permite una definición global de las opciones. Pueden ser anuladas # en cada cárcel después. [DEFAULT] # "ignoreip" puede ser una dirección IP, una máscara CIDR o un host DNS. Fail2ban no # baneará un host que coincida con una dirección en esta lista. Se pueden definir varias # direcciones usando un separador de espacio. ignoreip = 127.0.0.1 192.168.0.99 # "bantime" es el número de segundos que un host es baneado. bantime = 600 # Un host es baneado si ha generado "maxretry" durante el último "findtime" # segundos. findtime = 600 # "maxretry" es el número de fallos antes de que un host sea baneado. maxretry = 3 # "backend" especifica el backend utilizado para obtener modificaciones de archivos. Las opciones # disponibles son "gamin", "polling" y "auto". Esta opción puede ser anulada en # cada cárcel también (usa "gamin" para una cárcel y "polling" para otra). # # gamin: requiere que Gamin (un monitor de alteraciones de archivos) esté instalado. Si Gamin # no está instalado, Fail2ban usará polling. # polling: usa un algoritmo de polling que no requiere bibliotecas externas. # auto: elegirá Gamin si está disponible y polling de lo contrario. backend = auto # Esta cárcel corresponde a la configuración estándar en Fail2ban 0.6. # La acción mail-whois 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, [email protected], [email protected]] logpath = /var/log/messages maxretry = 5 [proftpd-iptables] enabled = true filter = proftpd action = iptables[name=ProFTPD, port=ftp, protocol=tcp] sendmail-whois[name=ProFTPD, [email protected]] logpath = /var/log/messages maxretry = 6 # Esta cárcel obliga al backend a "polling". [sasl-iptables] enabled = true filter = sasl backend = polling action = iptables[name=sasl, port=smtp, protocol=tcp] sendmail-whois[name=sasl, [email protected]] logpath = /var/log/mail # Aquí usamos TCP-Wrappers en lugar de Netfilter/Iptables. "ignoreregex" se # utiliza para evitar banear al usuario "myuser". [ssh-tcpwrapper] enabled = false filter = sshd action = hostsdeny sendmail-whois[name=SSH, [email protected]] 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 puede definirse con el argumento "file" si no está # en /etc. [postfix-tcpwrapper] enabled = true filter = postfix action = hostsdeny sendmail[name=Postfix, [email protected]] logpath = /var/log/mail bantime = 300 # No banees a nadie. Solo informa sobre la información del host remoto. # Se envía una notificación como máximo cada 600 segundos (bantime). [vsftpd-notification] enabled = false filter = vsftpd action = sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/messages maxretry = 5 bantime = 1800 # Igual que arriba pero con el baneo de la dirección IP. [vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/messages maxretry = 5 bantime = 1800 # Banea hosts que el agente identifica como robots spammers rastreando la web # en busca de direcciones de correo electrónico. Las salidas de correo están en búfer. [apache-badbots] enabled = true filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, [email protected]] 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 |
Mi computadora cliente tiene la dirección IP estática 192.168.0.99, y como no quiero ser bloqueado, la he agregado a la lista ignoreip.
Quiero controlar los intentos de inicio de sesión en SSH, Apache, Proftpd, Courier-POP3, Courier-IMAP y Sasl, así que he configurado enabled como true para estos servicios y como false para todos los demás servicios. Ten en cuenta que algunos servicios como SSH pueden ser bloqueados ya sea por iptables o por TCPWrappers (/etc/hosts.deny). Decide por ti mismo qué método prefieres.
Asegúrate de reemplazar la dirección de correo electrónico [email protected] con tu propia dirección de correo electrónico para que te notifiquen cuando alguien sea bloqueado por fail2ban.
Si comparas el archivo con el predeterminado /etc/fail2ban/jail.conf, también notarás que he cambiado algunos archivos de registro porque los archivos de registro en el predeterminado /etc/fail2ban/jail.conf no son correctos para OpenSUSE 10.3.
Cada vez que modificamos la configuración de fail2ban, debemos reiniciar fail2ban, así que esto es lo que hacemos ahora:
/etc/init.d/fail2ban restartEso es todo. Fail2ban registra en /var/log/fail2ban.log, así que puedes verificar ese archivo para averiguar si/qué hosts fueron bloqueados. Si un host fue bloqueado por fail2ban, se verá así:
2007-10-07 17:49:09,466 fail2ban.actions: WARNING [apache-tcpwrapper] Ban 1.2.3.4
2007-10-07 18:08:33,213 fail2ban.actions: WARNING [sasl-iptables] Ban 1.2.3.4
2007-10-07 18:26:37,769 fail2ban.actions: WARNING [courierlogin] Ban 1.2.3.4
2007-10-07 18:39:06,765 fail2ban.actions: WARNING [courierimap] Ban 1.2.3.4
También puedes verificar tu firewall para ver si hay hosts actualmente bloqueados. Simplemente ejecuta
iptables -L Para servicios que utilizan TCPWrappers para bloquear hosts, echa un vistazo a /etc/hosts.deny.
Enlaces
- Fail2ban: http://www.fail2ban.org
- OpenSUSE: http://www.opensuse.org
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.