LINUX

Cómo usar Fail2ban para asegurar SSH en CentOS 7

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 intentos repetidos 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 fácilmente fail2ban utilizando 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 (Paquetes adicionales para 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 opciones 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. Necesitas 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 utiliza para hacer que la actualización de su configuración personalizada sea segura.

Configuraciones principales en el jail.local predeterminado

El código de archivo puede constar de muchas líneas de códigos que es ejecutado para incluir en la lista blanca o prohibir una o varias direcciones IP, establecer bantime duración, número de falla intentos, etc.Para activando un servicio puede establecer el estado habilitado de falso a verdadero. Necesita conocer algunos términos utilizados en el archivo de configuración.

  • ignoreip: Puede ser una dirección IP, una máscara CIDR o un host DNS. Puede incluir en la lista blanca cualquier dirección IP agregando a esta lista. Se pueden definir varias direcciones utilizando un separador de espacios.
  • bantime: Es la cantidad de segundos que un host está prohibido.
  • Findtime: Es el parámetro que se utiliza para comprobar si un host debe ser baneado o no. Cuando el host genera maxretry en su último tiempo de búsqueda, está prohibido.
  • Maxretry : Es el parámetro utilizado para establecer el límite para el número de reintentos por parte de un host, al exceder este límite, el host queda 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

No hay jaulas 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]
enabled = true
# To use more aggressive sshd filter (inclusive sshd-ddos failregex):
#filter = sshd-aggressive
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

El parámetro habilitado se establece en verdadero, para proporcionar protección, para deshabilitar la protección, podemos establecerlo en falso. El parámetro de filtro verifica el archivo de configuración fail2ban sshd, ubicado en la ruta /etc/fail2ban/filter.d/sshd.conf.

La acción del parámetro se usa para derivar la dirección IP que debe prohibirse usando el filtro disponible en /etc/fail2ban/action.d/firewallcmd-ipset.conf.

  • Port: Este parámetro puede cambiarse a un nuevo valor como port = 2222 si movió su puerto a 2222 en lugar del predeterminado. No es necesario cambiar este parámetro para el puerto 22 predeterminado.
  • Logpath: Proporciona la ruta donde se almacena el archivo de registro. Fail2Ban analiza este archivo de registro.
  • Maxretry: Se utiliza para establecer el límite máximo de entradas de inicio de sesión fallidas.
  • Bantime: Se utiliza para establecer la duración de los segundos durante los cuales un host debe ser baneado.
  • filter: El nombre del archivo ubicado en /etc/fail2ban/filter.d que contiene la información de failregex utilizada para analizar los archivos de registro de forma adecuada.

Habilitación del servicio Fail2ban

Debe asegurarse de habilitar e iniciar el servicio Firewalld 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

Utilice el cliente Fail2ban

Fail2ban proporciona un comando fail2ban-client que se puede utilizar para ejecutar Fail2ban desde la línea de comandos. Consulte las distintas opciones de la línea de comandos a continuación:

fail2ban-client COMMAND
  • start: inicia el servidor y las cárceles
  • reload: recarga la configuración
  • reload <JAIL>: recarga la cárcel
  • stop: detiene todas las cárceles y termina el servidor
  • status: obtiene el estado actual del servidor
  • ping: prueba si el servidor está vivo
  • help: devuelve esta salida
  • version: devuelve la versión del servidor

Por ejemplo, para verificar si Fail2Ban se está ejecutando y si la cárcel SSHd está habilitada, 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 fallidos de inicio de sesión

Podemos verificar el registro SSH usando el siguiente comando para verificar si ha habido intentos fallidos de iniciar sesión en el servidor a través del puerto ssh. Podemos obtener una lista de intentos fallidos de contraseña de root de 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 ha alcanzado el número máximo de intentos fallidos mediante el siguiente comando:

#iptables -L -n

Eliminar la prohibición de 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 una lista blanca. El nombre “sshd” es el nombre de la cárcel, en este caso la cárcel “sshd” que configuramos anteriormente. Podemos ejecutar el siguiente comando para el mismo.

#fail2ban-client set sshd unbanip IPADDR

Terminando

Fail2ban funciona en segundo plano y analiza 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 proporciona una breve introducción a este tema, puede obtener más información sobre esto en este Wiki de Fail2ban. Espero que esto sea útil para ti. Publique sus valiosos comentarios y sugerencias al respecto.

Publicaciones relacionadas

Deja una respuesta

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

Botón volver arriba
Cerrar
Cerrar