Fail2ban es un marco de software de prevención de intrusiones que protege los servidores informáticos principalmente de ataques de fuerza bruta, prohibiendo agentes de usuario maliciosos, prohibiendo escáneres de URL y mucho más. Fail2ban logra esto leyendo los registros de acceso/error de su servidor o aplicaciones web. Fail2ban está codificado en el lenguaje de programación python.
La guía brindará un resumen de la instalación de Fail2ban en AlmaLinux 8 y algunos consejos y configuración básica.
Requisitos
- SO recomendado: AlmaLinux 8.
- Cuenta de usuario: Una cuenta de usuario con privilegios sudo o acceso raíz (comando su) .
Actualización del sistema operativo
Actualiza tu AlmaLinux sistema operativo para asegurarse de que todos los paquetes existentes estén actualizados:
sudo dnf upgrade --refresh -y
El tutorial usará el comando sudo y asumiendo que tiene estado sudo . Para verificar el estado de sudo en su cuenta:
sudo whoami
Ejemplo de salida que muestra el estado de sudo:
[joshua@localhost ~]$ sudo whoami
root
Si no ha configurado una cuenta de usuario sudo y desea hacerlo, visite nuestro tutorial sobre Cómo agregar un usuario a Sudoers en AlmaLinux .
Para usar la cuenta raíz , use el siguiente comando con la contraseña de root para iniciar sesión.
su
Instalar repositorio EPEL
El primer paso es importar el repositorio desde EPEL (Extra Packages for Enterprise Linux) de la siguiente manera:
sudo dnf install epel-release
Ejemplo de salida:
Escriba "Y", luego presione la “TECLA ENTER” para continuar con la instalación.
Siempre es una buena idea verificar si el repositorio se agregó correctamente; esto se puede hacer con el comando dnf repolist como a continuación:
sudo dnf repolist
Ejemplo de salida:
Como puede ver, el repositorio EPEL se agrega correctamente. Sugerencia útil, puede reutilizar este comando para ver futuras importaciones del repositorio.
Configurar cortafuegos
Por defecto, AlmaLinux viene con firewalld instalado. Para verificar esto, use el siguiente comando:
sudo dnf info firewalld
Ejemplo de salida:
Como puede ver, esto está instalado en AlmaLinux 8 por defecto; además, debería habilitarse automáticamente en su sistema.
Para confirmar esto, use el siguiente comando systemctl :
sudo systemctl status firewalld
Ejemplo de salida:
Otro truco útil con firewalld es usar el comando firewall-cmd –state para verificar si se está ejecutando o no:
sudo firewall-cmd --state
Ejemplo de salida:
running
Si su firewalld está apagado, para iniciarlo use lo siguiente:
sudo systemctl start firewalld
Para volver a habilitarlo para que se inicie en el arranque del sistema, use lo siguiente:
sudo systemctl enable firewalld
Ejemplo de salida si tiene éxito:
Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.
Si se eliminó su firewall, puede volver a instalar firewalld con el siguiente comando:
sudo dnf install firewalld
Finalmente, para verificar las reglas actuales antes de que fail2ban agregue otras nuevas, enumere las existentes para familiarizarse con firewalld:
sudo firewall-cmd --list-all
Ejemplo de salida:
Instalar Fail2ban
Ahora que tiene instalado el repositorio EPEL, es hora de instalar fail2ban y el paquete adicional fail2ban-firewalld, que configurará correctamente Fail2ban para que funcione con firewalld para uso futuro.
sudo dnf install fail2ban fail2ban-firewalld
Ejemplo de salida:
Tipo Y, luego presione la TECLA ENTER para continuar con la instalación.
De forma predeterminada, fail2ban no estará activo, por lo que debe iniciarlo manualmente con el siguiente comando systemctl :
sudo systemctl start fail2ban
Luego, para habilitar fail2ban en el arranque del sistema, use lo siguiente:
sudo systemctl enable fail2ban
Verifique el estado con el siguiente comando:
sudo systemctl status fail2ban
Ejemplo de salida:
Por último, verifique la versión y compilación de fail2ban:
fail2ban-client --version
Ejemplo de salida:
Fail2Ban v0.11.2
Cómo configurar Fail2ban
Después de completar la instalación, ahora debemos realizar algunos ajustes y configuraciones básicas. Fail2ban viene con dos archivos de configuración que se encuentran en /etc/fail2ban/jail.conf y la cárcel fail2ban predeterminada /etc/fail2ban/jail.d/00-firewalld.conf . No modifique estos archivos. Los archivos de configuración originales son sus originales y serán reemplazados en cualquier actualización de Fail2ban en el futuro.
Ahora puede preguntarse cómo configuramos Fail2ban como si actualizara y perdiera su configuración. Simple, creamos copias que terminan en .local en lugar de .conf como fail2ban siempre leerá .local archivos antes de cargar .conf .
Para hacer esto, use los siguientes comandos.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Por defecto, jail.local está configurado para usar IPTABLES . Para simplificar las cosas, en lugar de usar 00-firewalld.conf/jail y creando sus reglas desde cero, abra jail.local y vaya a la línea 208 y reemplace :
Abrir jail.local:
sudo nano /etc/fail2ban/jail.local
Buscar Ol código d (IPTABLES):
anaction = iptables-multiport
banaction_allports = iptables-allports
Reemplazar con (FIREWALLD):
banaction = firewallcmd-rich-rules[actiontype=]
banaction_allports = firewallcmd-rich-rules[actiontype=]
A continuación, el tutorial repasará algunas configuraciones que puede usar o modificar a su gusto. Tenga en cuenta que la mayoría de las configuraciones están comentadas; el tutorial descomentará las líneas en cuestión o modificará las existentes en la configuración del ejemplo.
Recuerde, estas son configuraciones opcionales, y puede configurar lo que quiera si sabe más sobre fail2ban y tiene la confianza.
Incremento de tiempo de prohibición
La primera configuración con la que se encontrará es incrementos de tiempo de bloqueo. . Debe habilitar esto cada vez que el atacante regrese. Aumentará el tiempo de prohibición, evitando que su sistema vuelva a prohibir constantemente la misma IP si los períodos de tiempo de prohibición son menores; por ejemplo, 1 hora, querrá que sea más larga si el atacante regresa x5 veces.
También debe establecer un multiplicador o factor para que funcione la lógica de aumento de prohibición. Puedes elegir cualquiera de estos; sin embargo, en nuestra guía, preferimos los multiplicadores, como se destaca en nuestro ejemplo a continuación, ya que puede establecer aumentos de tiempo de prohibición personalizados a su gusto. Hay más explicaciones en la configuración de las matemáticas detrás de esto.
Ejemplo a continuación:
IPs en la lista blanca en Fail2ban
A continuación en la lista, nos encontramos con las opciones de inclusión en la lista blanca, descomente lo siguiente y aborde las direcciones IP que desea incluir en la lista blanca.
ignoreip = 127.0.0.1/8 ::1 180.53.31.33 (example IP address)
Asegúrese de dejar espacios o comas entre las direcciones IP. También puede incluir rangos de IP en la lista blanca.
Ejemplo a continuación:
Configuración predeterminada del tiempo de bloqueo
Los valores predeterminados de tiempo de prohibición son 10 minutos predeterminados con un buscador de 10 minutos en 5 reintentos. Una explicación de esto es que la cárcel Fail2ban con filtrado bloqueará a su atacante durante 10 minutos después de que haya vuelto a intentar el mismo ataque en 10 minutos (tiempo de búsqueda) x 5 veces (reintentos). Puede establecer algunas configuraciones de prohibición predeterminadas aquí.
Sin embargo, cuando llegue a las cárceles, se recomienda establecer diferentes tiempos de bloqueo, ya que algunos bloqueos deberían ser automáticamente más largos que otros, incluidos los reintentos que deberían ser más o menos.
Ejemplo a continuación:
Correo electrónico configurado con Fail2ban
Puede configurar una dirección de correo electrónico para que Fail2ban envíe informes. La acción predeterminada =%(action_mw)s que prohíbe la IP infractora y envía un correo electrónico con un informe whois para que lo revise. Sin embargo, en su carpeta action.d, existen otras opciones de correo electrónico para informar no solo a usted mismo, sino también para enviar correos electrónicos a los proveedores de la lista negra y al ISP del atacante para informar.
Ejemplo a continuación:
# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = [email protected]
# Sender e-mail address used solely for some actions
sender = [email protected]
Tenga en cuenta que, de forma predeterminada, Fail2ban utiliza sendmail MTA para notificaciones por correo electrónico. Puede cambiar esto a la función de correo haciendo lo siguiente:
Cambiar de:
mta = sendmail
Cambiar a:
mail = sendmail
Cárceles Fail2ban
A continuación, llegamos a las cárceles. Puede establecer cárceles predefinidas con filtros y acciones creadas por la comunidad que cubren muchas aplicaciones de servidor populares. Puede crear cárceles personalizadas o encontrar cárceles externas en varios gists y sitios web comunitarios; sin embargo, configuraremos las cárceles de paquetes Fail2ban predeterminadas.
Configuración predeterminada para todas las cárceles según la imagen a continuación. Observe cómo nada está habilitado.
Ejemplo a continuación:
[apache-badbots]
# Ban hosts which agent identifies spammer robots crawling the web
# for email addresses. The mail outputs are buffered.
port = http,https
logpath = %(apache_access_log)s
bantime = 48h
maxretry = 1
Por lo tanto, tenemos un servidor Apache 2 HTTP y, al igual que filtrar/prohibir los bots malos, todo lo que necesita hacer es agregar enable =true como en el ejemplo a continuación.
[apache-badbots]
# Ban hosts which agent identifies spammer robots crawling the web
# for email addresses. The mail outputs are buffered.
enabled = true
port = http,https
logpath = %(apache_access_log)s
bantime = 48h
maxretry = 1
Observe cómo el reintento máximo es igual a 1 y el tiempo de bloqueo es de 48 horas. Esta es una configuración individual de duración máxima de reintentos y prohibiciones para esta cárcel que aumentará automáticamente con el multiplicador de prohibiciones que configuramos anteriormente en la guía. Si falta alguno de los filtros, puede agregarlo como ejemplo.
[apache-noscript]
enabled = true
port = http,https
logpath = %(apache_error_log)s
Cambie el siguiente ejemplo a continuación:
[apache-noscript]
enabled = true
port = http,https
logpath = %(apache_error_log)s
bantime = 1d
maxretry = 3
A continuación, le gustaría tener acciones diferentes a las especificadas en su configuración predeterminada en /etc/fail2ban/jail.local, acciones adicionales que puede encontrar en el directorio action.d. Se pueden configurar fácilmente diferentes acciones de este directorio siguiendo las instrucciones dentro de esas líneas de configuración de acciones en los archivos, recordando cambiarles el nombre primero a .jail sobre .conf, y luego agregar lo siguiente a su configuración de cárcel.
[apache-botsearch]
enabled = true
port = http,https
logpath = %(apache_error_log)s
banaction = action_mw
cloudflare
bantime = 72h
maxretry = 1
Como puede ver, agregamos action_mw, por lo que bloquea automáticamente según nuestra acción predeterminada y nos envía un informe por correo electrónico con whois, luego la siguiente acción, si usa Cloudflare, también bloqueará la dirección IP en el servicio. Recuerde, Cloudflare necesita configurarse antes de su uso. Lea el archivo action.d cloudflare.conf .
Una vez que esté satisfecho con su configuración, ejecute el siguiente comando para reiniciar fail2ban para cargar sus nuevas cárceles.
sudo systemctl restart fail2ban
Ejemplos de uso de Fail2ban-client
Ahora que ya está funcionando con Fail2ban, necesita conocer algunos comandos operativos básicos. Hacemos esto usando el comando fail2ban-client. Es posible que deba tener privilegios de sudo, según su configuración.
Prohibir una dirección IP:
sudo fail2ban-client set apache-botsearch banip <ip address>
Desbloquear una dirección IP:
sudo fail2ban-client set apache-botsearch unbanip <ip address>
Comando para abrir el menú de ayuda si necesita encontrar configuraciones adicionales u obtener ayuda sobre una en particular.
sudo fail2ban-client -h
Comprobando Firewalld y Fail2ban
De forma predeterminada, firewalld debe configurarse para prohibir automáticamente cualquier IP en la que se prohíban las acciones de fail2ban. Para ver si esto funciona correctamente, use el siguiente comando:
Una prueba rápida es la ubicada en su cárcel [SSHD] y colocando habilitado =verdadero incluso si no está usando esta cárcel, ya que es solo una prueba, use el siguiente comando de prohibición:
sudo fail2ban-client set sshd banip 192.155.1.7
Ahora enumere las reglas enriquecidas de la lista de cortafuegos de la siguiente manera:
firewall-cmd --list-rich-rules
Ejemplo de salida:
rule family="ipv4" source address="192.155.1.7" port port="ssh" protocol="tcp" reject type="icmp-port-unreachable"
Como puede ver, fail2ban y firewalld funcionan correctamente para un entorno real.
Monitoreo de registros de Fail2ban
Muchos errores comunes son establecer cárceles y marcharse sin probar o monitorear lo que están haciendo. Revisar los registros es esencial, el registro de fail2ban está en su ruta predeterminada /var/log/fail2ban.log .
Si tiene un servidor que recibe un tráfico decente, un excelente comando para ver en vivo para ver cualquier problema y vigilarlo mientras trabaja en otros servidores es usar el comando tail -f a continuación.
sudo tail -f /var/log/fail2ban.log
El comando puede resultar útil para realizar comprobaciones puntuales sin tener que sumergirse en el registro.
Desinstalar Fail2ban
Si ya no necesita Fail2ban, para eliminarlo de su sistema, use el siguiente comando:
sudo dnf autoremove fail2ban fail2ban-firewalld
Ejemplo de salida:
Tipo Y, luego presione la TECLA ENTER para continuar con la desinstalación.
Tenga en cuenta que esto también eliminará todas las dependencias no utilizadas que se instalaron con Fail2ban.