Acerca de fail2ban (bloqueo proactivo de conexiones no deseadas) ...

Imagen de deathUser

Tema: 

Algunas veces había mencionado fail2ban como una herramienta de seguridad pro-activa, la había implementado hace bastante tiempo y decidí implementarla recientemente en un servidor que quedó fuera de la protección del firewall por un tema de infraestructura, así que activé el firewall que trae CentOS bloqueé todo y permití ssh y pues al momento vi cientos de requests inválidos de login con un montón de usuarios, por mencionar algunos: root, admin, administrator, oracle, ftp y un gran etc ...

Estuve indeciso entre algunas cosas, cambiar el puerto del ssh, activar autenticación con certificados, activar el port knocking, una combinación de todos ellos o activar una herramienta de seguridad pro-activa como fail2ban, bueno, algunos factores pesaron a la hora de la decisión de solamente instalar fail2ban y no una combinación de todas las opciones :D, entre ellas pereza :D ...

Bueno, lo primero fue instalarlo, como era en CentOS fue tan fácil como:

yum install fail2ban

Claro que hay que tener en cuenta que tenía instalado el REPO rpmforge cuyas instrucciones para instalarlo lo pueden encontrar en el COMO de EPE

Una vez instalado hay que configurarlo, la verdad que no hay mucho que configurar, el nivel de LOG, el archivo de log, en el archivo de configuración: /etc/fail2ban/fail2ban.conf

Luego activar que es lo que quieres controlar en el archivo: /etc/fail2ban/jail.conf

#Las IPs que no quieres bloquear, tu red interna por ejemplo :)
ignoreip = 127.0.0.1 192.168.0.0/24

# el tiempo de bloqueo en segundos.
bantime = 600

# el tiempo en segundos entre intentos
findtime = 600

# el máximo número de intentos
maxretry = 3

# el servicio a vigilar
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=death.user@midominio.com, sender=fail2ban@midominio.com]
logpath = /var/log/secure
maxretry = 2

En la parte del servicio tuve que hacer un par de cambios:
enabled = true que por default viene en false
obviamente los e-mail de la acción sendmail-whois (ya les contaré que es esto de las acciones)
logpath = /var/log/secure que por default viene /var/log/auth.log
maxretry = 2 que para mi caso es lo que quería.

Iniciar el servicio y listo...

service fail2ban start

Lo de las acciones es interesante ya que son configurables en archivos, por ejemplo la acción: sendmail-whois tiene un archivo de configuración: /etc/fail2ban/action.d/sendmail-whois.conf
En el cual tenemos un bloque por ejemplo:

actionban = printf %%b "Subject: [Fail2Ban] : banned
From: Fail2Ban <>
To: \n
Hi,\n
The IP has just been banned by Fail2Ban after
attempts against .\n\n
Here are more information about :\n
`/usr/bin/whois `\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f

Este bloque ejecuta el comando reemplazando los parámetros de la acción como < sender >, < dest >, y demás parámetros accesibles al fail2ban, un e-mail de un bloqueo luce algo como:

[quote]Hi,

The IP 210.143.109.72 has just been banned by Fail2Ban after
2 attempts against SSH.

Here are more information about 210.143.109.72:

[Querying whois.nic.ad.jp]
[whois.nic.ad.jp]
[ JPNIC database provides information regarding IP address and ASN. Its use ]
[ is restricted to network administration purposes. For further information, ]
[ use 'whois -h whois.nic.ad.jp help'. To only display English output, ]
[ add '/e' at the end of command, e.g. 'whois -h whois.nic.ad.jp xxx/e'. ]

Network Information:
a. [Network Number] 210.143.109.0/24
b. [Network Name] PROX
g. [Organization] Prox System Design Inc.
m. [Administrative Contact] TN6639JP
n. [Technical Contact] TN6639JP
p. [Nameserver] dns1.ixent.ne.jp
p. [Nameserver] dns2.ixent.ne.jp
[Assigned Date] 2001/10/16
[Return Date]
[Last Update] 2008/06/30 10:44:06(JST)

Less Specific Info.
----------
PROX SYSTEM DESIGN INC.
[Allocation] 210.143.108.0/22

More Specific Info.
----------
No match!!

Regards,

Fail2Ban[/quote]

Se me hace interesante, no le había parado mucha bola al asunto de las acciones, se ve que hay bastante poder ahí, así como también en los filtros que también son configurables usando expresiones regulares ;)

A mi me ha funcionado, espero le sea útil a alguien más ...

bye
;)

Comentarios

te agradezco, pero si es para

Imagen de Epe

te agradezco, pero si es para un sólo servicio, quizá deberías valorar usar pam_tally2 por ejemplo

otra sugerencia, desactiva el acceso directo de root

y otra más: instala "labrea" es fácil también.. pero eso en otro host. Y más divertido: un honeypot

Saludos
epe

EcuaLinux.com

+(593) 9 9924 6504

Servicios en Software Libre

veo que el pam_tally2 te

Imagen de deathUser

veo que el pam_tally2 te bloquea la cuenta que ha superado el número de intentos configurados, creo que eso podría ser contraproducente, y creo que desanima más un bloqueo del host atacante, lo del acceso de root creo que va casi por default :), lo que me pareció interesante de fail2ban y que no le había visto antes es lo configurable de las acciones y filtros, se puede hacer algunas cosas por ahí :D ...

Además al ver el e-mail que me llegó, me motivó a compartirlo, ya que me pareció interesante la info que nos adjunta y lo fácil que lo hace ...

Lo del honeypot es algo que he venido queriendo hacer desde hace algún tiempo, desde que en un análisis de vulnerabilidades me topé con un HOST que daba positivo a toda vulnerabilidad que se le ocurriese al nessus :D, creo que lo haré en una máquina virtual a ver que cosas se pueden encontrar por ahí, es interesante analizar lo que hacen los putos crackers cuando consiguen entrar a un host, algunos ni tipear comandos pueden :D ...

Gracias por las sugerencias ...

bye
;)

Gracias x el aporte,

Imagen de falcom

Gracias x el aporte, personalmente uso failtoban desde hace unos meses, tanto para apache, php, ssh, vsftp todo integrado con iptables, funciona perfecto incluso lo configure para q cualquier problema me notifique al mail... para mi es mas que suficiente...
thnx

pues como dije lo de las

Imagen de deathUser

pues como dije lo de las acciones personalizables fue de las cosas que me llamó la atención, una de estas la de notificar por e-mail, completamente personalizable de manera que puedes incluir tanta información como te sea de utilidad ... ;)

bye
;)

yo uso fail2ban bastante

Imagen de juandarcy2000

lo uso para denegar ssh invalidos, lo uso con dovecot para bloquear los login fallidos a los email via squirrel, ademas lo tengo implementado en varios servidores que tienen elastix denegando intentos fallidos a cuentas sip funciona bien, muy estable y los reportes son geniales se observa como bloquea el trafico de paises como japon, china, india que intentan registrar cuentas sip en los servidores. para mi fail2ban es lo mejor que se a creado en conjunto a iptables.

Excelente información death

Imagen de eliche

Excelente información death user, la verdad he estado buscando alguna herramienta como esta y ahora voy a hacer la prueba implementando :D, por cierto juandarcy2000, sería interesante que puedas aportar tus configuraciones de fail2ban para que la comunidad conozca mejor como usar esta utilidad, claro, si es que se puede ;)

Ing. Eliécer Tatés Montenegro
Neovoice
VoIP & IT Consulting
e-mail: eliecer.tates@neovoice.co / elitatmon@gmail.com

que bien que te sirva de

Imagen de deathUser

que bien que te sirva de algo, ese es el espíritu de compartir las cosas interesantes con las que nos topamos, en cuanto a las configuraciones, las que he usado son las que están puestas en el archivo de configuración que por cierto está bien documentado, en especial he usado la que está publicada en el POST, claro que algún rato podré agregar algo a las acciones, como por ejemplo devolverle la cortesía al atacante con un nmap a ver que tiene por allá :D

bye
;)

desde luego que posteare informacion al respecto

Imagen de juandarcy2000

