Instalar fail2ban en Centos 7

Categorías:

Vamos a instalar fail2ban. Para los que no saben, fail2ban es una herramienta que detecta intentos de acceso a servicios en nuestro servidor linux. Revisa que dichos intentos no sean exitosos y luego de un número definido de intentos se bloquea el acceso a la dirección IP que está generando la solicitud de acceso.

Por ejemplo, si fail2ban detecta que se intenta acceder al puerto ssh (22) de nuestra máquina sin exito durante 4 veces seguidas, el sistema envía una señal al firewall para que bloquee el acceso al servidor de origen.

Empecemos entonces.

Lo primero que debemos hacer es instalar el paquete epel-release en nuestra máquina para que se pueda instalar fail2ban.

[root@repslave2 ~]# yum install epel-release
Complementos cargados:fastestmirror, langpacks
Determining fastest mirrors
epel/x86_64/metalink                                                                                                                                                           |  62 kB  00:00:00     
 * base: mirror.unimagdalena.edu.co
 * epel: mirrors.lug.mtu.edu
 * extras: mirror.unimagdalena.edu.co
 * updates: mirror.unimagdalena.edu.co
base                                                                                                                                                                           | 3.6 kB  00:00:00     
epel                                                                                                                                                                           | 4.7 kB  00:00:00     
extras                                                                                                                                                                         | 2.9 kB  00:00:00     
updates                                                                                                                                                                        | 2.9 kB  00:00:00     
(1/11): extras/7/x86_64/primary_db                                                                                                                                             | 249 kB  00:00:00     
(3/11): epel/x86_64/group_gz                                                                                                                                                   |  99 kB  00:00:01     
(9/11): epel/x86_64/updateinfo                                                                                                                                                 | 1.0 MB  00:00:04     
(10/11): epel/x86_64/primary_db                                                                                                                                                | 7.0 MB  00:00:08     
(11/11): updates/7/x86_64/primary_db                                                                                                                                           |  21 MB  00:00:42     
Resolviendo dependencias
--> Ejecutando prueba de transacción
---> Paquete epel-release.noarch 0:7-11 debe ser actualizado
---> Paquete epel-release.noarch 0:7-14 debe ser una actualización
--> Resolución de dependencias finalizada

Dependencias resueltas

======================================================================================================================================================================================================
 Package                                              Arquitectura                                   Versión                                       Repositorio                                  Tamaño
======================================================================================================================================================================================================
Actualizando:
 epel-release                                         noarch                                         7-14                                          epel                                          15 k

Resumen de la transacción
======================================================================================================================================================================================================
Actualizar  1 Paquete

Tamaño total de la descarga: 15 k
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
advertencia:/var/cache/yum/x86_64/7/epel/packages/epel-release-7-14.noarch.rpm: EncabezadoV4 RSA/SHA256 Signature, ID de clave 352c64e5: NOKEY                      ]  0.0 B/s |    0 B  --:--:-- ETA 
No se ha instalado la llave pública de epel-release-7-14.noarch.rpm 
epel-release-7-14.noarch.rpm                                                                                                                                                   |  15 kB  00:00:01     
Obteniendo clave desde file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importando llave GPG 0x352C64E5:
 Usuarioid  : "Fedora EPEL (7) <epel@fedoraproject.org>"
 Huella       : 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 Paquete    : epel-release-7-11.noarch (@extras)
 Desde      : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Está de acuerdo [s/N]:s
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Actualizando  : epel-release-7-14.noarch                                                                                                                                                        1/2 
  Limpieza      : epel-release-7-11.noarch                                                                                                                                                        2/2 
  Comprobando   : epel-release-7-14.noarch                                                                                                                                                        1/2 
  Comprobando   : epel-release-7-11.noarch                                                                                                                                                        2/2 

Actualizado:
  epel-release.noarch 0:7-14                                                                                                                                                                          

¡Listo!
[root@repslave2 ~]# 

En nuestro caso el sistema encontró que epel-release se había instalado anteriormente y lo que hace es actualizar el paquete.

Luego procedemos a instalar fail2ban

[root@repslave2 ~]# yum install fail2ban fail2ban-systemd
Complementos cargados:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirror.unimagdalena.edu.co
 * epel: mirrors.lug.mtu.edu
 * extras: mirror.unimagdalena.edu.co
 * updates: mirror.unimagdalena.edu.co
Resolviendo dependencias
--> Ejecutando prueba de transacción
---> Paquete fail2ban.noarch 0:0.11.2-3.el7 debe ser instalado
--> Procesando dependencias: fail2ban-firewalld = 0.11.2-3.el7 para el paquete: fail2ban-0.11.2-3.el7.noarch
--> Procesando dependencias: fail2ban-sendmail = 0.11.2-3.el7 para el paquete: fail2ban-0.11.2-3.el7.noarch
--> Procesando dependencias: fail2ban-server = 0.11.2-3.el7 para el paquete: fail2ban-0.11.2-3.el7.noarch
---> Paquete fail2ban-systemd.noarch 0:0.11.2-3.el7 debe ser instalado
--> Ejecutando prueba de transacción
---> Paquete fail2ban-firewalld.noarch 0:0.11.2-3.el7 debe ser instalado
---> Paquete fail2ban-sendmail.noarch 0:0.11.2-3.el7 debe ser instalado
---> Paquete fail2ban-server.noarch 0:0.11.2-3.el7 debe ser instalado
--> Resolución de dependencias finalizada

