La mayoría de los servidores Linux ofrecen un inicio de sesión SSH a través del puerto 22 para fines de administración remota. Este puerto es un puerto muy conocido, por lo tanto, a menudo es atacado por ataques de fuerza bruta. Fail2ban es un software que escanea los archivos de registro en busca de intentos de inicio de sesión de fuerza bruta en tiempo real y bloquea a los atacantes con firewalld o iptables. Fail2ban reconoce el acceso no deseado o los esfuerzos de violación de la seguridad al servidor dentro del marco de tiempo establecido por el administrador y bloquea las direcciones IP que muestran signos de ataques de fuerza bruta o ataques de diccionario. Este programa 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 tutorial muestra la instalación y configuración de Fail2Ban con firewalld en CentOS 7.
Instalando Fail2Ban
Para instalar Fail2Ban en CentOS 7, primero tendremos que instalar el repositorio EPEL (Extra Packages for Enterprise Linux). EPEL contiene paquetes adicionales para todas las versiones de CentOS, uno de estos paquetes adicionales es Fail2Ban.
Los siguientes comandos deben ejecutarse después de cambiar al usuario root.
yum install epel-release
yum install fail2ban fail2ban-systemd
Si tiene instalado SELinux, actualice las políticas de SELinux:
yum update -y selinux-policy*
Configurar ajustes para Fail2Ban
Una vez instalado, tendremos que configurar y personalizar el software con un archivo de configuración jail.local. El archivo jail.local anula el archivo jail.conf y se usa para hacer segura la actualización de su configuración personalizada.
Haga una copia del archivo jail.conf y guárdelo con el nombre jail.local:
cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Abra el archivo jail.local para editarlo en Nano con el siguiente comando.
nano /etc/fail2ban/jail.local
El código del archivo puede constar de muchas líneas de códigos que se ejecutan para evitar la prohibición de una o varias direcciones IP, establecer la duración del tiempo de prohibición, etc. Un archivo de configuración de cárcel típico contiene las siguientes líneas.
[DEFAULT]
#
# MISCELLANEOUS OPTIONS
#
# "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
# External command that will take an tagged arguments to ignore, e.g. <ip>,
# and return true if the IP is to be ignored. False otherwise.
#
# ignorecommand = /path/to/command <ip>
ignorecommand =
# "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 = 5
Ignorar ip se utiliza para establecer la lista de direcciones IP que no se prohibirán. La lista de direcciones IP se debe proporcionar con un separador de espacios. Este parámetro se utiliza para establecer su dirección IP personal (si accede al servidor desde una IP fija).
Bantime El parámetro se usa para establecer la duración de los segundos durante los cuales se debe prohibir un host.
Findtime es el parámetro que se utiliza para verificar si un host debe ser prohibido o no. Cuando el host genera maxrety en su último tiempo de búsqueda, se prohíbe.
Maxreintentar 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.
Agregue un archivo jail para proteger SSH.
Crea un nuevo archivo con el editor Nano
nano /etc/fail2ban/jail.d/sshd.local
Al archivo anterior, agregue las siguientes líneas de código.
[sshd]
enabled = true
port = ssh
#action = firewallcmd-ipset
logpath = %(sshd_log)s
maxretry = 5
bantime = 86400
Parámetro habilitado se establece en verdadero, para proporcionar protección, para desactivar la protección, se establece en falso. El parámetro de filtro verifica el archivo de configuración sshd, ubicado en la ruta /etc/fail2ban/filter.d/sshd.conf.
El parámetro acción se utiliza para derivar la dirección IP que debe prohibirse mediante el filtro disponible en /etc/fail2ban/action.d/firewallcmd-ipset.conf.
Puerto El parámetro se puede cambiar a un nuevo valor, como puerto =1212, como es el caso. Al usar el puerto 22, no es necesario cambiar este parámetro.
Ruta de registro proporciona la ruta donde se almacena el archivo de registro. Este archivo de registro es escaneado por Fail2Ban.
Maxreintentar se utiliza para establecer el límite máximo de entradas de inicio de sesión fallidas.
Bantime El parámetro se usa para establecer la duración de los segundos durante los cuales se debe prohibir un host.
Ejecución del servicio Fail2Ban
Cuando aún no esté ejecutando CentOS Firewall, inícielo:
systemctl enable firewalld
systemctl start firewalld
Ejecute las siguientes líneas de comando para ejecutar el software de protección Fail2Ban en el servidor.
systemctl enable fail2ban
systemctl start fail2ban
Seguimiento de entradas de inicio de sesión fallidas
El siguiente comando se usa para verificar si hubo intentos fallidos de iniciar sesión en el servidor a través del puerto ssh.
cat /var/log/secure | grep 'Failed password'
Ejecutar el comando anterior obtendrá una lista de intentos fallidos de contraseña raíz desde diferentes direcciones IP. El formato de los resultados será similar al que se muestra a continuación:
Apr 4 17:05:12 htf sshd[4287]: Failed password for root from 108.61.157.25 port 23121 ssh2
Apr 4 17:05:15 htf sshd[3154]: Failed password for root from 108.61.157.25 port 14486 ssh2
Apr 4 17:05:16 htf sshd[3154]: Failed password for root from 108.61.157.25 port 24157 ssh2
Apr 4 17:05:18 htf sshd[3154]: Failed password for root from 108.61.157.25 port 24157 ssh2
Comprobando las IP prohibidas por Fail2Ban
El siguiente comando se usa para obtener una lista de direcciones IP prohibidas que fueron reconocidas como amenazas de fuerza bruta.
iptables -L -n
Verifique el estado de Fal2Ban
Utilice el siguiente comando para comprobar el estado de las cárceles de Fail2Ban:
fail2ban-client status
El resultado debería ser similar a esto:
[[email protected] ]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
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 desbanear. El nombre "sshd" es el nombre de la cárcel, en este caso la cárcel "sshd" que configuramos arriba. El siguiente comando hace el trabajo.
fail2ban-client set sshd unbanip IPADDRESS