Fail2ban es la última herramienta de seguridad para proteger su servidor de ataques de fuerza bruta. Protege automáticamente el servidor de los piratas informáticos. Funciona monitoreando a través de archivos de registro y reaccionando a acciones ofensivas como repetidos intentos de inicio de sesión fallidos. El proceso consiste en agregar una nueva regla en una cadena de firewall y enviar una notificación por correo electrónico. Puede instalar y configurar fail2ban fácilmente con este sencillo documento.
Antes de continuar con la instalación, debemos asegurarnos de que nuestro sistema cumpla con todos los requisitos de software para compilar e instalar la aplicación. Y también debe configurarse con una dirección IP estática. En el primer paso, actualice los repositorios de su sistema y los paquetes de software emitiendo los siguientes comandos en CentOS.
# yum update
Instalación de Fail2ban en CentOS
Para instalar Fail2Ban en un servidor CentOS 7, primero tendremos que instalar el repositorio EPEL (Extra Packages for Enterprise Linux). EPEL contiene paquetes adicionales para todas las versiones de CentOS. Podemos ejecutar este siguiente comando desde la raíz para instalar este paquete.
# yum install epel-release -y
# yum install fail2ban fail2ban-systemd
Fail2ban necesita algunas dependencias. Los descargará automáticamente del repositorio.
fail2ban-firewalld
fail2ban-sendmail
fail2ban-server
systemd-python
Configuración de ajustes para Fail2ban en CentOS
El archivo de configuración predeterminado de fail2ban se encuentra en /etc/fail2ban/jail.conf
Todas las configuraciones de fail2ban deben realizarse en un archivo local. Debe copiar /etc/fail2ban/jail.conf
en /etc/fail2ban/jail.local
# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Después de copiar, tendremos que configurar y personalizar el software con un jail.local
archivo de configuración. El archivo jail.local anula el archivo jail.conf y se usa para hacer segura la actualización de su configuración personalizada.
Configuraciones principales en el jail.local predeterminado
El código del archivo puede constar de muchas líneas de códigos que se ejecutan para incluir en la lista blanca o prohibir una o varias direcciones IP, establecer la duración del tiempo de prohibición, el número de intentos fallidos, etc. Para activar un servicio, puede establecer el estado habilitado de falso a verdadero. Debe conocer algunos términos utilizados en el archivo de configuración.
ignoreip
:Puede ser una dirección IP, una máscara CIDR o un servidor DNS. Puede incluir en la lista blanca cualquier dirección IP agregándola a esta lista. Se pueden definir varias direcciones usando un separador de espacios.bantime
:Es la cantidad de segundos que un host está baneado.Findtime
:Es el parámetro que se utiliza para verificar si un host debe ser baneado o no. Cuando el host genera maxretry en su último tiempo de búsqueda, se prohíbe.Maxretry
:Es el parámetro utilizado para establecer el límite para el número de reintentos por parte de un anfitrión, al exceder este límite, el anfitrión es baneado.
En el servidor CentOS 7, deberá cambiar la opción de backend en jail.local de auto a systemd.
# "backend" specifies the backend used to get files modification.
# Available options are "pyinotify", "gamin", "polling", "systemd" 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.
# systemd: uses systemd python library to access the systemd journal.
# Specifying "logpath" is not valid for this backend.
# See "journalmatch" in the jails associated filter config
# auto: will try to use the following backends, in order:
# pyinotify, gamin, polling.
#
# Note: if systemd backend is chosen as the default but you enable a jail
# for which logs are present only in its own log files, specify some other
# backend for that jail (e.g. polling) and provide empty value for
# journalmatch. See https://github.com/fail2ban/fail2ban/issues/959#issuecomment-74901200
backend = systemd
Configuración de fail2ban para protección SSH
Las cárceles no están habilitadas de forma predeterminada en CentOS 7. Para habilitar la protección SSH, debe descomentar las siguientes líneas en jail.local
archivo de la siguiente manera:
# JAILS
# SSH servers
#
[sshd]
enable =true# Para usar un filtro sshd más agresivo (incluido sshd-ddos failregex):#filter =sshd-aggressiveport =sshlogpath =%(sshd_log)sbackend =%(sshd_backend)s
El parámetro habilitado se establece en verdadero, para brindar protección, para deshabilitar la protección, podemos establecerlo en falso. El parámetro de filtro verifica el archivo de configuración de fail2ban sshd, ubicado en la ruta /etc/fail2ban/filter.d/sshd.conf
.
La acción del parámetro se utiliza para derivar la dirección IP que debe prohibirse utilizando el filtro disponible en /etc/fail2ban/action.d/firewallcmd-ipset.conf.
Port
:este parámetro se puede cambiar a un nuevo valor, como puerto =2222, si movió su puerto a 2222 en lugar del predeterminado. No es necesario cambiar este parámetro por el puerto predeterminado 22.Logpath
:Proporciona la ruta donde se almacena el archivo de registro. Este archivo de registro es escaneado por Fail2Ban.Maxretry
:se utiliza para establecer el límite máximo de entradas de inicio de sesión fallidas.Bantime
:Esto se usa para establecer la duración de los segundos durante los cuales se debe prohibir un host.filter
:El nombre del archivo ubicado en/etc/fail2ban/filter.d
que contiene la información failregex utilizada para analizar los archivos de registro de forma adecuada.
Habilitación del servicio Fail2ban
Debe asegurarse de habilitar e iniciar el servicio de firewall de CentOS para ejecutar este software.
# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
# systemctl start firewalld
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2018-01-14 10:57:34 UTC; 9s ago
Docs: man:firewalld(1)
Main PID: 19493 (firewalld)
CGroup: /system.slice/firewalld.service
└─19493 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Now we can enable and start our fail2ban service by executing these commands below:
#systemctl enable fail2ban
#systemctl start fail2ban
Para cualquier cambio de configuración, asegúrese de reiniciar el servicio para agregar esos cambios con el siguiente comando:
#systemctl restart fail2ban
Usar el cliente Fail2ban
Fail2ban proporciona un comando fail2ban-client
que se puede utilizar para ejecutar Fail2ban desde la línea de comandos. Consulte las diversas opciones de línea de comandos a continuación:
fail2ban-client COMMAND
start
:inicia el servidor y las cárcelesreload
:recarga la configuraciónreload <JAIL>
:recarga la cárcelstop
:detiene todas las cárceles y finaliza el servidorstatus
:obtiene el estado actual del servidorping
:comprueba si el servidor está vivohelp
:devolver esta salidaversion
:devuelve la versión del servidor
Por ejemplo, para verificar si Fail2Ban se está ejecutando y si SSHd jail está habilitado, ejecute:
# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Para obtener más información sobre este comando, puede ejecutar man fail2ban-client
.
Seguimiento de los intentos de inicio de sesión fallidos
Podemos verificar el registro de SSH usando el siguiente comando para verificar si hubo algún intento fallido de iniciar sesión en el servidor a través del puerto ssh. Podemos obtener una lista de intentos fallidos de contraseña raíz desde diferentes direcciones IP similar a esta salida.
Jan 14 05:08:58 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Jan 14 05:09:00 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Jan 14 05:09:02 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Jan 14 05:09:04 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Jan 14 05:09:06 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Jan 14 05:09:08 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Puede ver la lista de direcciones IP prohibidas que han alcanzado el número máximo de intentos fallidos con el siguiente comando:
#iptables -L -n
Desbanear una dirección IP
Para eliminar una dirección IP de la lista prohibida, el parámetro IPADDRESS se establece en la IP adecuada que necesita incluirse en la lista blanca. El nombre "sshd" es el nombre de la cárcel, en este caso la cárcel "sshd" que configuramos arriba. Podemos ejecutar el siguiente comando para lo mismo.
#fail2ban-client set sshd unbanip IPADDR
Conclusión
Fail2ban funciona en segundo plano y escanea continuamente los archivos de registro en busca de patrones de inicio de sesión inusuales e intentos de violación de la seguridad. Este artículo le brinda una breve introducción a este tema, puede obtener más información al respecto en este wiki de Fail2ban. Espero que esto sea útil para ti. Publique sus valiosos comentarios y sugerencias al respecto.