Fail2Ban es una utilidad de análisis de registro que analiza los archivos de registro de varios procesos y prohíbe las direcciones IP que generan demasiadas fallas de contraseña. Cuando se encuentra un intento de inicio de sesión, Fail2Ban agregará una nueva regla a iptables para bloquear la dirección IP del atacante, ya sea de manera temporal o permanente. También puede alertarlo por correo electrónico sobre lo mismo.
Se centra principalmente en la detección de intrusiones a través de SSH, pero se puede configurar para que funcione con cualquier servicio que utilice archivos de registro.
Requisitos
-
Un servidor basado en Fedora 33 o CentOS 8 con un usuario no root con privilegios sudo.
-
Instale el editor Nano porque eso es lo que usaremos.
$ sudo dnf install nano -y
Instalar Fail2Ban
Para instalar Fail2Ban en CentOS 8, primero debe instalar el repositorio EPEL Yum.
$ sudo dnf install epel-release
Fedora 33 viene con Fail2Ban.
Ejecute el siguiente comando para instalar Fail2Ban tanto en Fedora 33 como en CentOS 8.
$ sudo dnf install fail2ban
Una vez instalado, debemos habilitar el servicio.
$ sudo systemctl enable fail2ban
A continuación, inicie el servicio fail2ban.
$ sudo systemctl start fail2ban
Ahora puede comprobar el estado del servicio para ver si funciona correctamente.
$ sudo systemctl status fail2ban
? fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-11-02 21:15:59 UTC; 5s ago
Docs: man:fail2ban(1)
Process: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
Main PID: 19032 (f2b/server)
Tasks: 3 (limit: 1125)
Memory: 11.0M
CPU: 96ms
CGroup: /system.slice/fail2ban.service
??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Starting Fail2Ban Service...
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Started Fail2Ban Service.
Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server ready
Configurar Fail2Ban
El servicio Fail2Ban mantiene sus archivos de configuración en el /etc/fail2ban
directorio. Encontrará un archivo jail.conf
en eso. Este archivo generalmente se anula durante las actualizaciones de paquetes, por lo que no debe editarse.
En su lugar, todas las configuraciones deben hacerse en un nuevo archivo al que llamaremos jail.local
. La configuración en estos 2 archivos se puede anular aún más a través de archivos de /etc/fail2ban/jail.d/
directorio.
Las configuraciones se aplican en el siguiente orden:
/etc/fail2ban/jail.conf
etc/fail2ban/jail.d/*.conf
, Alfabéticamente/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
, Alfabéticamente
jail.conf
contiene un [DEFAULT]
sección seguida de secciones para servicios individuales. Cualquiera de estas secciones se puede anular definiéndolas en .local
archivos.
Configurar jail.local
Crearemos un nuevo jail.local
archivo.
$ sudo nano /etc/fail2ban/jail.local
Pegue el siguiente código en él.
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override backend=auto in /etc/fail2ban/jail.conf
backend = systemd
[sshd]
enabled = true
Presiona Ctrl + X para cerrar el editor y presiona Y cuando se le solicite guardar el archivo. Esto establece un nuevo bantime
predeterminado para todos los servicios, cambia el backend a systemd
y habilita el `sshd
cárcel.
Reinicie Fail2ban para implementar los nuevos cambios.
$ sudo systemctl restart fail2ban
Podemos confirmar la configuración recién aplicada usando fail2ban-client
utilidad.
$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
También podemos obtener el estado detallado de cada cárcel específicamente de la siguiente manera.
$ sudo 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:
Más configuraciones
jail.conf
proporciona muchas más configuraciones que se pueden personalizar usando /jail.local
expediente. A continuación, repasaremos algunos ajustes.
IP de lista blanca
Puede incluir en la lista blanca/ignorar las direcciones IP para que no sean bloqueadas por Fail2ban usando el siguiente código.
[DEFAULT]
ignoreip = 127.0.0.1/8 123.45.67.89
Si desea incluir IP en la lista blanca solo para ciertas cárceles, puede hacerlo a través de fail2ban-client
.
$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89
Reemplazar JAIL
en el comando anterior con el nombre de la cárcel, desea editar la configuración.
Tiempo de bloqueo y cantidad de reintentos
Hay 3 configuraciones que pueden establecer el tiempo y la cantidad de reintentos para una prohibición.
bantime
- es el tiempo en segundos durante el cual una IP está prohibida. Para establecer una prohibición permanente, establezca este valor en un número negativo. El valor predeterminado es 10 minutos o 600 segundos.
findtime
- es el tiempo que transcurre entre los intentos de inicio de sesión antes de que se establezca una prohibición. Este valor es siempre un número de segundos. Por ejemplo, si Fail2ban está configurado para prohibir una IP después de 5 intentos fallidos de inicio de sesión, esos 5 intentos deben ocurrir dentro del bantime
de 10 minutos establecido. límite.
maxretry
- es el número de reintentos desde una sola dirección IP antes de que se imponga una prohibición. El valor predeterminado es 3.
Para personalizar esta configuración, pegue las siguientes líneas en \etc\fail2ban\jail.local
archivo bajo el [DEFAULT]
sección.
bantime = 3600
findtime = 300
maxretry = 4
Alertas por correo electrónico
Para enviar alertas por correo electrónico, primero deberá instalar un Agente de transferencia de correo (MTA). Para nuestro propósito, instalaremos sendmail
.
$ sudo dnf install sendmail
Para recibir el correo electrónico, agregue el siguiente código en \etc\fail2ban\jail.local
archivo bajo [DEFAULT]
sección.
destemail = [email protected]
sendername = Fail2Ban
mta = sendmail
action = %(action_mw)s
destemail
se refiere a la identificación del correo electrónico de destino, que es la identificación en la que desea recibir los correos electrónicos, sendername
se refiere al nombre del remitente, por lo que estamos usando Fail2Ban para ello. mta
se refiere al Agente de transferencia de correo que se está utilizando, que es sendmail
aquí. Si está utilizando Postfix
, luego usa el valor mail
para el mta
variables.
action
se refiere a la acción predeterminada que se lleva a cabo una vez que se detecta una intrusión. El valor predeterminado es %(action_)s
que solo banea al usuario. %(action_mw)s
prohibirá y enviará un correo electrónico con un informe de Whois; mientras que %(action_mwl)s
prohibirá y enviará un correo electrónico con el informe Whois junto con la información de los archivos de registro relevantes. Esto también se puede cambiar según la cárcel.
Configuraciones para cárceles individuales
Como ya sabemos, [DEFAULT]
se aplica a todas las Cárceles, es hora de examinar algunas Cárceles específicas y sus configuraciones.
Cárcel SSHD
Ya hemos definido [sshd]
anteriormente en nuestro jail.local
expediente. Podemos personalizarlo un poco más con el siguiente código.
[sshd]
enabled = true
port = ssh
logpath = %(ssh_log)s
En este caso, estamos usando una variable predefinida ssh
para el puerto que es el puerto SSH predeterminado. Si está utilizando un puerto SSH diferente, debe cambiarlo. logpath
se refiere a la ubicación del archivo de registro a monitorear. %(ssh_log)s
utiliza un valor definido en el archivo de configuración estándar de Fail2ban (/etc/fail2ban/paths-common.conf
).
Cárcel de Nginx
Nginx tiene varios Jails que se pueden usar en Fail2Ban. Por ejemplo, si una parte de su sitio protegida por contraseña es atacada repetidamente, puede usar una sección [nginx-http-auth]
en jail.local
archivo para eso.
[nginx-http-auth]
enabled = true
También podemos agregar una sección llamada [nginx-botsearch]
para detener las solicitudes a carpetas o ubicaciones que no existen.
[nginx-badbots]
enabled = true
También hay otras cárceles de Nginx, pero no vienen preconfiguradas con Fail2Ban. Deben crearse manualmente y la mayoría de ellos pueden basarse en los de Apache con los que se envía Fail2Ban.
Filtros Fail2Ban y Failregexs
Hay otra configuración en la configuración de Fail2Ban llamada filtros. Los filtros deciden si una línea en el archivo de registro indica una autenticación fallida.
El valor del filtro en el archivo de configuración es una referencia a un archivo ubicado en /etc/fail2ban/filter.d
directorio con su .conf
extensión eliminada.
Puede ver qué tipo de filtros están disponibles consultando el directorio.
$ ls /etc/fail2ban/filter.d
Verá 2 archivos de registro para Nginx en él; nginx-badbots.conf
y nginx-http-auth.conf
.
Estos archivos de configuración usan expresiones regulares (regex) para analizar archivos de registro. Estos se llaman Failregexs. Puede personalizar o crear nuevos filtros escribiendo sus propias expresiones regulares. No cubriremos estas expresiones regulares en profundidad porque están fuera del alcance de este tutorial.
Supervisión de registros y firewall de Fail2Ban
Puede verificar el estado de Fail2Ban usando systemctl
como se indicó anteriormente.
$ sudo systemctl status fail2ban
Para obtener un poco más de detalles, puede usar journalctl
comando.
$ sudo journalctl -b -u fail2ban
También puede usar fail2ban-client
para consultar el estado de fail2ban-server
o y cárcel individual.
$ sudo fail2ban-client status
$ sudo fail2ban-client status jail_name
También puede consultar el archivo de registro de Fail2ban.
$ sudo tail -F /var/log/fail2ban.log
Puede enumerar las reglas actuales configuradas para iptables.
$ sudo iptables -L
También puede enumerar las reglas de iptables en un formato que refleje los comandos necesarios para habilitar esas reglas.
$ sudo iptables -S
Conclusión
Esto concluye nuestro tutorial sobre la instalación y configuración de Fail2Ban en un servidor basado en Fedora 33 o CentOS 8. Si tiene alguna pregunta, publíquela en los comentarios a continuación.