Fail2ban (Español)

From ArchWiki
Esta traducción de Fail2ban fue revisada el 2020-08-07. Si existen cambios puede actualizarla o avisar al equipo de traducción.

Fail2ban escanea los archivos de registro (por ejemplo, /var/log/httpd/error_log) y prohíbe las IP que muestran signos maliciosos así como la que muestren muchos errores de contraseña, búsqueda de vulnerabilidades, etc. Normalmente, Fail2ban se utiliza para actualizar las reglas del cortafuegos a fin de rechazar las direcciones IP durante un período de tiempo específico, aunque también permite configurar cualquier otra acción (por ejemplo, enviar un correo electrónico).

Advertencia: El uso de un software de prohibición de IP detendrá los ataques triviales, pero debe apoyarse en un demonio adicional y un registro exitoso. Además, si el atacante conoce su dirección IP, puede enviar paquetes de red con un encabezado de origen falso y obtener su dirección IP prohibida. Asegúrese de especificar su IP en ignoreip.

Instalación

Instale fail2ban.

Utilización

Configure Fail2ban y active/inicie fail2ban.service.

fail2ban-client

fail2ban-client permite monitorear un «conjunto de reglas encapsuladas» (en adelante, cápsulas) (recarga, reinicio, estado, etc.). Para ver todas las órdenes disponibles:

$ fail2ban-client

Para ver todas las cápsulas activadas:

# fail2ban-client status

Para verificar el estado de una cápsula, por ejemplo para sshd:

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     9
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   0.0.0.0

Configuración

Debido a la posibilidad de que el archivo /etc/fail2ban/jail.conf se sobrescriba o actualice durante una puesta al día de la distribución, se recomienda crear un archivo local /etc/fail2ban/jail.local. Por ejemplo, para cambiar el tiempo de prohibición predeterminado a 1 día:

/etc/fail2ban/jail.local
[DEFAULT]
bantime = 1d

O cree archivos separados name.local en el directorio /etc/fail2ban/jail.d, por ejemplo /etc/fail2ban/jail.d/sshd.local.

Reinicie fail2ban.service para aplicar los cambios de configuración.

Activar cápsulas

Por defecto, todas las cápsulas están desactivadas. Añada enabled = true a la cápsula que desea usar, por ejemplo, para activar la cápsula OpenSSH:

/etc/fail2ban/jail.local
[sshd]
enabled = true

Vea #Cápsula SSH personalizada.

Recibir un correo electrónico de alerta

Si desea recibir un correo electrónico cuando alguien ha sido baneado, debe configurar un cliente SMTP (por ejemplo, msmtp) y cambiar la acción predeterminada, como se indica a continuación.

/etc/fail2ban/jail.local
[DEFAULT]
destemail = yourname@example.com
sender = yourname@example.com

# para prohibir y enviar un correo electrónico con un informe sobre «whois» al correo electrónico.
action = %(action_mw)s

# hace lo mismo que «action_mw» pero también envía líneas de registro relevantes.
#action = %(action_mwl)s

Firewall y servicios

Por defecto, Fail2ban utiliza Iptables. Sin embargo, la configuración de la mayoría de cortafuegos y servicios es sencilla. Por ejemplo, para usar Nftables:

/etc/fail2ban/jail.local
[DEFAULT]
banaction = nftables

Consulte /etc/fail2ban/action.d/ para ver otros ejemplos, por ejemplo ufw.conf.

Consejos y trucos

Cápsula SSH personalizada

Advertencia: Si el atacante conoce su dirección IP, puede enviar paquetes de red con un encabezado de origen falso y obtener su dirección IP bloqueada del servidor. SSH keys proporciona una solución elegante al problema de la fuerza bruta sin estos inconvenientes.

Edite /etc/fail2ban/jail.d/sshd.local, agregue esta sección y actualice la lista de direcciones IP confiables en ignoreip:

/etc/fail2ban/jail.d/sshd.local
[sshd]
enabled   = true
filter    = sshd
banaction = iptables
backend   = systemd
maxretry  = 5
findtime  = 1d
bantime   = 2w
ignoreip  = 127.0.0.1/8
Nota:
  • Podría ser necesario configurar LogLevel VERBOSE en /etc/ssh/sshd_config para permitir la monitorización completa por fail2ban, de lo contrario, los fallos de contraseña podrían no registrarse correctamente.
  • Fail2ban tiene soporte para IPv6 desde la versión 0.10. Adapte su cortafuegos en consecuencia, por ejemplo inicie/active ip6tables.service.
Sugerencia:
  • Si utiliza un front-end para iptables como ufw, se puede usar banaction = ufw en lugar de iptables.
  • Si opta por Shorewall, se puede usar banaction = shorewall y también establecer BLACKLIST en ALL en /etc/shorewall/shorewall.conf, de lo contrario, la regla agregada para prohibir una dirección IP afectará solo a las conexiones nuevas.

Fortalecer el servicio

Actualmente, Fail2ban debe ejecutarse como root. Por lo tanto, es posible que desee considerar fortalecer el proceso con systemd (Español).

Cree un archivo de configuración drop-in para fail2ban.service:

/etc/systemd/system/fail2ban.service.d/override.conf
[Service]
PrivateDevices=yes
PrivateTmp=yes
ProtectHome=read-only
ProtectSystem=strict
NoNewPrivileges=yes
ReadWritePaths=-/var/run/fail2ban
ReadWritePaths=-/var/lib/fail2ban
ReadWritePaths=-/var/log/fail2ban
ReadWritePaths=-/var/spool/postfix/maildrop
ReadWritePaths=-/run/xtables.lock
CapabilityBoundingSet=CAP_AUDIT_READ CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW

El parámetro CAP_DAC_READ_SEARCH de CapabilityBoundingSet permitirá a Fail2ban el acceso de lectura completa a cada directorio y archivo. Los parámetros CAP_NET_ADMIN y CAP_NET_RAW permitirán que Fail2ban funcione en cualquier cortafuegos que tenga una interfaz en línea de órdenes. Consulte capabilities(7) para obtener más información.

Al usar ProtectSystem=strict la jerarquía del sistema de archivos será de «solo lectura», ReadWritePaths permitirá que Fail2ban tenga acceso de escritura en las rutas que considere necesarias.

Cree /etc/fail2ban/fail2ban.local con la ruta correcta logtarget:

/etc/fail2ban/fail2ban.local
[Definition]
logtarget = /var/log/fail2ban/fail2ban.log

Cree el directorio /var/log/fail2ban/ como root.

Finalmente, recargue el demonio de systemd para aplicar los cambios de la unidad y reinicie fail2ban.service.

Véase también