Programación

Configurar servidor VPS desde cero III: uso de fail2ban

Configurar servidor VPS desde cero III: uso de fail2ban
5 (100%) 1 voto[s]

Después de explicar la forma de utilizar rkhunter para aumentar la seguridad de nuestro vps, a continuación, veremos como hacer lo propio con Fail2ban

Fail2ban nos permite monitorizar los accesos desde las distintas ips a nuestro servidor y bloquear los ataques de fuerza bruta.

Instalación de fail2ban

Debian

En Debian, como es nuestro caso, es muy sencilla la instalación de fail2ban, tan solo hace falta teclear desde una ventana de terminal como root:

apt-get install fail2ban

Si queremos recibir alertas de fail2ban por correo electrónico, debemos instalar sendmail:

apt-get install sendmail-bin sendmail 

Fedora

En caso de utilizar fedora, lo instalaremos de la siguiente manera:

dnf install fail2ban

Si queremos recibir alertas por correo, instalamos sendmail:

dnf install sendmail

Por último, iniciamos y activamos los servicios de fail2ban y sendmail:

systemctl start fail2ban
systemctl enable fail2ban
systemctl start sendmail
systemctl enable sendmail

Ubuntu

Si usamos la distro Ubuntu, instalaremos fail2ban de la siguiente manera:

apt-get install fail2ban

Si queremos recibir avisos por email, instalaremos sendmail:

apt-get install sendmail

Como funciona fail2ban

Fail2ban monitoriza continuamente el fichero /var/log/auth.log, donde se registran todos los accesos a nuestro servidor.

Si detecta un número de accesos fallidos a distintos puertos/servicios durante un determinado periodo de tiempo, procede a bloquear esa ip. El tiempo del bloqueo aplicado a esa ip puede ser configurada por nosotros, así como el número de intentos fallidos ejecutados. Por defecto, fail2ban permite un máximo de 3 intentos fallidos en los últimos 600 segundos.

Como configurar fail2ban

El fichero de configuración de fail2ban está en /etc/fail2ban/jail.conf. De todas maneras, es recomendable realizar una copia para poder modificar el fichero de configuración y adaptarlo a nuestras necesidades:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

A partir de ahora, modificaremos solo el fichero /etc/fail2ban/jail.local, que será el que automáticamente leerá fail2ban, ignorando el /etc/fail2ban/jail.conf

Por defecto, fail2ban está activo para el servicio ssh. Si queremos activarlo para otro tipo de servicios, deberemos editar el fichero /etc/fail2ban/jail.local

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

En cada servicio tenemos una serie de parámetros para poder configurarlo:

ParámetroFunción
enabledIndica si el filtro está activo o no.
portPuerto utilizado por el servicio. En caso de utilizar el puerto por defecto podremos escribir su nombre en vez del número de puerto.
filterEl nombre del fichero (sin la extensión .conf) situado en /etc/fail2ban/filter.d que contiene la expresión regular usada para filtrar el contenido del fichero de log.
logpathLa ruta del fichero de log del servicio que queremos filtrar con fail2ban
maxretryEste parámetro sobreescribe el parametro maxretry definido en jail.conf.

A continuación veremos una serie de ejemplos de configuración útiles que nos pueden venir muy bien para nuestro servidor vps

Añadir ip a la lista blanca

Podemos añadir una lista de ips que serán ignoradas en el filtro del fail2ban. Esto nos será útil en caso de conectarnos desde una ip fija a nuestro servidor vps, evitando que nos bloquee fail2ban.

Editamos el fichero /etc/fail2ban/jail.local, y en el parámetro ignoreip, añadimos nuestra ip (por ejemplo 1.1.1.1):

nano /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 1.1.1.1

Configurar número de reintentos y tiempo de bloqueo

Podremos modificar el tiempo que bloqueamos una ip, así como el número máximo de intentos fallidos de acceso a nuestro servidor, modificando los siguientes parámetros del fichero /etc/fail2ban/jail.local