El fail2ban tiene infinidad de usos, yo lo probe recien iniciado en linux hace 5 años, realmente estaba muy noob aun asi que lo probe y funciono pero no entendia bien su uso, fue con el transcurso del tiempo y al ver como trataban de conectarse a mi server que vi la necesidad de implementar esa utilidad, ademas esta documentado enormemente, lo bonito del fail2ban es que se basa en patrones de palabras en los logs asi que tiene muchas aplicaciones, el ya trae cantidad de ejemplo algunos hay que ajustarlos porque los logs no apuntan bien a su ruta absoluta, el filtro para asterisk debe ser aplicado con una version especifica de fail2ban por si lo han intentado usar con elastix o asterisk, veran que no banea asi que deben actualizar a toda costa el fail2ban a la version [quote]fail2ban-0.8.4-27.el5[/quote] ya que la version 0.8.3 no bloquea el asterisk pase case 2 dias revisando porque no baneaba los telefonos con claves mal escritas adrede, hasta que lei que para que funcionara con elastix debia ser version 0.8.4 si desean probar el filtro con elastix con gusto les posteo a continuacion los parametros.

para centos 5

los logs estan aqui deben revisar bien la ubicacion de los logs.
JAIL.CONF

[asterisk-iptables]
enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=emaildestino, sender=fail2banasterisk@dominio.com]
logpath = /var/log/asterisk/messages
maxretry = 3
bantime = 18000

si miran bien los logs apuntan a /var/log/asterisk/messages no es siempre asi si ese archivo messages no existe pueden probarlo con el archivo llamado /var/log/asterisk/full el problema con este archivo es que genera mucha informacion en este caso yo configure el archivo logger.conf que esta ubicado en /etc/asterisk/logger.conf y le agrege esta linea
[quote]messages => notice[/quote]
quedando asi

;
; Logging Configuration
;
; In this file, you configure logging to files or to
; the syslog system.
;
; For each file, specify what to log.
;
; For console logging, you set options at start of
; Asterisk with -v for verbose and -d for debug
; See 'asterisk -h' for more information.
;
; Directory for log files is configures in asterisk.conf
; option astlogdir
;
[logfiles]
;
; Format is "filename" and then "levels" of debugging to be included:
; debug
; notice
; warning
; error
; verbose
;
; Special filename "console" represents the system console
;
;debug => debug
;console => notice,warning,error
;console => notice,warning,error,debug
;messages => notice,warning,error
messages => notice
full => notice,warning,error,debug,verbose

;syslog keyword : This special keyword logs to syslog facility
;
;syslog.local0 => notice,warning,error
;

una vez terminado este proceso hay que recargar las configuraciones del asterisk, si no desean afectar a las llamadas actuales solo escriben
[quote][root@main asterisk]# asterisk -rx "logger reload"[/quote]
luego verificar si se creo el archivo /var/log/asterisk/messages y revisar si genera informacion importante

y el filtro
asterisk.conf
pegar este contenido


# Fail2Ban configuration file
#
#
# $Revision: 250 $
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
#before = common.conf

[Definition]

#_daemon = asterisk

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#

failregex = NOTICE.* .*: Registration from '.*' failed for '' - Wrong password
NOTICE.* .*: Registration from '.*' failed for '' - No matching peer found
NOTICE.* .*: Registration from '.*' failed for '' - Device does not match ACL
NOTICE.* .*: Registration from '.*' failed for '' - Username/auth name mismatch
NOTICE.* failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' (from )
NOTICE.* .*: Host failed MD5 authentication for '.*' (.*)
VERBOSE.* logger.c: -- .*IP/-.* Playing 'ss-noservice' (language '.*')

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

reiniciar servicio

[quote]service fail2ban restart[/quote]

comenten si funciono

saludos.

Hola aunque este tutorial es

Imagen de nino1511

Hola aunque este tutorial es muy viejo, hay un error en esta línea:
NOTICE.* failed to authenticate as '.*'$
Cuando debió ser:
NOTICE.* .*: failed to authenticate as '.*'$

Saludos

Nota: Estoy probando haber si me funca esto de bloquear login indeseados en mi elastix

Vamos Ecuador, si se puede

Páginas