Dependencias resueltas

======================================================================================================================================================================================================
 Package                                                Arquitectura                               Versión                                             Repositorio                              Tamaño
======================================================================================================================================================================================================
Instalando:
 fail2ban                                               noarch                                     0.11.2-3.el7                                        epel                                      16 k
 fail2ban-systemd                                       noarch                                     0.11.2-3.el7                                        epel                                      16 k
Instalando para las dependencias:
 fail2ban-firewalld                                     noarch                                     0.11.2-3.el7                                        epel                                      16 k
 fail2ban-sendmail                                      noarch                                     0.11.2-3.el7                                        epel                                      19 k
 fail2ban-server                                        noarch                                     0.11.2-3.el7                                        epel                                     464 k

Resumen de la transacción
======================================================================================================================================================================================================
Instalar  2 Paquetes (+3 Paquetes dependientes)

Tamaño total de la descarga: 530 k
Tamaño instalado: 1.5 M
Is this ok [y/d/N]: y
Downloading packages:
(1/5): fail2ban-firewalld-0.11.2-3.el7.noarch.rpm                                                                                                                              |  16 kB  00:00:00     
(2/5): fail2ban-0.11.2-3.el7.noarch.rpm                                                                                                                                        |  16 kB  00:00:01 
(3/5): fail2ban-sendmail-0.11.2-3.el7.noarch.rpm                                                                                                                               |  19 kB  00:00:00     
(4/5): fail2ban-systemd-0.11.2-3.el7.noarch.rpm                                                                                                                                |  16 kB  00:00:02     
(5/5): fail2ban-server-0.11.2-3.el7.noarch.rpm                                                                                                                                 | 464 kB  00:00:04     
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                 111 kB/s | 530 kB  00:00:04     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Instalando    : fail2ban-server-0.11.2-3.el7.noarch                                                                                                                                             1/5 
  Instalando    : fail2ban-firewalld-0.11.2-3.el7.noarch                                                                                                                                          2/5 
  Instalando    : fail2ban-sendmail-0.11.2-3.el7.noarch                                                                                                                                           3/5 
  Instalando    : fail2ban-0.11.2-3.el7.noarch                                                                                                                                                    4/5 
  Instalando    : fail2ban-systemd-0.11.2-3.el7.noarch                                                                                                                                            5/5 
  Comprobando   : fail2ban-firewalld-0.11.2-3.el7.noarch                                                                                                                                          1/5 
  Comprobando   : fail2ban-systemd-0.11.2-3.el7.noarch                                                                                                                                            2/5 
  Comprobando   : fail2ban-server-0.11.2-3.el7.noarch                                                                                                                                             3/5 
  Comprobando   : fail2ban-0.11.2-3.el7.noarch                                                                                                                                                    4/5 
  Comprobando   : fail2ban-sendmail-0.11.2-3.el7.noarch                                                                                                                                           5/5 

Instalado:
  fail2ban.noarch 0:0.11.2-3.el7                                                                fail2ban-systemd.noarch 0:0.11.2-3.el7                                                               

Dependencia(s) instalada(s):
  fail2ban-firewalld.noarch 0:0.11.2-3.el7                           fail2ban-sendmail.noarch 0:0.11.2-3.el7                           fail2ban-server.noarch 0:0.11.2-3.el7                          

¡Listo!
[root@repslave2 ~]#

Iniciamos el servicio y lo habilitamos para que inicie cuando nuestro servidor se reinicie

[root@repslave2 ~]# systemctl enable fail2ban
Created symlink from /etc/systemd/system/multi-user.target.wants/fail2ban.service to /usr/lib/systemd/system/fail2ban.service.
[root@repslave2 ~]# systemctl start fail2ban
[root@repslave2 ~]# systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
   Active: active (running) since jue 2023-06-15 10:49:52 -05; 5s ago
     Docs: man:fail2ban(1)
  Process: 21156 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
 Main PID: 21158 (fail2ban-server)
   CGroup: /system.slice/fail2ban.service
           └─21158 /usr/bin/python2 -s /usr/bin/fail2ban-server -xf start

jun 15 10:49:52 repslave2 systemd[1]: Starting Fail2Ban Service...
jun 15 10:49:52 repslave2 systemd[1]: Started Fail2Ban Service.
jun 15 10:49:52 repslave2 fail2ban-server[21158]: Server ready
[root@repslave2 ~]# 

Perfecto! Ya tenemos instalado fail2ban. ahora procedemos a configurar los servicios que queremos bloquear por intentos fallidos.

