Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fail2Ban utiliza Python para revisar los registros de acceso y detectar los intentos de intrusión
por fuerza bruta, creando reglas en el archivo de iptables para bloquear el acceso a ciertas
IP. En ocasiones, si miramos el registro de intentos de acceso SSH o FTP, veremos que es
enorme, pudiéndose producir ataques incluso cada segundo si no tomamos las medidas
adecuadas.
1. SSH
2. Servidores web como por ejemplo lighttpd, nginx y Apache
3. Servidores ftp como por ejemplo vsftpd, proftpd, pure-ftpd. wuftpd
4. En servidores de correo electrónico como por ejemplo Postfix, exim, squirrelmail,
Courier, dovecot, sasl, etc.
5. Servicios de proxy como Squid.
6. Otros servicios como Asterisk, FreeSWITCH, Drupal, WordPress, etc.
7. etc.
Fail2ban monitoriza y lee los logs del servidor en busca de patrones:
/var/log/auth.log
/var/registro/seguro
etc.
instalacion
CentOS/Red Hat (hay que usar un repositorio EPEL o tipo atrpms, rpmfusion, rpmforge, para
una versión actualizada)
Debian/Ubuntu:
Repositorio fail2ban
https://github.com/fail2ban/fail2ban
Arrancar el servicio:
inicio del servicio fail2ban
Ten en cuenta que el script de inicio / servicio del sistema no se instala automáticamente. Para
habilitar fail2ban como un servicio automático, simplemente copie el script para su distribución
desde el directorio de archivos a /etc/init.d. Ejemplo (en un sistema basado en Debian):
archivos cp/debian-initd /etc/init.d/fail2ban
actualización-rc.d fail2ban valores predeterminados
inicio del servicio fail2ban
fail2ban-client ping
El servidor respondió: pong
/etc/fail2ban
/etc/fail2ban/jail.local
Filtros
/etc/fail2ban/filtro.d/
La función de los filtros es definir las expresiones regulares para detectar autenticaciones
erróneas o ataques a nuestro equipo o servicio.
Una vez definida una expresión regular se irá comprobando que esta expresión no apareció en
ninguno de los registros de autenticación de nuestros servicios. En el caso que la expresión
regular apareciera en los logs se contabilizará un intento fallido de autenticación.
Si pretendemos usar los servicios predeterminados de fail2ban no será necesario modificar ni
crear ningún filtro.
Acciones:
/etc/fail2ban/action.d/
En esta ruta se guardan la totalidad de scripts que definen diferentes tipos de acciones a aplicar
cuando se detecta un intento de ataque, se arranca alguna de las jaulas, etc.
En principio no tendremos que modificar ni configurar el parámetro de este apartado. Fail2ban
ya trae multitud de acciones predefinidas.
En el fichero de configuración;
/etc/fail2ban/action.d/abuseipdb.conf
[ssh]
habilitado = verdadero
acción = iptables[nombre=SSH, puerto=22, protocolo=tcp]
abusoipdb[abuseipdb_apikey="XXX", abuseipdb_category="18,22"]
/etc/fail2ban/filter.d/apache-modsecurity.conf
[INCLUYE]
[Definition]
ignoreregex =
# https://github.com/SpiderLabs/ModSecurity/wiki/ModSecurity-2-Data-Formats
# Autor: Daniel Black
# Sergey G. Brester alias sebres (revisión, optimización)
https://www.abuseipdb.com/fail2ban.html
Ejemplo de reportes automaticos:
https://www.abuseipdb.com/user/52197
[Definición]
# Opción: nivel de registro
# Notas.: Configure la salida del nivel de registro.
# 1 = ERROR
# 2 = WARN
# 3 = INFO
# 4 = DEBUG
# Valores: NUM Predeterminado: 3
#
loglevel = 3
# Opción: logtarget
# Notas: Establecer el destino del registro. Esto podría ser un archivo, SYSLOG, STDERR o
STDOUT.
# Solo se puede especificar un destino de registro.
# Si cambia logtarget del valor predeterminado y está
# usando logrotate, también ajuste o deshabilite la rotación en el
# archivo de configuración correspondiente
# (por ejemplo, /etc/logrotate.d/fail2ban en sistemas Debian)
# Valores: archivo STDOUT STDERR SYSLOG Predeterminado: /var/log/fail2ban.log
#
logtarget = SYSLOG
# Opción: socket
# Notas: Establecer el archivo de socket. Esto se utiliza para comunicarse con el daemon. # No
elimine este archivo cuando se ejecute Fail2ban. No será posible
# comunicarse con el servidor después.
# Valores: ARCHIVO Predeterminado: /var/run/fail2ban/fail2ban.sock
#
socket = /var/run/fail2ban/fail2ban.sock
# Opción: pidfile
# Notas.: Establecer el archivo PID. Esto se usa para almacenar el ID de proceso del
servidor #fail2ban.
# Valores: ARCHIVO Predeterminado: /var/run/fail2ban/fail2ban.pid
#
pidfile = /var/run/fail2ban/fail2ban.pid
Ejemplo:
tiempo de baneo = 3d
Directivas
bantime = Número de segundos en el cual una dirección IP se prohibió (10 min
por defecto).
findtime = Cantidad de tiempo entre intentos de inicio de sesión, antes de que se
elimine el host. (predeterminado 10 min).
maxretry = Número de intentos que deben realizarse antes de que se aplique una
prohibición. (por defecto 3 intentos).
El resto de parámetros de la sección los adaptaremos en función de nuestras necesidades. El
significado de los parametros que nos podemos encontrar dentro de una seccion es el siguiente:
enable = Con los valores true y false activamos y desactivamos la protección que
ofrece fail2ban para un determinado servicio.
port = Definición de los puertos en que están trabajando los servicios que
queremos proteger
filter = Se define el nombre del filtro a aplicar para detectar intentos de
autenticación fallidos. Para ver la totalidad de los filtros disponibles se puede visitar
la ubicación /etc/fail2ban/filter.
logpath = Definición del log a monitorizar para detectar los intentos fallidos de
autenticación.
maxretry =Número de intentos de autenticación máximos fallidos antes de aplicar
una acción de bloqueo.
action =Para definir las acciones de bloqueo que se utilizarn en cada uno de los
servicios que queremos proteger. La totalidad de las acciones disponibles se
encuentran en la ubicación /etc/fail2ban/action.d
findtime = Definimos el tiempo que ha transcurrido para que el contador de
intentos fallidos de una determinada IP se resetee.
bantime = Definimos el tiempo en segundos que queremos bloquear una IP
determinada. Normalmente un valor de 600 segundos es más que apropiado.
Nota: Si la sección de un servicio no dispone de los parámetros incluidos en la tabla, entonces
toman se toman los parámetros por defecto configurados en la sección [DEFAULT].
A continuación, dentro de la sección [ACTIONS] localizamos y configuramos los siguientes
parámetros del fichero de configuración:
Parámetro a configurar para recibir avisos por e-mail
destemail =Introducimos la dirección de correo electrónico de gmail, hotmail, etc
en la que queremos recibir los avisos.
sendername = En este apartado figurará el nombre de la persona o servicio que
nos proporcionará el correo electrónico. En mi caso dejo el valor por defecto que
es:Fail2Ban
sender = En el apartado sender introducimos la dirección con la que fail2ban
originaron los emails. Como vimos al inicio de este apartado en mi caso tengo que
introducir: fail2ban@elhacker.net
mta =Tenemos que asegurar que este parámetro sea: sendmail
action = Dentro del archivo de configuración encontrará varios valores para este
campo. Para que se envíen las notificaciones podemos usar los siguientes valores:
%(action_mw)so %(action_mw)s
Una vez modificados la totalidad de parámetros guardamos los cambios y salimos del
fichero. Para que los cambios se hagan efectivos ejecutamos el siguiente comando para reiniciar
fail2ban.
También podemos usar (unir) fail2ban para banear ip automáticamente usando la API v2 de
CloudFlare. Encontrarás algunos manuales al respecto en inglés. Recuerda usar siempre la API
v2, porque la API v1 no funciona. Por lo que poco que he leído se pueden banear hasta 5.000
ip's (aunque el firewall son solo 20 reglas) usan IP Access Rules ya que el límite es mucho
mayor
3proxy.conf
apache-auth.conf
apache-badbots.conf
apache-botsearch.conf
apache-common.conf
apache-falsogooglebot.conf
apache-modsecurity.conf
apache-nohome.conf
apache-noscript.conf
apache-overflows.conf
apache-pass.conf
apache-shellshock.conf
assp.conf
asterisco.conf
bitwarden.conf
botsearch-common.conf
centreon.conf
común.conf
counter-strike.conf
courier-auth.conf
courier-smtp.conf
cyrus-imap.conf
directadmin.conf
domino-smtp.conf
palomar.conf
dropbear.conf
drupal-auth.conf
ejabberd-auth.conf
exim-common.conf
exim-spam.conf
exim.conf
freeswitch.conf
froxlor-auth.conf
gitlab.conf
grafana.conf
groupoffice.conf
gssftpd.conf
guacamole.conf
haproxy-http-auth.conf
horda.conf
kerio.conf
lighttpd-auth.conf
mongodb-auth.conf
monit.conf
murmurar.conf
mysqld-auth.conf
nagios.conf
nombrado-rechazado.conf
nginx-bad-request.conf
nginx-botsearch.conf
nginx-http-auth.conf
nginx-limit-req.conf
nsd.conf
openhab.conf
openwebmail.conf
oracleims.conf
pam-generic.conf
perdición.conf
php-url-fopen.conf
phpmyadmin-syslog.conf
portsentry.conf
postfix.conf
proftpd.conf
puro-ftpd.conf
qmail.conf
reincidente.conf
roundcube-auth.conf
compartir pantallad.conf
selinux-common.conf
selinux-ssh.conf
sendmail-auth.conf
sendmail-rechazar.conf
tamiz.conf
bofetada.conf
softethervpn.conf
sogo-auth.conf
solid-pop3d.conf
calamar.conf
squirrelmail.conf
sshd.conf
stunnel.conf
suhosin.conf
tine20.conf
traefik-auth.conf
uwimap-auth.conf
vsftpd.conf
webmin-auth.conf
wuftpd.conf
xinetd-fail.conf
znc-adminlog.conf
zoneminder.conf
Informes syslog
28 de mayo 12:09:34 ns2 fail2ban.jail: INFO Cárcel 'proftpd-iptables' detenido
28 de mayo 12:09:35 ns2 fail2ban.server: INFO Saliendo de Fail2ban
28 de mayo 12:09:36 ns2 fail2ban.server: INFO Cambio de registro destino a SYSLOG para
Fail2ban v0.8.10
28 de mayo 12:09:36 ns2 fail2ban.jail : INFO Creando nueva cárcel 'proftpd-iptables'
28 de mayo 12:09:36 ns2 fail2ban.jail : INFO Jail 'proftpd-iptables' usa pyinotify
28 de mayo 12:09:36 ns2 fail2ban.jail: INFO Se inició el backend 'pyinotify'
28 de mayo 12:09:36 ns2 fail2ban.filter: INFO Archivo de registro agregado = /var/log/auth.log
28 de mayo 12:09:36 ns2 fail2ban.filter: INFO Set maxRetry = 6
28 de mayo 12:09:36 ns2 fail2ban.filter: INFO Set findtime = 600
28 de mayo 12:09:36 ns2 fail2ban.actions: INFO Set banTime = 3600
28 de mayo 12:09:36 ns2 fail2ban.jail: INFO Jail 'proftpd-iptables' comenzó
Ejemplos
Reporte ip baneada:
Resultado:
Si aparecen errores con iptables en el registro:
restaurarcon -R -v /sbin/
[Consultando whois.ripe.net ]
[ whois.ripe.net ]
% Este es el servicio de consulta de la base de datos RIPE.
% Los objetos están en formato RPSL.
%
% La base de datos RIPE está sujeta a términos y condiciones.
% Consulte http://www.ripe.net/db/support/db-terms-conditions . pdf
ruta: 195.70.32.0/19
descr: GTS Hungría Ltd.
descr: HU
origen: AS5588
mnt-by: AS8358-MNT
fuente: RIPE # Filtrado
% Esta consulta fue atendida por RIPE Database Query Service versión 1.73.1 (DBC-WHOIS3)
Saludos,
Fail2Ban