Ambas herramientas leen registros y bloquean direcciones, y a primera vista CrowdSec es un Fail2ban con código más reciente. La diferencia es más sustancial que eso, y no está en la edad del código sino en el origen de la decisión de bloqueo.
La arquitectura
Fail2ban es un único proceso que lee registros, cuenta coincidencias de expresiones regulares y llama a un comando del cortafuegos. Cada decisión se toma en su máquina con sus contadores. No se envía nada a ninguna parte, no hay dependencias y la configuración son archivos de texto.
CrowdSec está dividido en dos, y eso es lo principal que hay que entender antes de instalarlo. El agente en sí solo detecta: analiza registros, aplica escenarios y escribe decisiones en su propia base. Las decisiones las aplica un programa aparte, el bouncer. Sin bouncer instalado, CrowdSec funciona, muestra alertas, mantiene una lista de decisiones y no bloquea nada.
Esa es la decepción más frecuente en el primer contacto: la herramienta está instalada, los ataques se ven, y el tráfico circula exactamente como antes.
sudo apt install crowdsec
sudo apt install crowdsec-firewall-bouncer-iptables
sudo cscli bouncers list
Ese último comando debe mostrar al menos una entrada registrada. Una lista vacía significa que no hay bloqueo.
La segunda diferencia: la reputación compartida
Fail2ban solo conoce lo ocurrido en su casa. Una dirección que ayer atacaba cien servidores ajenos está limpia para él hasta que llame a su puerta, y sus primeros cinco intentos son gratis.
CrowdSec envía las señales de sus detecciones a una red común y recibe de ahí una lista de direcciones vistas en otros sitios. Efecto práctico: una parte apreciable de los intentos se corta antes del primero. Eso importa especialmente contra ataques distribuidos —miles de direcciones con un intento cada una—, donde los contadores locales son impotentes por definición.
Y aquí lo que conviene saber de antemano: el intercambio es en ambas direcciones. De su servidor salen las direcciones de los atacantes y los tipos de escenarios disparados. Funcionar de forma totalmente local es posible —sin registrarse en la consola en la nube—, pero entonces la lista común también deja de estar disponible para usted y la ventaja principal desaparece. Es una decisión consciente, no un detalle de configuración.
Los comandos del día a día
sudo cscli metrics
sudo cscli alerts list
sudo cscli decisions list
sudo cscli decisions delete --ip 203.0.113.25
metrics responde a si los registros se están leyendo siquiera: si el número de líneas analizadas es cero, la colección para su servidor web no está instalada o la ruta del registro es errónea. Ese es el segundo caso más frecuente de «está instalado y no hace nada».
sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx
Los recursos
CrowdSec está escrito en Go y guarda su estado en una base. El consumo de memoria es del orden de cien megabytes, más el bouncer. En un servidor de un gigabyte se nota; a partir de dos, ya no. Fail2ban es más ligero, y hace menos.
¿Conviene tener ambos?
No se estorban: uno escribe sus reglas en el cortafuegos, el otro las suyas, y bloquear dos veces la misma dirección no perjudica a nada. Un reparto sensato es este.
CrowdSec se ocupa de lo masivo: los intentos contra SSH, el rastreo del servidor web, las direcciones malas conocidas de la lista común. Fail2ban se queda donde usted tiene un registro propio con formato propio, para el cual escribir una expresión regular es más simple que un escenario: una aplicación hecha en casa, un servicio poco común, un formulario de acceso particular.
Si hay que elegir uno, la referencia es esta: en un servidor con un sitio al que se hostiga constantemente, CrowdSec aporta más gracias a la lista común. En un servidor accesible solo para usted por SSH con claves, la diferencia es pequeña: allí la mayor parte del trabajo ya está hecha al desactivar las contraseñas.
Un límite común
Ninguno de los dos protege de una vulnerabilidad en una aplicación. Ambos trabajan con la frecuencia de peticiones y la reputación de una dirección, y una petición que aprovecha un agujero de una extensión al primer intento desde una dirección limpia pasará por delante de los dos. Ese es el trabajo de otras herramientas: un WAF en el nivel de las peticiones y actualizaciones a tiempo. Bloquear direcciones quita el ruido de fondo, no la causa.
El valor práctico de ambos depende de que alguien mire el resultado. Un número creciente de decisiones, un escenario disparado por primera vez, un cambio en los países de donde vienen los intentos: esa es la información para la que se instaló la herramienta. Cómo se ve en una página lo muestra la demostración de abajo.