
Desplegant Crowdsec en una màquina Linux
Seguim amb Crowdsec! ja vam veure en documents anteriors els conceptes bàsics i com desplegar-lo de manera central i fins i tot en un Windows, així que avui veurem els passos que hem de seguir si volem instal·lar l'agent de Crowdsec en un equip amb Linux per protegir-lo d'amenaces externes.
Com imaginareu, la instal·lació dependrà de la distribució que usi la màquina, aquest document estarà basat en la instal·lació en un Ubuntu Server, que té crec recordar un Nginx servint alguna pàgina web. Així que hi anem, habitualment, s'entén que ho farem en un servidor Linux, que tingui algun servei publicat i vulguem protegir; i no per això obligatòriament hagi d' estar a Internet publicat. Començarem instal·lant-li el Crowdsec Security Engine, que és l' agent que s' encarregarà processar els seus logs, prendre les seves decisions… seguit li instal·larem el bouncer (o component de remediació) per al seu firewall de Linux, del seu SO (iptables en aquest cas), per si ens interessa que actuï i pugui donar d'alta regles en ell, bloquejant accessos temporals a adreces IP malvades. I acabarem registrant-lo a la Consola de Crowdsec.
Amb això ho tindrem gairebé, ja que el post continuarà, serà opcional, però si vas a voler una gestió centralitzada, hauràs de realitzar alguns passos addicionals; i això és, una decisió teva. Si et necessites, has de llegir-te abans el post previ.
Aquest post té la següent estructura:
- Instal·lació de l'Agent de Crowdsec
- Instal·lació del bouncer de Crowdsec Firewall iptables
- Registrant Crowdsec contra la Consola de Crowdsec
- Col·leccions
- Llista blanca
- Notificacions
- Provant-ho
- Registrant Crowdsec contra el nostre servidor LAPI
- Registrant el bouncer de Crowdsec contra el nostre servidor LAPI
Instal·lació de l'Agent de Crowdsec
El que s'ha dit, aquesta instal·lació està basada en un Ubuntu Server, si tens una altra distribució, échale un vistazo a la web oficial. Comencem instal·lant els repositoris oficials de Crowdsec mitjançant:
curl -s https://install.crowdsec.net | sudo sh
E instalamos Crowdsec, que com sabem ja, detectarà els serveis que podem estar fent servir a la màquina i ens descarregarà també les seves col·leccions per protegir-los, comencem:
sudo apt install crowdsec
Instal·lació del bouncer de Crowdsec Firewall iptables
Un cop instal·lat l'agent de Crowdsec també sabem que si no instal·lem un bouncer no podrem realitzar accions en aquesta màquina, així que instal·larem aquest component de remediació, en el meu cas en ser Ubuntu ús iptables, així que procedim a la seva:
sudo apt install crowdsec-firewall-bouncer-iptables
Registrant Crowdsec contra la Consola de Crowdsec
Imagino que ja tindrem un compte en https://app.crowdsec.net sabem que ens la podem crear per gestionar des d'una consola GUI de manera centralitzada tots els nostres Crowdsec, no és obligatori, i tenim una versió Community amb la qual també es poden fer moltes coses, entre elles, doncs veure les alertes de les màquines, el seu estat, podem subscriure-les a diferents blocklists…. Continuem doncs afegint el nostre Crowdsec, la instal·lació en aquest Linux. Ens copiam el comandament que hem d'executar.
I ho enganxem en una consola del sistema, executem:
sudo cscli console enroll xxxxxxxxxx
Tornem a la Consola de Crowdsec i acceptem l'enroll,
Sobre l'Engine recent afegit, li editem el nom i li posarem un que ens faci referència a qui és,
Habitualment, indiquem el nom de la màquina, i li donem a “Update”,
I si volem, el següent pugui ser afegir-hi alguns blocklists, per a això, podem polsar els seus “Blocklists”,
Si ja estem subscrit a algun blocklist, podrem seleccionar-lo des de “Manage”
I polsar sobre “Add Security Engine” per afegir aquesta màquina a aquesta blocklist,
Elegim un tipus d'acció i confirmem. Màquina subscrita!
Recordar que després de registrar Crowdsec contra la Consola cal reiniciar el servei de Crowdsec que tenim.
sudo systemctl restart crowdsec
Col·leccions
Com ja sabem. per defecte Crowdsec quan s'instal·la en una màquina escaneja a la recerca dels serveis que tenim instal·lats i els intenta protegir, en aquest cas, al meu Linux només m'ha detectat el de la base, o sigui, el del SO i el del SSHd. Si tingués un Nginx per exemple m'hagués instal·lat les seves col·leccions, o per a Grafana… per llistar les col·leccions:
sudo cscli collection list
Podrem buscar més col·leccions en el seu Hub, col·leccions realitzades per ells o per la comunitat, que puguin protegir altres serveis que disposem, com si per exemple hem instal·lat Nginx a posteriori i volem la seva col·lecció, executarem:
cscli collections install crowdsecurity/nginx
I hauríem d'afegir en el seu fitxer d'adquisicions '/etc/crowdsec/acquis.yaml’ el contingut de baix, no us preocupeu que al Hub ve detallat en cada cas què cal fer, corregim els paths dels logs de Nginx… i quedaria també el servei protegit.
filenames: - /var/log/nginx/access.log - /var/log/nginx/error.log labels: type: nginx ---
Així com per exemple si aquest Nginx en aquest Ubuntu serveix Nextcloud, doncs també li hauríem de posar la seva col·lecció, i així integrar i evitar qualsevol accés indegut, llegirà i tractarà els logs de Nextcloud per després prendre decisions.
cscli collections install crowdsecurity/nextcloud
I afegim al fitxer adquis. (insisteixo això ho teniu documentat al Hub):
filenames: - /var/log/nextcloud/nextcloud.log labels: type: Núvol següent --- source: journalctl journalctl_filter: - "SYSLOG_IDENTIFIER = Nextcloud" labels: type: syslog ---
Recordar reiniciar el servei de Crowdsec quan hauríeu fet algun canvi substancial:
sudo systemctl restart crowdsec
Llista blanca
La llista blanca com ja coneixem ens servirà perquè puguem excloure per exemple una adreça IP que pugui ser xadejada o bloquejada per Crowdsec, habitualment puguin ser les adreces IP d' algun lloc de control, equip de salt, etc.… Així com entre d'altres també podrem excloure països, per exemple.
name: crowdsecurity/whitelists description: "Whitelist events from private ipv4 addresses"
whitelist:
reason: "private ipv4/ipv6 ip/ranges"
ip:
- "127.0.0.1"
- "::1"
- "192.168.1.33"
cidr:
#- "192.168.0.0/16"
#- "10.0.0.0/8"
- "172.16.0.0/12"
# expression:
# - "'foo.com' in evt.Meta.source_ip.reverse"
El fitxer el trobarem a '/etc/crowdsec/hub/parsers/s02-enrich/crowdsecurity/whitelists.yaml', i veurem que podrem afegir senzillament qualsevol IP o rang IP a la llista blanca d'exclusions.
Si volem excloure països, hem d'instal·lar abans el parser geoip-enrich que ens alimentarà els logs amb dades de geolocalització, com per exemple països, ciutats o coordenades GPS:
cscli parsers install crowdsecurity/geoip-enrich
I n'hi haurà prou amb afegir la següent expressió en el fitxer de llista blanca:
expression:
- evt.Enriched.IsoCode == 'ES'
Recordar en finalitzar reiniciar el servei de Crowdsec per recarregar aquests canvis.
sudo systemctl restart crowdsec
Notificacions
notifications: - slack_default - splunk_default - http_default - email_default
Podrem habilitar notificacions editant el fitxer '/etc/crowdsec/profiles.yaml', on podrem descomentar i seleccionar el tipus de notificació que ens interessi, que poden ser a Splunk, a Slack, per email, o amb HTTP (per exemple Telegram).
Si volem per exemple notificacions de correu, en el directori '/etc/crowdsec/notifications/’ editaríem el fitxer YAML email.yaml (o slack.yaml o splunk.yaml o http.yaml), on configurarem els paràmetres del nostre servidor de correu. Els de Telegram ho vam veure en un post viejuno.
Provant-ho
Finalitzarem provant-ho ¿no? si no com ens fiem que això funcioni? 🙂 Podeu fer les proves d'accessos incorrectes que voleu, o validar-lo amb un escaner de vulnerabilitats, o de webs… en aquest document veieu un exemple amb nikto.
Podeu veure les decisions que ha pres la vostra màquina amb:
cscli decisions list
En aquest cas ha banejat l'adreça IP 192.168.1.122 perquè li he posat un escaner de vulnerabilitats a checkejar-lo i asseguda li ha detectat que estava rastrejant coses que no ha de…
O des del servidor LAPI si és que l'hem registrat (que és el que ve a continuació)
docker exec -it crowdsec-crowdsec-1 cscli decisions list
Si ja hem desplegat el Crowdsec Mirror, podrem verificar que l'adreça IP xa' n surt a la URL on publiquem la nostra blocklist http://DIRECCION_IP_CROWDSEC_MIRROR:41412/security/blocklist
Si volem nyafar una adreça IP, ho farem amb:
cscli decisions add --ip DIRECCIÓN_IP --reason "Descripció"
Si volem desbanejar una adreça IP, ho farem amb:
cscli decisions delete --ip DIRECCIÓN_IP
Podrem investigar les alertes que hem tingut amb:
cscli alert list
Amb el comandament anterior les llistem, i ara seleccionant l'ID d'una alerta en particular i podrem saber quin fitxer de log la va generar, què estava fent, el path, l' estat http… en aquest cas de la imatge són molts 404 al path /apps/files_sharing/publicpreview/
cscli alert inspect ID_ALERTA [-d]
Y, si és que ho necessitem, crear el nostre propi fitxer de Whitelist per fer exclusions en casos de falsos positius, pej en '/etc/crowdsec/parsers/s02-enrich/whitelist-permet-pdfs.yaml, podent usar aquestes expressions d' exemple per fer els filtres d' exclusió:
name: crowdsecurity/mylistablancapdfs description: "Ignora PDFs" whitelist: reason: "ignora PDFs" expression: #- evt.Meta.http_path startsWith '/apps/files_sharing/publicpreview/' #- evt.Meta.http_status == '404' && evt.Meta.http_path startsWith '/apps/files_sharing/publicpreview/' - evt.Parsed.request contains '/apps/files_sharing/publicpreview/'
Com sempre, sense oblidar reiniciar el servei de Crowdsec amb cada canvi de configuració.
Registrant Crowdsec contra el nostre servidor LAPI
api: ... server: enable: false ...
Hem de deshabilitar el LAPI local, editant el fitxer '/etc/crowdsec/config.yaml', li afegim l'enable false.
A continuació ens registrem contra el servidor LAPI que tenim desplegat a la xarxa:
sudo cscli lapi register -u http://DIRECCION_IP_CROWDSEC_LAPI:8080 --machine NOMBRE_MAQUINA
Al servidor LAPI podrem veure la petició de registre de la màquina Linux, llistem amb:
sudo docker exec -it crowdsec-crowdsec-1 cscli machines list
Acceptem la petició de registre i tornem a llistar per confirmar l'estat:
sudo docker exec -it crowdsec-crowdsec-1 cscli machines validate NOMBRE_MAQUINA
Ara el nostre Crowdsec a Linux comunicarà i llegirà del servidor LAPI qualsevol decisió, usant per tant el servidor central. Si la resta d'agents de Crowdsec farien el mateix, totes elles tindrien la mateixa informació en comú, i per tant, quan una màquina sospiti que una IP és malvada, la resta d'agents de Crowdsec ho sabran al moment.
Recordar sempre reiniciar Crowdsec després de qualsevol modificació:
sudo systemctl restart crowdsec
Registrant el bouncer de Crowdsec contra el nostre servidor LAPI
I per finalitzar, hem de registrar també els bouncers que tinguem, en aquest cas el bouncer del firewall de l'Ubuntu, per a iptables; si volem que aquest bouncer llegeixi del LAPI central, haurem de seguir aquests passos, així ho dit, quan algú o alguna cosa afegeixi una IP al LAPI central, aquest firewall de sistema operatiu farà una regla de denegació d' accés a l' esmentada IP maligna.
Des del servidor LAPI, podrem primer si volem llistar els bouncer que tenim registrats amb:
sudo docker exec -it crowdsec-crowdsec-1 cscli bouncers list
I per donar d'alta al bouncer del firewall d'aquest Ubuntu, executarem:
sudo docker exec -it crowdsec-crowdsec-1 cscli bouncers add NOMBRE_MAQUINA-FW
Anotem l'API Key que ens ha donat,
... api_url: http://DIRECION_LAPI_SERVER:8080 api_key: xxxxxxxxxxxx ...
Editem el fitxer /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml i posem la IP del servidor LAPI, el seu port i l'API Key que ens va donar el comandament anterior. Guardem el fitxer i reiniciem el servei del bouncer del firewall:
sudo systemctl restart crowdsec-firewall-bouncer
I ja sortirà el FW de l'equip Ubuntu registrat, ho verifiquem amb:
sudo docker exec -it crowdsec-crowdsec-1 cscli bouncers list
Espero que us hagi resultat interessant, volia fer una guia de 3 documents base i amb això queda rascat, ja hem après a instal·lar Crowdsec en un equip Linux, en un Windows, i hem generat una gestió centralitzada on tots els agents parlen entre si i s'aixequen si hi ha algun atacant, a més amb llistes publicades als firewalls o interns perquè puguin bloquejar ells també i aïllar qualsevol possible atacant. Doncs el de sempre, es va fent tard, mirar que hores… 😉 que teniu molt bona setmana!