Uso y configuración de la API local de CrowdSec

Si es la primera vez que ve nuestras publicaciones, digamos algunas palabras sobre el proyecto. CrowdSec es una herramienta de código abierto que se utiliza para detectar y bloquear direcciones IP maliciosas en función de patrones de comportamiento locales. También es posible conectar listas de prohibiciones, tanto locales, generadas de forma independiente, como generales, que son creadas colectivamente por todos los usuarios de CrowdSec. Puede leer más sobre esto en nuestros artículos anteriores.



En la versión CrowdSec 1.x, se implementó una API local a la que pueden acceder tanto el cliente de la aplicación como el usuario a través de la línea de comandos, incluidas las máquinas remotas.

¿Qué puede hacer él?



Nuestra API local hace varias cosas. En primer lugar, permite que los porteros funcionen completamente, lo que protege la tranquilidad de su servidor o máquina. Y también es a través de la API que se lleva a cabo la contabilidad y seguimiento de las decisiones que toma el sistema.



Cuales son las soluciones? En primer lugar, se trata de un bloqueo por dirección IP o un rango completo de direcciones, si el ataque es masivo. También puede tener en cuenta el nombre de usuario o cualquier otro parámetro que desee configurar. Para que esto funcione, el portero solo necesita tener nuestra clave API generada en el lado del servidor de CrowdSec.



A través de la API, puede administrar soluciones y escenarios, enviar notificaciones del sistema al administrador, configurar alertas, etc. Como debería, la API es el único punto de entrada para el administrador a la infraestructura del sistema. En versiones anteriores de CrowdSec, muchas cosas, los mismos gorilas, se configuraban manualmente "en el lugar", lo que no era muy conveniente.



Empezando a usar la API



Supongamos que CrowdSec está instalado y tiene un cliente de línea de comandos (CLI). Su siguiente paso es la autenticación de API.



Para hacer esto, necesita generar una clave de rebote. La mayoría de los gorilas que se ofrecen en el centro de CrowdSec tienen un script de instalación listo para usar que lo hará por usted, pero si desea instalar todo manualmente, para obtener la clave, ingrese:



cscli bouncers add BouncerdeTest







Después de recibir la clave, debe recopilar el bouncer config:







Si necesita registrar la máquina, puede hacerlo de dos formas diferentes. Lo más fácil es usar el siguiente comando:



cscli machines add MachinedeTest –auto











Esta acción generará un nombre de usuario y una contraseña en un archivo de configuración yaml que luego podrá usar.







Esto funciona si está trabajando localmente en la misma computadora. Si está en una máquina remota, debe registrar su servidor API de la siguiente manera:



cscli lapi register -u <api_url>







Después de eso, debe verificar si la máquina se ha agregado en el servidor local donde hemos implementado la API. Esto se puede hacer con la siguiente línea:



cscli machines validate MachinedeTest







Para mostrar una lista de autos registrados, simplemente ejecute el comando:







Usando la API con gorilas



Ahora, una simple solicitud HTTP es suficiente para conectarse a través de la API. Esto es suficiente para el trabajo local. Si hablamos de máquinas remotas, recomendamos habilitar HTTPS.







Con respecto a las llamadas a la API del portero, tiene 2 métodos disponibles:



Modo de solicitud (getDecisions) El



modo de solicitud permite al portero enviar solicitudes de API para obtener información sobre las decisiones tomadas en rangos de IP específicos, direcciones IP específicas, nombres de usuario, etc.



Aquí se explica cómo llamar a la API (usando Curl) para solicitar información sobre la IP bloqueada:



curl -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions?ip=98.65.32.47







Como puede ver, pasamos la clave API y llamamos al parámetro? Ip para especificar la dirección IP de la que queremos recibir información.



Obtendremos la respuesta de retorno en formato JSON, por ejemplo:



[{"duration":"2h25m47.212560128s","id":1023,"origin":"cscli","scenario":"manual 'ban' from '939972095cf1459c8b22cc608eff85daEb4yoi2wiTD7Y3fA'","scope":"Ip","type":"ban","value":"1.2.3.4"}]







También puede usar el parámetro? Range para especificar el rango de la red o, si lo prefiere, usar el par de parámetros de alcance + valor para solicitar información sobre un nombre de usuario específico, ID de sesión, etc.



curl -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions?scope=username&value=korben







Existe otra opción. Este es el



modo Streaming (getDecisionsStream) El



modo Streaming funciona de manera un poco diferente, más simple porque permite al portero buscar soluciones nuevas o existentes a intervalos regulares.



Cuando el bouncer se está ejecutando, puede obtener las soluciones activas, así como las que acaba de eliminar, llamando a la API con el parámetro? Startup "true", por ejemplo:



curl -s -H "X-Api-Key: e73e3672427ecd8cd9a6487f7e8f4f03" http://localhost:8080/v1/decisions/stream?startup=true







Al establecer el parámetro? Startup en falso, solo recibirá las nuevas soluciones recibidas después de que se haya lanzado el bouncer.



{
  "deleted": null,
  "new": [
    {
      "duration": "3h59m57.641708614s",
      "id": 2410,
      "origin": "cscli",
      "scenario": "manual 'ban' from '939972095cf1459c8b22cc608eff85daEb4yoi2wiTD7Y3fA'",
      "scope": "Ip",
      "type": "ban",
      "value": "3.3.3.4"
    }
  ]
}

      
      





Si no se ha agregado ninguna solución, la respuesta devolverá "nulo":




{
  "deleted": null,
  "new": null
}

      
      





Utilice la API a través de Watcher (cscli o agente de CrowdSec)



Como se mencionó en la introducción, deberá proporcionar a la API una identificación de computadora y una contraseña. El uso de ciertas funciones de API (POST / DELETE) o (GET) se realiza principalmente a través de la interfaz de línea de comandos o el agente de CrowdSec, pero nada le impide trabajar con él directamente.







Por ejemplo, para eliminar una o más soluciones para una IP específica, haga lo siguiente: Después de ejecutar este comando, recibirá una línea en respuesta que le indica cuántas soluciones se eliminaron. Para aquellos que buscan profundizar en el código fuente, el repositorio de CrowdSec en Github tiene un código escrito en Go que le muestra cómo conectarse y usar la API.



curl -X DELETE "https://localhost:8080/v1/decisions?ip=98.65.32.47" -H "accept: application/json"



















Todos los métodos API están disponibles aquí.



Total



Como puede ver, la API local de CrowdSec es bastante fácil de aprender y usar junto con los gorilas. Estos últimos están escritos en Go y se adaptan a sus necesidades específicas. Los gorilas listos se pueden descargar aquí . También hemos escrito gorilas especiales para trabajar con Nginx, WordPress, HAProxy, iptables, nftables o incluso firewalls en la nube Amazon (AWS) y Google (Network FW y Cloud Armor). Sus fuentes también se pueden encontrar en Github . También tenemos gorilas para LUA y PHP .



Y, por supuesto, puede encontrar toda la información adicional, fuentes, enlaces útiles y manuales aún no publicados en Habré. en el sitio web oficial de CrowdSec .



All Articles