Bloquear intrusos con Fail2ban

Fail2ban es una herramienta escrita en Python que previene la introducción de intrusos en un sistema. Actúa penalizando o bloqueando las conexiones remotas que intentan accesos por fuerza bruta.
 Bloquear intrusos con Fail2ban
Se configura indicando qué servicios queremos proteger y cuantos fallos de inicio de sesión permitimos para dicho servicio. En caso de que se llegue a ese límite, el usuario es bloqueado mediante el firewall IPtables durante un determinado periodo de tiempo que estimemos.

Pasos para bloquear intrusos con Fail2ban

 1.- Instalación

 Primeramente instalamos y habilitamos el repositorio epel en el servidor:
CentOS/RHEL 6, 32 Bit (i386):
# rpm -Uvh https://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
CentOS/RHEL 6, 64 Bit x86_64):
# rpm -Uvh https://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
CentOS/RHEL 5, 32 Bit (i386):
# rpm -Uvh 
CentOS/RHEL 5, 64 Bit (x86_64):
# rpm -Uvh

Mediante yum, instalamos el servicio fail2ban:

yum install fail2ban
NOTA: El comando «yum» se utiliza en sistemas operativos RedHat, CentOS o Fedora. Para Ubuntu y otros utilizar «apt-get» o el comando que corresponda.

2.- Configuración

El fichero principal de configuración es /etc/fail2ban/jail.conf

La configuración básica del servicio fail2ban está bajo la sección [DEFAULT]. Aquí indicaremos nuestra lista blanca de IPs (no queremos que sean bloqueadas) en «ignoreip», el tiempo en segundos durante el cual una IP es bloqueada con «bantime» y el número de intentos antes de que una IP sea bloqueada con «maxretry»:

[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 XXX.XXX.XXX.XXX YYY.YYY.YYY.YYY

# "bantime" is the number of seconds that a host is banned.
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 = 3
Si seguimos bajando en el fichero, veremos un listado de servicios y reglas aplicadas para proteger dicho servicio. Por defecto, los servicios están deshabilitados.

 3.- Proteger Pure-FTPD

Creamos una regla de este tipo (la que está definida para pure-ftpd no se asemeja al funcionamiento de Pure-FTPD en CentOS):
[pureftpd-iptables]
enabled  = true
filter   = pure-ftpd
action   = iptables[name=pure-ftpd, port=ftp, protocol=tcp]
           sendmail-whois[name=pure-ftpd, dest=sistemas@nerion.es,  sender=sistemas@nerion.es]
logpath  = /var/log/messages
maxretry = 3
Reiniciamos el servicio fail2ban
service fail2ban restart
Para ver el estado de nuestra regla, ejecutamos este comando:
fail2ban-client status pureftpd-iptables
En el fichero /etc/fail2ban/filter.d/pure-ftpd.conf tenemos las expresiones regulares utilizadas por fail2ban para detectar un fallo de inicio de sesión. En principio no las tocamos.
Podemos probar en línea de comandos la efectividad de nuestras reglas con los siguientes comandos:
a) Sobre una línea de log
fail2ban-regex 'Fri Jun 19 02:00:20 2009 [pid 28783] FTP command: Client "210.188.204.29", "USER Administrator"'     '\"\", \"USER Administrator\"'
b) Sobre el fichero de logs
fail2ban-regex '/var/log/messages' '/etc/fail2ban/filter.d/pure-ftpd.conf'
c) Sobre el fichero de configuración
fail2ban-regex 'Jan  1 16:22:13 servername pure-ftpd: (?@150.214.153.227) [WARNING] Authentication failed for \
user [Administrator]' '/etc/fail2ban/filter.d/pure-ftpd.conf'

4.- Proteger SSH

En el fichero /etc/fail2ban/jail.conf creamos este conjunto de reglas para proteger el servicio SSH:
[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=sistemas@nerion.es, sender=sistemas@nerion.es]
logpath  = /var/log/secure
maxretry = 5

5.- Eliminar un bloque de IP realizado por fail2ban

Cuando una IP es bloqueada, se crea una regla IPtables que contiene dicha dirección. Para eliminar el bloqueo manualmente, ejecutaremos este comando (donde A.B.C.D es la dirección IP bloqueada):

iptables -D fail2ban-pure-ftpd -s A.B.C.D -j REJECT

Esperamos que nuestro artículo Bloquear intrusos con Fail2ban os haya servido de ayuda, en caso de tener cualquier problema o pregunta no dudéis en comentar al final de esta página.

Comparte este tutorial:

No hay comentarios en este tutorial

Sé el primero en enviar un comentario: