
Desplegant Crowdsec de manera centralitzada
Com passa el temps… ja fan dos anys que parlem per primera vegada de Crowdsec… Tinc intenció de fer uns documents actualitzats de les possibilitats del seu desplegament, ja que és un producte molt interessant per protegir les nostres organitzacions davant d'amenaces i ens ofereix moltíssimes possibilitats interessants.
En anteriors posts potser més detallats ja descrivim les possibilitats de Crowdsec, però per fer una introducció per als que no el coneguin, és un programari que es pot instal·lar en diferents tipus de màquines, amb SO Windows, Linux… I l'objectiu és protegir aquesta màquina (o la teva xarxa), llegint els logs de la màquina prendrà decisions, com pugui ser nyar la IP que li ha realitzat un intent d'atac, o algú s'hagi validat malament, etc.…
Són diversos components, té un agent que processa els logs de la màquina, dels serveis que corri, com per exemple puguin ser del visor de successos, d' un IIS, Nginx, Apache, MariaDB, Exchange, Núvol següent, SMB, RDP… compara els logs amb els diferents escenaris i envia les alertes al servei LAPI (local API); que rep les alertes i les converteix en decisions (basant-nos en les proteccions que hàgim configurat). I després tenim el bouncer (o component de remediació), consulta les decisions al LAPI i les aplica; per exemple el bouncer del firewall, que crearà regles al FW del SO denegant l'accés a l'adreça IP que ha generat un atac.
En principi encara que sembli el contrari és molt senzill, s'instal·len tots els components junts en instal·lar l'Agent de Crowdsec (o Engine). En instal·lar-se el Crowdsec en un Windows o en un Linux detectarà els serveis que corre la màquina, i per tant ja quedaran protegits, si és un Linux i té (per exemple) un Nginx ja llegirà i tractarà els logs del SO, així com els del mateix Nginx, buscant patrons que detectin l'intent d'abús per part de vulnerabilitats, escanejos, accessos no deguts… A més es podran afegir altres tipus de 'col·leccions’ per llegir un altre tipus de logs, per si en aquest Nginx corre un Nextcloud, i volem que Crowdsec tracti també els logs de Nextcloud…
El que s'ha dit, és senzill, és nou si no el coneixes, però està molt ben plantejat, si l'instal·lem en un Windows Server, ídem, detectarà si tenim per exemple un IIS instal·lat, o un SQL Server… i segons instal·lem l'Agent de Crowdsec detectarà patrons en els logs del visor de successos per protegir-nos. I el dit, si aquest IIS corre algun servei en particular, doncs també podrem protegir-lo, sigui per exemple un Exchange (tant OWA com SMTP) podent llegir els seus logs específics.
El que ens quedaria és poder aplicar les accions, que si llegeix alguna cosa que no li agrada en un log, actuï. Per a això, habitualment a Windows i Linux necessitem instal·lar posteriorment el bouncer del firewall, el que s' ha dit, perquè aquest component de remediació pugui crear una regla en el firewall del sistema operatiu, del Windows o del Linux, una regla temporal, de denegació, bloquejant l' accés de l' adreça IP atacant.
Així tenim protegides les nostres màquines Windows o Linux, però entre elles no es parlen, i seria interessant que es puguin comunicar entre elles. Així que aquest pas és opcional, potser per a entorns petits, però per suposat totalment recomanat per a qualsevol organització. Podrem crear fàcilment en un contenidor de Docker un servidor de Crowdsec, per dir, aquest servidor compartirà mitjançant LAPI una base de dades centralitzada amb totes les decisions, per a què? Per si ens interessa que si una màquina rep un atac, la resta de màquines Crowdsec s' assabentin i efectuïn una acció, com sigui protegir-se i banear una adreça IP en particular, totes alhora. I un altre dels contenidors que desplegarem és Crowdsec blocklist mirror, pura màgia, aquest contenidor publicarà en una URL la llista negra que comparteixen totes les màquines de Crowdsec. Per a què? Per poder accedir-hi des dels nostres firewalls interns o perimetrals tipus Fortigate, CheckPoint, pfSense… i fer regles de denegació, entre xarxes, des de la WAN… i aïllar directament els atacants a un altre nivell.
Bo, després d'aquesta parrafada, i ja sent la brasa, el document d'avui està basat en com desplegar aquesta última part que hem parlat, vam desplegar la infraestructura central, vam desplegar aquests contenidors i a futur en altres documents veurem com instal·lar Crowdsec en un Windows i protegir-lo, centralitzat o no; així com un Linux.
Desplegament de Crowdsec per a entorn multi servidor
mkdir crowdsec cd crowdsec
Comencem per exemple en un Ubuntu Server, amb el seu FQDN, una adreça IP estàtica, amb NTP ben configurat, actualitzat i amb Docker instal·lat. Anem a veure què ràpid es despleguen aquests dos contenidors. Creem un directori, entrem, i comencem. Crearem el fitxer docker-compose.yml amb el següent contingut:
version: '3' services: crowdsec: image: crowdsecurity/crowdsec restart: always ports: - '8080:8080' - '6060:6060' volumes: - ./crowdsec-db:/var/lib/crowdsec/data/ - ./crowdsec-config:/etc/crowdsec/ crowdsec-blocklist-mirror: container_name: crowdsec-blocklist-mirror image: crowdsecurity/blocklist-mirror depends_on: - "crowdsec" ports: - 41412:41412 volums: - ./cfg.yaml:/etc/crowdsec/bouncers/crowdsec-blocklist-mirror.yaml volumes: crowdsec-db: crowdsec-config:
El que s'ha dit, ens desplegarà dos contenidors, Crowdsec que actuarà en principi com a servidor LAPI en el 8080 i en el 6060 si interessa escopirà mètriques, al port 41412tcp tindrem el contenidor que publica la blocklist, un mirror.
Descarreguem i arrenquem els contenidors amb:
sudo docker compose up -d
La primera vegada, el contenidor del Blocklist-Mirror no s'aixecarà ja que necessita accés amb el seu API key, així que creem el primer bouncer, per a les Blocklists:
sudo docker exec -it crowdsec-crowdsec-1 cscli bouncers add BlocklistMirror
Bé, aturem el contenidor de Crowdsec i esborrem el fitxer de configuració per recrear-lo a continuació.
sudo docker stop crowdsec-crowdsec-1 rm -rf cfg.yaml/
I creem amb 'nano cfg.yaml’ el fitxer de configuració, que ha de ser alguna cosa com això, tenir en compte que haureu d'indicar l'API key que li hem demanat a Crowdsec i indicar l'adreça IP per la qual publicarem el servei LAPI. Així com a la Blocklist afegir l'adreça IP que es connectarà i tindrà accés a la URL de la blocklist, per exemple el nostre firewall perimetral.
config_version: v1.0 crowdsec_config:
lapi_key: xxxxxxx lapi_url x: http://DIRECCION_IP_MAQUINA:8080
update_frequency: 10s include_scenarios_containing: []
exclude_scenarios_containing: []
only_include_decisions_from: []
insecure_skip_verify: false blocklists:
- format: plain_text # Supported formats are either of "plain_text"
endpoint: /security/blocklist authentication:
type: none # Supported types are either of "none", "ip_based", "basic"
user:
password:
trusted_ips: # IP rangs, or IPs which don't require auth to access this blocklist
- 127.0.0.1
- ::1
- 192.168.1.1
listen_uri: 0.0.0.0:41412
tls:
cert_file:
key_file:
metrics:
enabled: true endpoint: /metrics log_media: stdout log_level: info
Ja podrem iniciar el contenidor de Crowdsec de nou i el del Blocklist-Mirror finalment, executant:
sudo docker start crowdsec-crowdsec-1 sudo docker restart crowdsec-blocklist-mirror
Provem que podem accedir a la URL de la blocklist des de: http://DIRECCION_IP_MAQUINA:41412/security/blocklist
Inscriure'l a la CrowdSec Console
Serà totalment recomanable donar-nos d'alta en https://app.crowdsec.net i registrar en el nostre compte de Crowdsec Console. Des d'aquí podrem visualitzar l'estat dels nostres Agents o Engine de Crowdsec, podrem subscriure-les a altres llistes negres de la comunitat, gestionar les alertes, històrics… Per donar d'alta els nostres Crowdsec, ho farem des del web, “Security Engine” > “Engines” > “Add Security Engine”, ens sortirà un desplegable que copiarem i executarem en el nostre servidor de Crowdsec (per anomenar-lo d'alguna manera).
I ho executem, en aquest cas modifiquem una mica el comandament ja que l'executarem mitjançant Docker:
sudo docker exec -it crowdsec-crowdsec-1 cscli console enroll -e context xxxxxxxxxxxxx
Tornem a la Consola de Crowdsec (i si no ho veiem, F5), ens sortirà que ha detectat la nostra, posem en “Accept enroll”,
Un cop la tenim ja a l'inventari, podrem primerament editar-li el nom per reconèixer-la millor, sobre ella “Edit name or tags”,
Li posem el seu nom de màquina i posem en “Update”,
Podem seguir si volem per subscriure-la a certes Blocklists que ens ofereix Crowdsec, la comunitat… així la màquina estarà protegida de certes xarxes de bots, malvades… per a això, polsem sobre “Blocklist” on veiem que està subscrita a 0,
Posem en “Browse available blocklists”,
I aquí ens sortiran una sèrie de llistes, podrem escollir fins 3 de manera gratuïta amb el compte tipus Community, podrem triar el tipus de les llistes, les que més ens conveeixin, necessitem… sobre cadascuna d' elles, li donarem a “Manage”,
I en “Add Security Engine”,
Aquí ens sortiran les màquines que tinguin l'agent de Crowdsec instal·lat, seleccionem la màquina a subscriure i el tipus d' acció, si un bani a la IP o requerir-li un Captxa en accedir. “Confirm Subscription”.
En principi vam deixar aquí el document, podem dir que mínimament ha quedat l'escenari central, la màquina que oferirà els serveis de LAPI per a la resta d'Engines de Crowdsec o la llista negra als nostres firewalls perimetrals. Els següents passos ja seran desplegar els agents de Crowdsec on ho necessitem, i si ens interessa, doncs els integrem a aquesta instal·lació i així entre ells podran prendre decisions conjuntes.
Espero que us pugui aportar alguna cosa, aclarir si algun tenia dubtes o no el coneixia, o li apeteix implementar-lo en un LAB i anar provant solucions com aquestes, fàcils, senzilles, per a tota la família. I que aportem seguretat i ens anticipem a ensurts… Doncs que això, no? Ja sabeu, que em piro vampir, que espero que us vagi MOLT bé, abraçades!