Configurar servidor VPS desde cero III: uso de fail2ban
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ámetro | Función |
---|---|
enabled | Indica si el filtro está activo o no. |
port | Puerto utilizado por el servicio. En caso de utilizar el puerto por defecto podremos escribir su nombre en vez del número de puerto. |
filter | El 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. |
logpath | La ruta del fichero de log del servicio que queremos filtrar con fail2ban |
maxretry | Este 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ámetro | Función | Valor por defecto |
---|---|---|
bantime | Duración del tiempo en segundos por la que una ip es bloqueada. Si se indica un valor negativo, el bloqueo es permanente. | 600 |
findtime | La 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 |
maxretry | Nú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ámetro | Función |
---|---|
destemail | La dirección de correo electrónico donde recibiremos las alertas de fail2ban. |
sendername | El nombre del remitente del correo electrónico de las alertas de fail2ban. |
sender | La 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ámetro | Función |
---|---|
%(action_)s | Fail2ban solo bloquea la ip |
%(action_mw)s | Fail2ban bloquea la ip, además de enviar por correo electrónico los datos de whois de la ip. |
%(action_mwl)s | Fail2ban 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:
Comando | Funcion |
---|---|
start | Inicia el servicio fail2ban |
reload | Recarga los ficheros de configuración de fail2ban |
reload JAIL | Recarga el fichero de configuración de una regla de bloqueo que se llama JAIL (tendremos que cambiar ese nombre) |
stop | Detiene el servicio de fail2ban |
status | Muestra el estado actual de fail2ban, mostrando el listado de reglas de bloqueo activas |
status JAIL | Muestra 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
Deja una respuesta