
CrowdSec: prevenirea intruziunilor bazata pe efectul de multime
Orice server care primeste o adresa IP publica incepe sa fie lovit in cateva minute de la pornire: incercari de autentificare SSH cu acelasi set de douazeci de utilizatori, request-uri care cauta /wp-login.php si fisiere .env care nu au existat niciodata acolo, payload-uri de path traversal, handshake-uri TLS neterminate de la scannere in masa care ruleaza pe botnet-uri inchiriate. Nimic din toate astea nu e personal, e zgomotul de fond al internetului si nu se opreste niciodata. Multa vreme, raspunsul standard a fost fail2ban: citesti un fisier de log, numeri esecurile de autentificare, blochezi IP-ul respectiv pentru o vreme, repeti la infinit. Functioneaza si multa lume inca il ruleaza cu succes, dar are un punct orb care devine mai evident an de an: fiecare server lupta singur, izolat, exact cu aceleasi botnete. Serverul tau nu invata nimic din faptul ca IP-ul care iti bate la usa portului SSH a lovit alte o suta de servere saptamana trecuta, iar in momentul in care banul expira, orice memorie a atacatorului dispare.
CrowdSec (sursa pe GitHub la https://github.com/crowdsecurity/crowdsec , site-ul oficial la https://crowdsec.net , licenta MIT) e ce obtii daca iei ideea din spatele fail2ban si adaugi singurul ingredient care ii lipsea mereu: multimea. Este un sistem de prevenire a intruziunilor gratuit si open source, scris in Go, care parseaza logurile tale, ruleaza asupra lor scenarii de detectie bazate pe comportament ca sa depisteze incercari de bruteforce, scanari si tipare de exploatare cunoscute, iar apoi, daca alegi sa participi, imparte ce a invatat cu toate celelalte instante CrowdSec de pe internet. Noi rulam CrowdSec in fata propriilor servicii aici, la DreamServer, impreuna cu Traefik ca reverse proxy si bouncer-ul lui de CrowdSec, pentru a bloca IP-urile malitioase la marginea retelei, inainte sa ajunga la aplicatiile noastre. E genul de componenta care isi face treaba tacut, in fundal, exact ce iti doresti de la ceva aflat pe calea de securitate.
Ce este, mai exact, CrowdSec
Structural, CrowdSec imparte treaba in bucati care comunica printr-un API local mic. Agentul crowdsec face parsarea logurilor: citeste orice fisiere ii indici (loguri Nginx, loguri Traefik, auth.log pentru SSH, loguri de aplicatie, orice are un timestamp si un IP in el), normalizeaza fiecare linie printr-un parser si trimite rezultatul catre “scenarii” de detectie. Un scenariu e o regula mica si declarativa care descrie un tipar de comportament rau in timp: zece autentificari SSH esuate de la acelasi IP in doua minute, un val de 404 care arata ca o scanare de directoare, un request care se potriveste cu semnatura unui payload pentru o vulnerabilitate cunoscuta. Cand un scenariu se declanseaza, produce o “decizie”: acest IP ar trebui blocat, sau pus la captcha, pentru atata timp, din acest motiv.
Detaliul important e ca CrowdSec insusi nu blocheaza niciodata nimic. LAPI stocheaza deciziile intr-o baza de date (SQLite implicit), iar componentele separate numite “bouncers” sunt cele care aplica efectiv deciziile: un bouncer de firewall care controleaza iptables sau nftables, un bouncer pentru Nginx, un bouncer/plugin pentru Traefik, un bouncer pentru Cloudflare care trimite blocarile direct in regulile lui de firewall, si altele pentru diverse puncte de trecere a traficului. Separarea e deliberata: detectia si aplicarea sunt responsabilitati diferite, deci poti rula detectia pe o masina care nu are treaba directa cu firewall-ul, sau poti aplica aceeasi decizie pe mai multe niveluri simultan.
De ce detectia colaborativa bate lupta solitara
Ce transforma CrowdSec din “fail2ban cu YAML mai frumos” in altceva e blocklist-ul comunitar. Fiecare instanta participanta poate, daca alegi sa participi, sa raporteze catre un serviciu central IP-urile pe care le confirma ca atacatoare, iar in schimb primeste un flux de IP-uri deja semnalate de alte instante. Practic, o adresa care a inceput azi-dimineata sa bata la usa portului SSH al altcuiva din Germania poate fi deja blocata pe serverul tau din Bucuresti inainte sa iti trimita macar un singur pachet. E o pozitie fundamental diferita fata de modelul strict local al lui fail2ban: in loc ca fiecare server sa redescopere independent aceleasi botnete de scanare, descoperirea se intampla o singura data, undeva, iar masura de aparare se propaga mai departe. Nu inlocuieste detectia locala, propriile tale scenarii tot prind lucruri specifice traficului tau, dar transforma mii de servere izolate in ceva mai apropiat de o retea de senzori comuna, un model de securitate genuin diferit, nu doar un unghi de marketing pus peste o idee veche.
Ce primesti din cutie
Instalarea de baza iti da un set de instrumente destul de complet, fara munca suplimentara mare:
- Un motor de parsare si detectie a logurilor (agentul
crowdsec) care urmareste mai multe surse de log simultan. - Un catalog curatat de parsere, scenarii si “colectii” pe Hub, la hub.crowdsec.net, la care contribuie CrowdSec si comunitatea, acoperind stack-uri comune ca Linux, SSH, Nginx, Traefik si WordPress.
- API-ul local (LAPI), sursa unica de adevar pentru decizii.
- Un ecosistem de bouncers pentru diferite puncte de aplicare: firewall-uri de host prin iptables/nftables, Nginx, Traefik, Cloudflare si altele.
- Blocklist-ul comunitar, optional, practic chiar sensul numelui proiectului.
cscli, unealta de linie de comanda pentru instalarea colectiilor, inspectarea deciziilor si gestionarea bouncerelor.
Exista si o Consola cloud optionala pentru vizibilitate peste o flota de masini, dar nimic din motor sau din bouncers nu o cere. Totul e utilizabil complet self-hosted si offline, ceea ce conteaza daca “trimitem telemetria noastra de securitate catre un tert” e o linie pe care nu vrei sa o treci.
Instalare CrowdSec pe un VPS
O configuratie minimala Docker arata cam asa: containerul CrowdSec citeste logurile tale si ruleaza propriul LAPI, iar un container bouncer interogheaza acel LAPI ca sa stie ce sa blocheze.
# Porneste motorul CrowdSec, montand logurile pe care trebuie sa le urmareasca
docker run -d \
--name crowdsec \
--restart unless-stopped \
-v /var/log:/var/log:ro \
-v /etc/crowdsec:/etc/crowdsec \
-v crowdsec-db:/var/lib/crowdsec/data \
-p 8080:8080 \
crowdsecurity/crowdsec
# Instaleaza colectii potrivite stack-ului tau (SSH + Linux generic)
docker exec -it crowdsec cscli collections install crowdsecurity/sshd
docker exec -it crowdsec cscli collections install crowdsecurity/linux
# Inregistreaza un bouncer, apoi porneste-l cu cheia lui
docker exec -it crowdsec cscli bouncers add firewall-bouncer
docker run -d \
--name crowdsec-firewall-bouncer \
--restart unless-stopped \
--network host \
--cap-add=NET_ADMIN \
-e BOUNCER_KEY_FILE=/etc/crowdsec/bouncer.key \
-v /etc/crowdsec/bouncer.key:/etc/crowdsec/bouncer.key:ro \
crowdsecurity/cs-firewall-bouncer
Daca traficul web trece prin Traefik in loc de, sau pe langa, firewall-ul de host, plugin-ul bouncer CrowdSec pentru Traefik vorbeste cu acelasi LAPI si respinge request-urile chiar la nivelul reverse proxy-ului, exact combinatia pe care o rulam noi in fata propriilor servicii.
Pe partea de firewall de host, tine-o simplu: bouncer-ul propriu al CrowdSec se ocupa dinamic de blocarea la nivel de IP, deci regulile tale statice trebuie doar sa nu stea in calea traficului legitim:
# nota ufw: pastreaza baza permisiva pentru porturile pe care le servesti
# efectiv, iar bouncer-ul CrowdSec se ocupa deasupra de blocarea dinamica a IP-urilor
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
Daca pui asta pe o masina noua, planurile noastre VPS iti dau acces root complet, deci nimic de aici nu necesita vreun ocol; configurezi CrowdSec exact cum ai face-o pe orice server Linux al tau.
Tipare de configurare care merita stiute
Alege colectiile potrivite pentru stack-ul tau real
Nu instala tot ce ofera Hub-ul doar pentru ca exista. Ia colectiile care se potrivesc cu ce ruleaza efectiv: crowdsecurity/sshd si crowdsecurity/linux pentru practic orice server, crowdsecurity/nginx sau crowdsecurity/traefik daca acesta e reverse proxy-ul tau, crowdsecurity/wordpress daca gazduiesti WordPress. Colectii in plus inseamna parsere care ruleaza pe loguri pe care nu le vor potrivi niciodata, adaugand zgomot si incetinind depanarea.
Adauga in whitelist propriul trafic inainte sa te muste
Cea mai frecventa intrebare de suport legata de CrowdSec e “m-am blocat singur afara”. Scenariile nu stiu diferenta dintre un atacator care face bruteforce pe SSH si un dezvoltator care si-a gresit parola de patru ori la rand. Inainte sa pui sistemul live, adauga IP-urile de la birou si de acasa, runner-ele de CI si orice serviciu de monitorizare care iti loveste endpoint-urile la un interval fix, intr-un parser de whitelist. Dureaza doua minute si iti scuteste o recuperare stanjenitoare mai tarziu.
Conecteaza un bouncer care chiar aplica deciziile
Acesta e pasul pe care lumea il sare, si e cel care chiar conteaza. O decizie pe care nimic nu o aplica este doar o inregistrare de log, nu o aparare. Fie ca folosesti bouncer-ul de firewall, bouncer-ul pentru Nginx sau plugin-ul pentru Traefik, verifica prin cscli decisions list ca blocarile chiar se creeaza, apoi verifica separat ca bouncer-ul chiar interogheaza LAPI si arunca traficul. Detectie fara aplicare e doar un decor de teatru al securitatii.
Decide-te asupra blocklist-ului comunitar si a Consolei
Participarea la blocklist-ul comunitar e locul unde CrowdSec isi castiga numele, si pentru majoritatea utilizatorilor e un castig clar: ajungi inaintea IP-urilor rele inainte sa te loveasca. Inseamna ca instanta ta raporteaza mai departe IP-urile atacatoare confirmate, deci daca acest model de partajare a datelor nu se potriveste cu cerintele tale de conformitate, poti rula CrowdSec complet local si sari peste asta, doar ca pierzi efectul de retea. Consola e un nivel separat, cu adevarat optional, pentru vizibilitate pe mai multe masini; motorul functioneaza identic cu sau fara ea.
Unde CrowdSec nu e raspunsul potrivit
Merita sa fim sinceri despre limite. CrowdSec nu e un SIEM: nu face retentie pe termen lung a logurilor, nu coreleaza tipuri de evenimente fara legatura, nu face raportare de conformitate, e un motor de detectie si decizie concentrat pe comportament rau la nivel de retea. Nu e nici o inlocuire pentru un WAF; inspectia profunda la nivel de aplicatie, de genul recunoasterii ca un body de POST e o incercare de injectie SQL, e o problema diferita fata de “acest IP scaneaza”. Depinde in totalitate de bouncers instalati, o instanta fara niciun bouncer atasat e doar un cititor de loguri scump. Depinde si de existenta unor parsere decente pentru formatul tau de log; un format neobisnuit, fara parser potrivit in Hub, inseamna ca nu obtii nimic pana nu scrii tu unul. Si nimic din toate astea nu inlocuieste actualizarile de securitate: poate incetini un scanner care cauta o vulnerabilitate cunoscuta, dar un software neactualizat te expune in continuare unui atacator tintit si rabdator care nu declanseaza deloc scenariile de bruteforce sau scanare.
Alternative pe care le-am luat in calcul
fail2ban e comparatia evidenta si ramane o alegere rezonabila pentru o singura masina unde nu ai nevoie de threat intelligence partajat: mai simplu, fara LAPI, fara bouncer, doar urmarire de loguri si blocari locale. Ce nu iti ofera e efectul de retea al CrowdSec sau ecosistemul lui de scenarii pe Hub.
Wazuh sta intr-o categorie de greutate complet diferita: o platforma completa XDR/SIEM cu monitorizare a integritatii fisierelor, detectie de vulnerabilitati, raportare de conformitate si gestionare centralizata a logurilor pe o flota. Daca ai nevoie de vizibilitate la nivel de SIEM si bugetul sa il rulezi, Wazuh e serios; pentru cateva instante VPS e de obicei mult mai multa infrastructura decat cere problema.
ModSecurity actioneaza pe un nivel complet diferit: un WAF la nivel de aplicatie care inspecteaza corpurile request-urilor si raspunsurilor HTTP fata de seturi de reguli precum OWASP CRS, prinzand payload-uri de injectie SQL si XSS in interiorul request-ului. CrowdSec e bazat pe comportament si concentrat pe retea; ModSecurity e bazat pe continut si concentrat pe aplicatie. Complementare, nu concurente, iar rularea ambelor nu e redundanta.
Deci, sa-l rulezi?
Daca apararea ta actuala e fie inexistenta, fie o inchisoare fail2ban singuratica ce tot redescopera aceleasi botnete din 2019, CrowdSec e un upgrade direct: gratuit, open source si cu adevarat util din momentul in care instalezi cateva colectii si conectezi un bouncer. Capcana e ca face ceva doar daca duci treaba pana la capat: alegi colectiile potrivite, iti pui propriul trafic in whitelist si chiar instalezi un bouncer care aplica ce decide. Incepe cu un VPS pe care il controlezi de la un capat la altul (planurile noastre VPS iti dau acces root ca sa configurezi exact ce am descris mai sus), iar daca preferi ca altcineva sa preia in totalitate munca de hardening, actualizari si monitorizare, exact pentru asta exista serviciul nostru de administrare servere .