Cómo instalar y configurar Fail2Ban para proteger el servidor Linux
Esta guía detallada le enseña qué es Fail2Ban, cómo configurarlo y cómo usarlo para proporcionar una capa adicional de seguridad en su sistema Linux.
¿Qué es Fail2Ban?
Si ha habilitado SSH, verifique el historial de inicio de sesión de su servidor Linux. Te sorprenderá ver una gran cantidad de IP que intentan iniciar sesión en tu servidor a través de SSH.
Si no cuenta con ningún mecanismo para disuadir estos intentos de inicio de sesión, su sistema es susceptible a un ataque de fuerza bruta. Básicamente, un script/bot seguirá intentando conectar SSH a su sistema probando varias combinaciones de nombre de usuario y contraseñas.
Aquí es donde entra en escena una herramienta como Fail2Ban. Fail2Ban es un software gratuito y de código abierto que ayuda a proteger su servidor Linux contra inicios de sesión maliciosos. Fail2Ban prohibirá la IP (durante un tiempo determinado) si hay una cierta cantidad de intentos fallidos de inicio de sesión.
Fail2Ban funciona de inmediato con la configuración básica, pero también es extremadamente configurable. Puede modificarlo a su gusto y crear filtros y reglas según sus necesidades.
¿Suena interesante? ¿Por qué no probar Fail2Ban? Lea y siga el resto del artículo y pruebe Fail2Ban usted mismo.
Instalación de Fail2Ban en Linux
Puedes adivinar la popularidad de Fail2Ban por el hecho de que está disponible en los repositorios oficiales de las principales distribuciones de Linux. Esto hace que la instalación de Fail2Ban sea una tarea sencilla.
Instale Fail2Ban en CentOS y Red Hat
Debe ser usuario root o sudo para poder instalar nuevo software en su sistema.
Debe asegurarse de que su sistema esté actualizado y de tener instalado el repositorio EPEL.
sudo yum update && sudo yum install epel-release
Ahora puedes instalar Fail2Ban con el siguiente comando:
sudo yum install fail2ban
Instale Fail2Ban en Ubuntu y Debian
Primero, asegúrese de que su sistema esté actualizado:
sudo apt update && sudo apt upgrade -y
Ahora, instala Fail2Ban con este comando:
sudo apt install fail2ban
Comprender el archivo de configuración Fail2Ban
Hay dos archivos de configuración principales en Fail2Ban: /etc/fail2ban/fail2ban.conf y /etc/fail2ban/jail.conf. Déjame explicarte lo que hacen.
/etc/fail2ban/fail2ban.conf: este es el archivo de configuración para los ajustes operativos del demonio Fail2Ban. Aquí se definen configuraciones como nivel de registro, archivo de registro, socket y archivo pid.
/etc/fail2ban/jail.conf: aquí es donde ocurre toda la magia. Este es el archivo donde puede configurar cosas como el tiempo de prohibición predeterminado, el número de reintentos antes de prohibir una IP, incluir IP en la lista blanca, información de envío de correo, etc. Básicamente, usted controla el comportamiento de Fail2Ban desde este archivo.
Ahora, antes de cambiar estos archivos, Fail2Ban recomienda hacer una copia con el archivo .local para estos archivos de configuración. Esto se debe a que los archivos de configuración predeterminados se pueden sobrescribir en las actualizaciones y perderá todas sus configuraciones.
sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ahora comprendamos el archivo jail.conf. Si usa el comando less para leer este archivo grande, puede parecer bastante confuso. El archivo conf intenta explicar todo con demasiados comentarios. Entonces, déjame simplificarte esto.
El archivo jail.conf se divide en servicios. Hay una sección [Predeterminada] y se aplica a todos los servicios. Y luego podrás ver varios servicios con sus respectivas configuraciones (si las hay). Todos estos servicios están entre paréntesis. Verás secciones como [sshd], [apache-auth], [squid], etc.
Si elimino los comentarios, la sección predeterminada se ve así:
[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(name)s[mode=%(mode)s]
destemail = root@localhost
sender = root@
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb = abuseipdb
action = %(action_)s
Déjame decirte el significado de algunos de estos parámetros.
bantime: establece la duración de la prohibición. El valor predeterminado es 10 minutos.
findtime: La ventana en la que se realizará la acción sobre una IP. El valor predeterminado es 10 minutos. Supongamos que una determinada IP intentó un inicio de sesión incorrecto a las 10:30. Si la misma IP alcanza el número máximo de reintentos antes de las 10:40, será baneada. De lo contrario, el siguiente intento fallido después de las 10:40 se contará como primer intento fallido.
maxretry: el número de reintentos fallidos antes de que se realice una acción
usedns: la configuración "advertir" intenta utilizar DNS inverso para buscar el nombre de host y prohibirlo usando el nombre de host. Configurarlo en no prohibirá las IP, no el nombre de host.
destemail: La dirección de correo electrónico a la que se enviarán las alertas (es necesario configurarlo)
-
remitente: el nombre del remitente en el correo electrónico de notificación
mta: Agente de transferencia de correo utilizado para notificaciones por correo electrónico
banaction: este parámetro utiliza el archivo /etc/fail2ban/action.d/iptables-multiport.conf para configurar la acción después del máximo de reintentos fallidos.
protocolo: el tipo de tráfico que se eliminará después de la prohibición
Si desea realizar algún cambio en cualquier cárcel (o en todas las cárceles), como el número máximo de reintentos, el tiempo de prohibición, el tiempo de búsqueda, etc., debe editar el archivo jail.local.
Cómo utilizar Fail2Ban para proteger el servidor Linux
Permítame mostrarle algunas de las formas en que puede utilizar Fail2Ban para reforzar la seguridad de Linux.
Tenga en cuenta que debe ser usuario root o tener acceso sudo para ejecutar los comandos fail2ban.
Habilite Fail2Ban en su servidor y verifique todas las cárceles en ejecución
Puede utilizar los comandos systemd para iniciar y habilitar Fail2Ban en su servidor Linux:
systemctl start fail2ban
systemctl enable fail2ban
Una vez que Fail2Ban está habilitado, puedes ver el estado y las cárceles activas con el comando fail2ban-client:
fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
En caso de que se lo pregunte, sshd jail está habilitado de forma predeterminada.
Ver el registro de Fail2Ban
El registro de Fail2Ban se encuentra en /var/log/fail2ban.log. Los archivos de registro tienen el siguiente formato:
2019-03-25 07:09:08,004 fail2ban.filter [25630]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07
2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213
2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202
2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90
Puede ver que identifica las IP y las prohíbe cuando cruzan el umbral de reintento máximo.
Ver IP prohibidas por Fail2Ban
Una forma es comprobar el estado de una determinada cárcel. Puede utilizar el cliente Fail2Ban para este propósito.
fail2ban-client status <jail_name>
Por ejemplo, si tiene que ver todos los inicios de sesión ssh incorrectos prohibidos por Fail2Ban, puede usarlo de la siguiente manera. El resultado mostraría el total de intentos fallidos y el total de IP prohibidas.
root@test-server:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 14
| |- Total failed: 715
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 7
|- Total banned: 17
`- Banned IP list: 177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150
El sistema que intenta iniciar sesión a través de SSH desde el inicio de sesión fallido debería recibir un error como este
ssh: connect to host 93.233.73.133 port 22: Connection refused
Cómo banear permanentemente una IP con Fail2Ban
A estas alturas ya sabes que la prohibición impuesta a una IP por Fail2Ban es temporal. De forma predeterminada, es por 10 minutos y el atacante puede intentar iniciar sesión nuevamente después de 10 minutos.
Esto plantea un riesgo de seguridad porque los atacantes podrían utilizar un script que intente iniciar sesión después de un intervalo de 10 minutos.
Entonces, ¿cómo se puede poner una prohibición permanente usando Fail2Ban? No hay una respuesta clara para eso.
A partir de la versión 0.11 de Fail2Ban, el tiempo de prohibición se calculará automáticamente y el tiempo de prohibición de las IP persistentes aumentará exponencialmente.
Pero si verifica su versión de Fail2Ban, probablemente esté ejecutando la versión 0.10.
fail2ban-server --version
Fail2Ban v0.10.2
Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).
En versiones anteriores, podías usar un bantime negativo (bantime=-1) y eso habría sido equivalente a un ban permanente, pero si intentas este método, probablemente verás un error como 'Iniciando fail2ban: ERROR NOK: (' La imagen del disco de la base de datos tiene un formato incorrecto',)'.
Una solución no tan clara sería aumentar el tiempo de descanso a algo así como 1 día, 1 semana, 1 mes o 1 año. Esto podría solucionar el problema hasta que la nueva versión esté disponible en su sistema.
Cómo desbanear la IP bloqueada por Fail2Ban
Primero verifique si la IP está bloqueada o no. Dado que Fail2Ban funciona en iptables, puede consultar iptable para ver las IP que su servidor prohíbe:
iptables -n -L
Es posible que tengas que usar el comando grep si hay demasiadas IP prohibidas.
Si encuentra la dirección IP especificada en el resultado, está prohibida:
Entonces, el siguiente paso es encontrar qué “cárcel” está prohibiendo dicha propiedad intelectual. Tendrás que usar el comando Grep con los registros de fail2ban aquí.
Como puede ver en el resultado a continuación, sshd jail está prohibiendo la IP.
root@test-server:~# grep -E ‘Ban.*61.184.247.3’ /var/log/fail2ban.log
2019-03-14 13:09:25,029 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
2019-03-14 13:52:56,745 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
Ahora que conoce el nombre de la cárcel que bloquea la IP, puede desbloquear la IP utilizando el cliente fail2ban:
fail2ban-client set <jail_name> unbanip <ip_address>
Cómo incluir IP en la lista blanca en Fail2Ban
No será bueno que te prohíbas, ¿verdad? Para ignorar que una dirección IP sea prohibida por la sesión actual de Fail2Ban, puede incluir la IP en la lista blanca usando un comando como este:
fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>
Puede encontrar su dirección IP en Linux fácilmente. En mi caso fue
sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
`- 203.93.83.113
Si desea incluir permanentemente la IP en la lista blanca, debe editar el archivo de configuración de la cárcel. Vaya a dicha sección de cárcel y agregue la línea ignoreip como esta:
ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>
Si desea incluir una IP en la lista blanca de todas las cárceles de su sistema, sería una mejor idea editar el archivo /etc/fail2ban/jail.local y agregar una línea debajo de la sección DEFAULT como lo que vimos arriba.
Tendrás que reiniciar Fail2Ban para que este cambio entre en vigor.
Cómo ver la lista blanca de IP de una cárcel
Puedes ver todas las IP incluidas en la lista blanca de una cárcel usando este comando:
fail2ban-client get <JAIL_NAME> ignoreip
Debería mostrar todas las IP ignoradas por Fail2Ban para esa cárcel:
sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
|- 127.0.0.0/8
|- ::1
`- 203.93.83.113
Cómo eliminar una IP de la lista blanca de Fail2Ban
Si está eliminando la IP de la lista blanca de una cárcel determinada, puede usar este comando:
fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>
Si desea eliminar permanentemente la IP, debe editar el archivo /etc/fail2ban/jail.local.
¿Qué más?
Puedes hacer muchas más cosas con Fail2Ban. Esta guía le brinda los conceptos básicos para comenzar con Fail2Ban. No he tocado temas como acciones, notificaciones por correo, filtros, etc.
Una vez que conozca los conceptos básicos de Fail2Ban, podrá comenzar a explorar más al respecto. Por el momento, simplemente juegue con él y agregue una capa adicional de seguridad a SSH en su servidor Linux.