ParámetroFunciónValor por defecto
bantimeDuración del tiempo en segundos por la que una ip es bloqueada. Si se indica un valor negativo, el bloqueo es permanente. 600
findtimeLa duración del tiempo el segundos entre intentos de acceso a nuestro servidor antes de ser bloqueada la ip. Si se define un valor de maxretry de 3 intentos, fail2ban bloqueara la ip si se producen 3 intentos fallidos en el tiempo especificado por findtime.
600
maxretryNúmero máximo de intentos de acceso al servidor desde la misma ip antes de bloquearla. 3

Recibir alertas de fail2ban por correo electrónico

Si queremos recibir alertas por correo electrónico de fail2ban cuando proceda a bloquear un ip, debemos configurar los siguientes parámetros en el fichero /etc/fail2ban/jail.local

ParámetroFunción
destemailLa dirección de correo electrónico donde recibiremos las alertas de fail2ban.
sendernameEl nombre del remitente del correo electrónico de las alertas de fail2ban.
senderLa dirección de correo electrónico desde la que nos enviará las alertas fail2ban.

Ademas, deberemos cambiar el parámetro action, ya que por defecto fail2ban esta configurado para realizar únicamente el bloqueo de la ip.

ParámetroFunción
%(action_)sFail2ban solo bloquea la ip
%(action_mw)sFail2ban bloquea la ip, además de enviar por correo electrónico los datos de whois de la ip.
%(action_mwl)sFail2ban bloquea la ip, envía los datos por correo electrónico de whois de la ip y las líneas del fichero de log asociadas al bloqueo.

Filtro para wordpress

Si para nuestra web usamos wordpress, podemos crear un filtro que monitorice los intentos de acceso al panel de control y bloquee las ips de robots que intentan un ataque de fuerza bruta.

Accedemos al directorio de filtros /etc/fail2ban/filter.d:

cd /etc/fail2ban/filter.d

Creamos un fichero con el nombre wordpress.conf:

nano wordpress.conf

Y copiamos el contenido del filtro:

# Fail2Ban filter for WordPress
#
#

[Definition]

failregex =  - - \[(\d{2})/\w{3}/\d{4}:\1:\1:\1 -\d{4}\] "POST /wp-login.php HTTP/1.1" 200
ignoreregex =

Grabamos el fichero y editamos el fichero /etc/fail2ban/jail.local para añadir el nuevo filtro:

[wordpress]
enabled  = true
filter   = wordpress
logpath  = /var/www/miweb/log/access.log
port     = 80,443

Tenemos que modificar el parámetro logpath (marcado en negrita) e indicar la ruta del fichero access.log de nuestra web.

En caso de tener mas de una web instalada, podemos modificar el parámetro logpath para incluir los ficheros de acceso de todas:

[wordpress]
enabled  = true
filter   = wordpress
logpath  = /var/www/miweb1/log/access.log
           /var/www/miweb2/log/access.log
           /var/www/miweb3/log/access.log
port     = 80,443

Grabamos el fichero y reiniciamos el servicio de fail2ban:

/etc/init.d/fail2ban restart

Uso de fail2ban-client

A la hora de manejar fail2ban, podemos utilizar una utilidad incluida, fail2ban-client.

De manera sencilla, podremos arrancar y parar el servicio, recargar la configuración, etc.
El formato del comando es el siguiente:

fail2ban-client COMANDO

Donde el comando es uno de la siguiente lista:

ComandoFuncion
startInicia el servicio fail2ban
reloadRecarga los ficheros de configuración de fail2ban
reload JAILRecarga el fichero de configuración de una regla de bloqueo que se llama JAIL (tendremos que cambiar ese nombre)
stopDetiene el servicio de fail2ban
statusMuestra el estado actual de fail2ban, mostrando el listado de reglas de bloqueo activas
status JAILMuestra el estado de la regla de bloqueo JAIL

Podemos ver más información sobre los comandos de fail2ban-cliente en la Wiki de Fail2ban

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *