CrowdSec con Nginx Proxy Manager para monitorizar la red y porteger tu entorno en un Docker

Tiempo de lectura: 3 minutos

Hoy vamos a aprender cómo podemos instalar y desplegar CrowdSec es una herramienta de monitorización de red en tiempo real, que nos permitirá detectar las ips maliciosas que realicen ataques y protegernos.

Lo primero que tenemos que hacer es registrarnos en su web de forma gratuita.

Una vez registrados, vamos a crear un Docker compose con toda la configuración necesaria:

Nos basaremos en la información oficial.

services:
  crowdsec:
    image: docker.io/crowdsecurity/crowdsec:latest
    container_name: crowdsec
    environment:
      - COLLECTIONS=crowdsecurity/nginx-proxy-manager
    volumes:
      - ./config/crowdsec/config:/var/lib/crowdsec/data/
      - ./config/crowdsec/db:/etc/crowdsec/
      - ./crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
      - ../nginx_proxy_manager/config/proxymanager/data/logs/:/var/log/npm:ro
    networks:
      - docker-network
    restart: unless-stopped
    security_opt:
      - no-new-privileges=true

networks:
  docker-network:
    driver: bridge
    external: true

Ahora modificaremos un poco nuestro contenedor de nginx proxy manager:

Añadiremos lo siguiente:

    environment:
      CROWDSEC_OPENRESTY_BOUNCER: |
        ENABLED=true
        API_URL=http://crowdsec:8080
        API_KEY=${CROWDSEC_BOUNCER_APIKEY}
    security_opt:
      - no-new-privileges=true

Para el API KEY, crearemos un .env que rellenaremos con la información que vamos a generar en los siguientes pasos.

Además modificaremos la imagen por este fork. Ya que será el que nos permita bloquear las IPs. El resto de configuración de nuestro nginx proxy manager, la mantiene por lo que no se nos borrará nada. Aun así puedes copiarte las carpetas en un backup.

 image: 'lepresidente/nginxproxymanager:latest'
 #image: 'jc21/nginx-proxy-manager:latest'

Ahora creamos la clave bouncer para permitir la comunicación. Para ello ejecutamos:

docker compose up crowdsec -d
docker compose exec crowdsec cscli bouncer add npm-proxy

Copiamos la clave que devuelve y la añadimos en nuestro del nginx proxy manager .env

CROWDSEC_BOUNCER_APIKEY=

Y cerramos el contenedor

docker compose down

Ahora lo levantamos

docker compose up -d

También reiniciamos nuestro nginx proxy manager.

Y tambien podemos asignarlo a nuestra cuenta de esta forma:

docker exec crowdsec cscli console enroll XXXXX

Ahora activaremos los collections

docker exec crowdsec cscli collections install crowdsecurity/nginx-proxy-manager

Tendremos que reiniciar nuestro docker.

docker compose down
docker compose up -d

Testear: OJO, si bloqueamos manualmente la IP, corremos el riesgo de que el sistema autobloquee y propague ese bloqueo a otros sistemas. Si nos ocurriera esto, tendríamos que obtener una nueva IP reiniciando el router.

Para probar si funciona podemos bloquearnos a nosotros mismos (aquí podemos buscar nuestra IP)

docker exec -it crowdsec cscli decisions add -i xxx.xxx.xxx.xxx

o podemos añadir el tiempo de bloqueo

docker exec -it crowdsec cscli decisions add -ip xxx.xxx.xxx.xxx --duration 4h

Y si todo funciona bien, aparecerá este mensaje:

Para desbloquearnos tendremos que poner:

docker exec -it crowdsec cscli decisions remove -i xxx.xxx.xxx.xxx

En la web nos aparecerá toda la información:

Con gráficas de ataques y mitigaciones:

Algunos comandos interesantes:

  • Mostrar las métricas:
docker exec -it crowdsec cscli metrics
  • Obtener ultimas colecciones de escenarios de crowdsec
docker exec -it crowdsec cscli hub update
  • Actualizar la version crouwdsec
docker exec -it crowdsec cscli -v
  • Ver las alertas generadas
docker exec -it crowdsec cscli alerts list
  • Ver los bouncers instalados (sistema de mitigación)
docker exec -it crowdsec cscli bouncers list
  • Eliminar un bouncer
docker exec -it crowdsec cscli bouncers delete <BOUNCER_NAME>
  • Instalar coleccion de Nginx
docker exec -it crowdsec cscli collections install crowdsecurity/nginx
  • Instalar coleccion Nginx Proxy Manager
docker exec crowdsec cscli collections install crowdsecurity/nginx-proxy-manager
  • Coleccion de escenarios para WordPress
docker exec crowdsec cscli collections install crowdsecurity/appsec-wordpress
docker exec crowdsec cscli collections install crowdsecurity/wordpress
  • SQL
docker exec crowdsec cscli collections install crowdsecurity/mysql
  • Ver lista de escenarios activa
docker exec crowdsec cscli decisions list

Para evitar falsos positivos recomiendo desactivar http-probing:

docker exec crowdsec cscli scenarios remove crowdsecurity/http-probing --force

Y http-crawl-non_statics

docker exec crowdsec cscli scenarios remove crowdsecurity/http-crawl-non_statics --force

Podemos eliminar esta regla si nos saltan falsos positivos LePresidente/http-generic-401-bf

docker exec crowdsec cscli scenarios remove crowdsecurity/http-generic-bf --force

Aquí puedes descargar distintas listas de decisión: https://app.crowdsec.net/hub/collections

Deja un comentario