Tutoriales y Manuales
Entradas Mensuales
-
►
2024
(Total:
1019
)
- ► septiembre (Total: 50 )
-
►
2023
(Total:
710
)
- ► septiembre (Total: 65 )
-
►
2022
(Total:
967
)
- ► septiembre (Total: 72 )
-
►
2021
(Total:
730
)
- ► septiembre (Total: 56 )
-
►
2020
(Total:
212
)
- ► septiembre (Total: 21 )
-
►
2019
(Total:
102
)
- ► septiembre (Total: 14 )
-
►
2017
(Total:
231
)
- ► septiembre (Total: 16 )
-
►
2016
(Total:
266
)
- ► septiembre (Total: 38 )
-
►
2015
(Total:
445
)
- ► septiembre (Total: 47 )
-
▼
2014
(Total:
185
)
- ► septiembre (Total: 18 )
-
▼
mayo
(Total:
9
)
- Instalar y configurar Fail2ban
- Floodmon: alerta, detecta y mitiga ataques SYN Flood
- Actualizaciones de seguridad para Windows XP hasta...
- eBay recomienda obligatoriamente cambiar la contra...
- Internet Machine: Documental sobre el DataCenter d...
- Jornadas X1RedMasSegura Madrid 2014
- Conan Mobile: aplicación gratuita para mirar la se...
- Novedades administrativas en el servidor Team Speak 3
- Tutorial Cheat Engine: Nivel Avanzado
-
►
2013
(Total:
100
)
- ► septiembre (Total: 3 )
-
►
2011
(Total:
7
)
- ► septiembre (Total: 1 )
Blogroll
Etiquetas
Entradas populares
-
Después de ver qué es una vCPU y la diferencia entre núcleos (cores) e hilos en los procesadores, pasamos a explicar toda la nomenclatura d...
-
Pese a que Gemini ofrece multitudes de opciones, recientemente, se ha dado a conocer una situación fuera de lo común. Hace unos días, un es...
-
La seguridad en dispositivos móviles es cada vez más crucial, especialmente ante el crecimiento de aplicaciones maliciosas diseñadas para v...
Instalar y configurar Fail2ban
Fail2Ban utiliza Python para revisar los logs 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 IPs. En ocasiones, si miramos el log de intentos de acceso SSH o FTP, veremos que es inmenso, pudiéndose producir ataques incluso cada segundo si no tomamos las medidas adecuadas.
Su principal función es securizar un servidor del siguiente modo:
- Evitando accesos indeseados a nuestro equipo o servidor.
- Evitando ataques de fuerza bruta para que un tercero averigüe nuestra contraseña o tumbe el servidor.
Fail2ban viene preconfigurado de forma predeterminada para poder usarse en multitud de servicios como por ejemplo los siguientes:
- SSH
- Servidores web como por ejemplo lighttpd, nginx y Apache
- Servidores ftp como por ejemplo vsftpd, proftpd, pure-ftpd. wuftpd
- En servidores de email como por ejemplo Postfix, exim, squirrelmail, Courier, dovecot, sasl, etc.
- Servicios de proxy como Squid.
- Otros servicios como Asterisk, FreeSWITCH, Drupal, WordPress, etc.
- etc.
- /var/log/auth.log
- /var/log/secure
- etc
Instalación
sudo yum install epel-release
yum install fail2ban
sudo systemctl enable fail2banDebian/Ubuntu:
apt-get update && apt-get -y upgrade
apt-get install fail2ban
Instalación manual desde las fuentes (código fuente)
cd /usr/src
wget https://codeload.github.com/fail2ban/fail2ban/tar.gz/0.8.13
tar xvzf fail2ban-0.8.13.tar.gz
cd fail2ban-0.8.13
python setup.py install
cp /usr/src/fail2ban-0.8.13/files/redhat-initd /etc/init.d/fail2ban
chmod 755 /etc/init.d/fail2ban
git clone https://github.com/fail2ban/fail2ban.gitcd fail2bansudo python setup.py install
service fail2ban start
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 copia el script para su distribución desde el directorio de archivos a /etc/init.d. Ejemplo (en un sistema basado en Debian):
cp files/debian-initd /etc/init.d/fail2ban
update-rc.d fail2ban defaults
service fail2ban start
Comprobar si está en ejecución:
fail2ban-client -VPara ver si está realmente funcionando y ver las jaulas:
service fail2ban statusComprobar si responde:
Fail2ban (pid 21740) is running...
Status
|- Number of jail: 1
`- Jail list: proftpd-iptables
fail2ban-client ping
Server replied: pong
Estructura de Directorios Fail2ban
/etc/fail2banArchivo de configuración de jaulas (la versión personalizable de jail.conf)
/etc/fail2ban/jail.local
Filtros
/etc/fail2ban/filter.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 aparezca en ninguno de los logs de autenticación de nuestros servicios. En el caso que la expresión regular aparezca en los logs se contabilizará un intento fallido de autenticación.
Si pretendemos usar los servicios estándares 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 parámetro de este apartado. Fail2ban ya trae predefinidas multitud de acciones.
Integración con la API de AbuseIPDB
/etc/fail2ban/action.d/abuseipdb.conf
Debes añadir dos parámetros obligatorios:
- API Key --> abuseipdb_apikey="XXX"
- Categoría Abuso --> abuseipdb_category="XX" (ejemplo 18 (Brute Force Attacks) 22 (SSH)
[ssh]enabled = trueaction = iptables[name=SSH, port=22, protocol=tcp]abuseipdb[abuseipdb_apikey="XXX", abuseipdb_category="18,22"]
Ejemplo añadir reporte mod_security2 de Apache
[modsec]/etc/fail2ban/filter.d/apache-modsecurity.conf
enabled = true
filter = modsec
action = abuseipdb[abuseipdb_apikey=xxx, abuseipdb_category=15,21]
iptables-multiport[name=ModSec, port="http,https"]
logpath = /var/log/httpd/modsec_audit.log
bantime = 86400
maxretry = 3
# Fail2Ban apache-modsec filter
#
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# apache-common.local
before = apache-common.conf
[Definition]
failregex = ^%(_apache_error_client)s(?: \[client [^\]]+\])? ModSecurity:\s+(?:\[(?:\w+ \"[^\"]*\"|[^\]]*)\]\s*)*Access denied with code [45]\d\d
ignoreregex =
# https://github.com/SpiderLabs/ModSecurity/wiki/ModSecurity-2-Data-Formats
# Author: Daniel Black
# Sergey G. Brester aka sebres (review, optimization)
Reiniciar para cargar la nueva configuración:
fail2ban-client reload
Instrucciones completas
Fichero Configuración principal /etc/fail2ban/fail2ban.conf
[Definition]
# Option: loglevel
# Notes.: Set the log level output.
# 1 = ERROR
# 2 = WARN
# 3 = INFO
# 4 = DEBUG
# Values: NUM Default: 3
#
loglevel = 3
# Option: logtarget
# Notes.: Set the log target. This could be a file, SYSLOG, STDERR or STDOUT.
# Only one log target can be specified.
# If you change logtarget from the default value and you are
# using logrotate -- also adjust or disable rotation in the
# corresponding configuration file
# (e.g. /etc/logrotate.d/fail2ban on Debian systems)
# Values: STDOUT STDERR SYSLOG file Default: /var/log/fail2ban.log
#
logtarget = SYSLOG
# Option: socket
# Notes.: Set the socket file. This is used to communicate with the daemon. Do
# not remove this file when Fail2ban runs. It will not be possible to
# communicate with the server afterwards.
# Values: FILE Default: /var/run/fail2ban/fail2ban.sock
#
socket = /var/run/fail2ban/fail2ban.sock
# Option: pidfile
# Notes.: Set the PID file. This is used to store the process ID of the
# fail2ban server.
# Values: FILE Default: /var/run/fail2ban/fail2ban.pid
#
pidfile = /var/run/fail2ban/fail2ban.pid
Fichero Configuración "Jaulas" (Jail) /etc/fail2ban/jail.conf
Se puede especificar parámetros como bantime en días (d) semanas (w)Ejemplo:
bantime = 3d
- years?, yea?, yy?
- months?, mon?
- weeks?, wee?, ww?
- days?, da, dd?
- hours?, hou?, hh?
- minutes?, min?, mm?
- seconds?, sec?, ss?
Fichero configuración (antes jail.conf)
/etc/fail2ban/jail.local
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1/8 192.168.0.1/24
# "bantime" is the number of seconds that a host is banned.
# 1 hora
bantime = 3600
# 10 minutos
#bantime = 600
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600
# "maxretry" is the number of failures before a host get banned.
maxretry = 5
# "backend" specifies the backend used to get files modification.
# Available options are "pyinotify", "gamin", "polling" and "auto".
# This option can be overridden in each jail as well.
#
# pyinotify: requires pyinotify (a file alteration monitor) to be installed.
# If pyinotify is not installed, Fail2ban will use auto.
# gamin: requires Gamin (a file alteration monitor) to be installed.
# If Gamin is not installed, Fail2ban will use auto.
# polling: uses a polling algorithm which does not require external libraries.
# auto: will try to use the following backends, in order:
# pyinotify, gamin, polling.
backend = auto
# "usedns" specifies if jails should trust hostnames in logs,
# warn when DNS lookups are performed, or ignore all hostnames in logs
#
# yes: if a hostname is encountered, a DNS lookup will be performed.
# warn: if a hostname is encountered, a DNS lookup will be performed,
# but it will be logged as a warning.
# no: if a hostname is encountered, will not be used for banning,
# but it will be logged as info.
usedns = warn
# This jail corresponds to the standard configuration in Fail2ban 0.6.
# The mail-whois action send a notification e-mail with a whois request
# in the body.
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com]
logpath = /var/log/secure
maxretry = 5
[proftpd-iptables]
enabled = true
filter = proftpd
action = iptables[name=ProFTPD, port=ftp, protocol=tcp]
sendmail-whois[name=ProFTPD, dest=webmaster@elhacker.net]
logpath = /var/log/proftpd/proftpd.log
maxretry = 6
cat /var/log/secure | grep 'Failed password' | sort | uniq -cDirectivas
- bantime = Número de segundos en el cual una dirección IP permanecerá prohibida (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 parámetros que nos podemos encontrar dentro de una sección es el siguiente:
- enabled = 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 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 aplicarán en cada uno de los servicios que queremos proteger. La totalidad de acciones disponibles se hallan en la ubicación /etc/fail2ban/action.d
- findtime = Definimos el tiempo ha transcurrir para que el contador de intentos fallidos de una determinada IP se resetee.
- bantime = Definimos el tiempo en segundos que queremos bloquear una determinada IP. 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 mencionados 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 email 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 enviará el email. En mi caso dejo el valor por defecto que es:Fail2Ban
- sender = En el apartado sender introducimos la dirección con la que fail2ban enviará 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án varios valores para este campo. Para que se envíen las notificaciones podemos usar los siguientes valores: %(action_mw)s o %(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's 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 funcionará. 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
Filtros de las Jails (Jaulas, Cárcel) /etc/fail2ban/filter.d
- 3proxy.conf
- apache-auth.conf
- apache-badbots.conf
- apache-botsearch.conf
- apache-common.conf
- apache-fakegooglebot.conf
- apache-modsecurity.conf
- apache-nohome.conf
- apache-noscript.conf
- apache-overflows.conf
- apache-pass.conf
- apache-shellshock.conf
- assp.conf
- asterisk.conf
- bitwarden.conf
- botsearch-common.conf
- centreon.conf
- common.conf
- counter-strike.conf
- courier-auth.conf
- courier-smtp.conf
- cyrus-imap.conf
- directadmin.conf
- domino-smtp.conf
- dovecot.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
- horde.conf
- kerio.conf
- lighttpd-auth.conf
- mongodb-auth.conf
- monit.conf
- murmur.conf
- mysqld-auth.conf
- nagios.conf
- named-refused.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
- perdition.conf
- php-url-fopen.conf
- phpmyadmin-syslog.conf
- portsentry.conf
- postfix.conf
- proftpd.conf
- pure-ftpd.conf
- qmail.conf
- recidive.conf
- roundcube-auth.conf
- screensharingd.conf
- selinux-common.conf
- selinux-ssh.conf
- sendmail-auth.conf
- sendmail-reject.conf
- sieve.conf
- slapd.conf
- softethervpn.conf
- sogo-auth.conf
- solid-pop3d.conf
- squid.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
Acciones a tomar /etc/fail2ban/action.d
- abuseipdb.conf
- apf.conf
- badips.conf
- badips.py
- blocklist_de.conf
- bsd-ipfw.conf
- cloudflare.conf
- complain.conf
- dshield.conf
- dummy.conf
- firewallcmd-allports.conf
- firewallcmd-common.conf
- firewallcmd-ipset.conf
- firewallcmd-multiport.conf
- firewallcmd-new.conf
- firewallcmd-rich-logging.conf
- firewallcmd-rich-rules.conf
- helpers-common.conf
- hostsdeny.conf
- ipfilter.conf
- ipfw.conf
- iptables-allports.conf
- iptables-common.conf
- iptables-ipset-proto4.conf
- iptables-ipset-proto6-allports.conf
- iptables-ipset-proto6.conf
- iptables-multiport-log.conf
- iptables-multiport.conf
- iptables-new.conf
- iptables-xt_recent-echo.conf
- iptables.conf
- mail-buffered.conf
- mail-whois-common.conf
- mail-whois-lines.conf
- mail-whois.conf
- mail.conf
- mynetwatchman.conf
- netscaler.conf
- nftables-allports.conf
- nftables-multiport.conf
- nftables.conf
- nginx-block-map.conf
- npf.conf
- nsupdate.conf
- osx-afctl.conf
- osx-ipfw.conf
- pf.conf
- route.conf
- sendmail-buffered.conf
- sendmail-common.conf
- sendmail-geoip-lines.conf
- sendmail-whois-ipjailmatches.conf
- sendmail-whois-ipmatches.conf
- sendmail-whois-lines.conf
- sendmail-whois-matches.conf
- sendmail-whois.conf
- sendmail.conf
- shorewall-ipset-proto6.conf
- shorewall.conf
- smtp.py
- symbiosis-blacklist-allports.conf
- ufw.conf
- xarf-login-attack.conf
Reportes syslog
May 28 12:09:34 ns2 fail2ban.jail : INFO Jail 'proftpd-iptables' stopped
May 28 12:09:35 ns2 fail2ban.server : INFO Exiting Fail2ban
May 28 12:09:36 ns2 fail2ban.server : INFO Changed logging target to SYSLOG for Fail2ban v0.8.10
May 28 12:09:36 ns2 fail2ban.jail : INFO Creating new jail 'proftpd-iptables'
May 28 12:09:36 ns2 fail2ban.jail : INFO Jail 'proftpd-iptables' uses pyinotify
May 28 12:09:36 ns2 fail2ban.jail : INFO Initiated 'pyinotify' backend
May 28 12:09:36 ns2 fail2ban.filter : INFO Added logfile = /var/log/auth.log
May 28 12:09:36 ns2 fail2ban.filter : INFO Set maxRetry = 6
May 28 12:09:36 ns2 fail2ban.filter : INFO Set findtime = 600
May 28 12:09:36 ns2 fail2ban.actions: INFO Set banTime = 3600
May 28 12:09:36 ns2 fail2ban.jail : INFO Jail 'proftpd-iptables' started
Ejemplos
Reporte ip baneada:May 28 15:56:13 ns2 fail2ban.actions: WARNING [proftpd-iptables] Ban 195.70.62.71Ver Regla en iptables (action iptables)
May 28 16:56:14 ns2 fail2ban.actions: WARNING [proftpd-iptables] Unban 195.70.62.71
iptables -Lo mejor:
service iptables statusResultado:
fail2ban-ProFTPD tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21Ip baneada:
Chain fail2ban-ProFTPD (1 references)
num target prot opt source destination
1 RETURN all -- 0.0.0.0/0 0.0.0.0/0
Chain fail2ban-ProFTPD (1 references) num target prot opt source destination 1 REJECT all -- 195.70.62.71 0.0.0.0/0 reject-with icmp-port-unreachable
Para borrar la última ip baneada:
# iptables -D fail2ban-ProFTPD 1
Para ver el estado:
fail2ban-client status proftpd-iptables
Status for the jail: proftpd-iptables
|- filter
| |- File list: /var/log/secure
| |- Currently failed: 0
| `- Total failed: 384
`- action
|- Currently banned: 2
| `- IP list: 85.25.72.71 175.44.5.140
`- Total banned: 33
fail2ban-client status
Resultado:
Para añadir manualmente una ip a una jaula:Status
|- Number of jail: 13
`- Jail list: apache-auth, apache-modsecurity, apache-noscript, dovecot, http-get-dos, pam-generic, postfix, postfix-rbl2, proftpd, proftpd-custom, sasl, sshd, webmin-auth
fail2ban-client -vvv set http-get-dos banip <IP>
Si aparecen errores con iptables en el log:
fail2ban.actions.action: ERROR iptables -N fail2ban-SSH
#012
iptables -A fail2ban-SSH -j RETURN
#012
iptables -I INPUT -p tcp --dport ssh -j fail2ban-SSH returned 300
restorecon -R -v /sbin/Reporte por e-mail (acción sendmail-whois.conf)
Hi,
The IP 195.70.62.71 has just been banned by Fail2Ban after
6 attempts against ProFTPD.
Here are more information about 195.70.62.71:
[Querying whois.ripe.net]
[whois.ripe.net]
% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See http://www.ripe.net/db/support/db-terms-conditions.
% Note: this output has been filtered.
% To receive output for a database update, use the "-B" flag.
% Information related to '195.70.62.0 - 195.70.62.255'
% Abuse contact for '195.70.62.0 - 195.70.62.255' is 'net-admin@datanet.hu'
inetnum: 195.70.62.0 - 195.70.62.255
netname: INTERWARE
descr: InterWare Inc.
descr: IPs for Server Hosting
country: HU
admin-c: IWNA1-RIPE
tech-c: IWNA1-RIPE
remarks: rev-srv: ns1.interware.hu
remarks: rev-srv: ns2.interware.hu
status: ASSIGNED PA
mnt-by: AS8358-MNT
source: RIPE # Filtered
remarks: rev-srv attribute deprecated by RIPE NCC on 02/09/2009
role: InterWare Network Administration
address: InterWare Inc.
address: Victor Hugo u. 18-22.
address: H-1132 Budapest
address: Hungary
phone: +36 1 4525300
fax-no: +36 1 4525301
admin-c: ZR1-RIPE
admin-c: AN845-RIPE
tech-c: MK1117-RIPE
tech-c: AN845-RIPE
tech-c: ZR1-RIPE
nic-hdl: IWNA1-RIPE
mnt-by: AS8358-MNT
org: ORG-IL7-RIPE
remarks: ------------------------------
---------------
remarks: Please send all abuse and spam complaints to:
remarks: noc@interware.hu
remarks: abuse@interware.hu
remarks: ---------------------------------------------
source: RIPE # Filtered
% Information related to '195.70.32.0/19AS5588'
route: 195.70.32.0/19
descr: GTS Hungary Ltd.
descr: HU
origin: AS5588
mnt-by: AS8358-MNT
source: RIPE # Filtered
% Information related to '195.70.32.0/19AS8358'
route: 195.70.32.0/19
descr: InterWare Inc.
descr: HU
origin: AS8358
mnt-by: AS8358-MNT
source: RIPE # Filtered
% This query was served by the RIPE Database Query Service version 1.73.1 (DBC-WHOIS3)
Regards,
Fail2Ban
1 comentarios :
Alex para windows que? ajaj
Publicar un comentario
Los comentarios pueden ser revisados en cualquier momento por los moderadores.
Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.
Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.