Copiamos el archivo de configuración general a  un archivo que podamos modificar en nuestro servidor

[root@repslave2 ~]# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
[root@repslave2 ~]# 

Editamos el archivo recién creado , nos fijamos en las siguientes líneas

# "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban
# will not ban a host which matches an address in this list. Several addresses
# can be defined using space (and/or comma) separator.
#ignoreip = 127.0.0.1/8 ::1


# "bantime" is the number of seconds that a host is banned.
bantime  = 10m

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 10m

# "maxretry" is the number of failures before a host get banned.
maxretry = 5

ignoreip = aquí va la dirección IP o nombre de servidor que queremos que no se tenga en cuenta para los bloqueos. Este es un servidor de confianza.

bantime = Tiempo en que permanecerá bloqueada la ip “sospechosa”

findtime = Este tiempo es un indicador del periodo que se cubre en donde el servidor “sospechoso” ha realizado intentos fallidos a nuestra máquina

maxretry = Es el número de intentos fallidos que se realizan antes de ser bloqueada la IP

Esta sería la configuración general. Ahora vamos a configurar el servicio ssh como ejemplo para que a partir de este ejemplo podamos realizar la configuración de otros servicios.

Como buena práctica creamos un archivo por servicio, en este caso vamos a crear el archivo correspondiente al servicio ssh, este será /etc/fail2ban/jail.d/sshd.local 

Y agregamos lo siguiente

[sshd]
enabled = true
port = ssh
action = iptables-multiport
logpath = /var/log/secure
maxretry = 5
bantime = 600

[root@repslave2 ~]# cat   /etc/fail2ban/jail.d/sshd.local
[sshd]
enabled = true
port = ssh
action = iptables-multiport
logpath = /var/log/secure
maxretry = 5
bantime = 600
[root@repslave2 ~]#

enabled = lo dejamos en true para que se active la política correspondiente a ssh

port = ssh  el puerto de servicio mencionado por el cual fail2ban vigilará el servicio.

action = describe la acción y pasos que fail2ban debe realizar para bloquear o desbloquear una dirección IP

logpath = se refiere al archivo de log que fail2ban debe verificar intentos fallidos

maxretry y bantime tienen el mismo significado del archivo principal, solo que podemos definir tiempos distintos para cada servicio. Los valores aquí indicados son en segundos.

Listo, una vez realizamos los ajustes necesarios, procedemos a reiniciar el servicio fail2ban

[root@repslave2 fail2ban]# systemctl restart fail2ban.service 
[root@repslave2 fail2ban]# systemctl status fail2ban.service 
● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
   Active: active (running) since vie 2023-06-16 11:43:35 -05; 6s ago
     Docs: man:fail2ban(1)
  Process: 24354 ExecStop=/usr/bin/fail2ban-client stop (code=exited, status=0/SUCCESS)
  Process: 24357 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
 Main PID: 24361 (fail2ban-server)
   CGroup: /system.slice/fail2ban.service
           └─24361 /usr/bin/python2 -s /usr/bin/fail2ban-server -xf start

jun 16 11:43:35 repslave2 systemd[1]: Starting Fail2Ban Service...
jun 16 11:43:35 repslave2 systemd[1]: Started Fail2Ban Service.
jun 16 11:43:35 repslave2 fail2ban-server[24361]: Server ready
[root@repslave2 fail2ban]#

Para ver el estado de las políticas del servicio ssh en fail2ban ejecutamos el siguiente comando fail2ban-client status

[root@repslave2 fail2ban]#  fail2ban-client status
Status
|- Number of jail:	1
`- Jail list:	sshd
[root@repslave2 fail2ban]#

Como podemos ver, el servicio ssh se encuentra en monitoreo por fail2ban, además podemos ejecutar el comando fail2ban-client status sshd para ver si hay IPs en la lista de rechazados.

[root@repslave2 fail2ban]#  fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:	0
   |- Total banned:	0
   `- Banned IP list:	
[root@repslave2 fail2ban]#

Cuando tenemos IPs rechazadas, las podemos ver con el comando anterior, en el siguiente ejemplo vemos una IP rechazada. Realicé un intento de acceso por ssh de forma erronea para ilustrar el ejemplo.

[root@repslave2 fail2ban]#  fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	5
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:	1
   |- Total banned:	1
   `- Banned IP list:	192.168.10.237
[root@repslave2 fail2ban]# 

En este caso la IP rechazada es la 192.168.10.237

A nivel general, cuando ejecutamos el comando iptables -L -n vemos las ips bloqueadas

[root@repslave2 fail2ban]# iptables -L -n
   
.....

Chain f2b-sshd (1 references)
target     prot opt source               destination         
REJECT     all  --  192.168.10.237       0.0.0.0/0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
[root@repslave2 fail2ban]#

Esto indica que nuestra configuración se ha llevado a cabo de forma exitosa.

Esto es todo…. Saludos…