Ochrana serverů pomocí CrowdSec

Kategorie: Úvod
Ochrana serverů pomocí CrowdSec

Návod jak implementovat open source IPS/IDS CrowdSec na vlastním serveru pomocí dockeru.

Dříve jsem k zabezpečení Linuxových serverů (nebo například Raspberry PI), které měly nějaké služby vystavené přímo do Internetu rád používal nástroj fail2ban - krátká prezentace. Fail2ban je poměrně jednoduchý na implementaci a ve spojení s firewallem (iptables) funguje v pořádku. Nevýhodou může být, že prvně čeká na nějaký útok (například špatné přihlášení na SSH) a až poté dělá opravu (remediaci, blokaci útočící IP adresy).

Oproti tomu je CrowdSec open-source nástroj pro detekci a odpověď na kybernetické hrozby (Intrusion Prevention System). Jedná se o bezpečnostní platformu, která analyzuje chování uživatelů, síťový provoz a identifikuje potenciálně škodlivé aktivity. Cílem CrowdSec je chránit systémy a služby před různými formami kybernetických útoků, včetně útoků typu brute-force, DoS (Denial of Service) a dalších. CrowdSec využívá koncept kolektivních informací k detekci hrozeb. To znamená, že informace o detekovaných hrozbách a útocích jsou sdíleny mezi uživateli a komunitou CrowdSec, což umožňuje rychlejší a efektivnější reakci na nové hrozby.

Platforma CrowdSec nabízí nástroje pro sběr dat, analýzu logů, detekci útoků a implementaci obranných opatření. Může být integrována do různých typů prostředí, včetně cloudových služeb, serverů a síťových zařízení.

Funkční celek se skládá z detekční části (agent, označován jako Engine nebo Instance), což si můžeme představit jako IDS (Intrusion Detection System), která kontroluje např. logy. Dále pak z části remediační (označován jako Bouncer). A poslední části je cloudová konzole pro monitoring a správu. Celý funkční celek je na obrázku níže, vypadá to z prvu docela složitě, ale po chvilkové práci s CrowdSec je nasazení poměrně stejně jednoduché jako u fail2ban.

Architektura CrowdSec

Implementace CrowdSec enginu

Prvně je potřeba se zaregsitrovat na webu projektu, postačí i community plán, který je zdarma - tím získáme přístup ke cloudové konzoli. Jelikož CrowdSec nabízí agenta v podobě Docker obrazu, využil jsem této možnosti a instalaci provedl přes docker-compose (viz kód níže).

Zde je potřeba si nastavit kolekce podle provozovaných služeb na serveru. Jednotlivé poskytované kolekce si lze prohlédnout v cloudové konzoli pod záložkou Hub - Collections.

version: '3'

services:
  crowdsec:
    image: crowdsecurity/crowdsec:v1.6.0
    restart: always
    environment:
      COLLECTIONS: "crowdsecurity/linux crowdsecurity/iptables crowdsecurity/apache2 timokoessler/uptime-kuma
                    crowdsecurity/caddy crowdsecurity/appsec-virtual-patching crowdsecurity/whitelist-good-actors"
    volumes:
      - crowdsec-config:/etc/crowdsec/
      - crowdsec-db:/var/lib/crowdsec/data/
      - /data/crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml:ro
      - /var/log/:/var/log/:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - 127.0.0.1:8080:8080

volumes:
  crowdsec-db:
  crowdsec-config:

Dále je potřeba si vytvořit soubor acquis.yaml, ve kterém se definuje co všechno (a kde) má engine kontrolovat. Níže přikládám pro náhled svůj. Tento soubor pak připojit do kontejneru jako volume. Dále do kontejneru připojíme adresář s logy z hosta. Pokud budeme chtít monitorovat i ostatní běžící kontejnery, připojíme i socket dockeru. Jako poslední definujeme porty lokálního API (LAPI), na které se budou připojovat bouncery. Po těchto krocích můžeme kontejner s CrowdSec enginem nastartovat.

source: file
filenames:
 - /var/log/auth.log
labels:
 type: syslog
---
source: docker
container_name:
 - caddy01
labels:
 type: caddy
---
source: docker
container_name:
 - uptime-kuma
labels:
  type: uptime-kuma
---
source: docker
container_name:
 - prod-tlukas-eu
labels:
  type: apache2

Po spuštění kontejneru se do něj připojíme a můžeme provést přidání (enroll) enginu do cloudové konzole. Toho dosáhneme pomocí příkazu, který je zobrazen v konzoli pod tlačítkem Add Security Engine (cscli console enroll HASH-ÚČTU). Po tomto kroku nám v konzoli vyskočí nový engine a my si ho můžeme schválit, nastavit mu jméno a dále ho spravovat (přidávat blocklisty, ...). Dále je vhodné si nechat do konzole zasílat u alertů i tzv. kontext (např. uživatelské účty při špatném SSH přihlášení, typ HTTP dotazu, ...), to docílíme příkazem cscli console enable context. Po těchto krocích nám stačí kontejner restartovat a začneme sbírat alerty do cloudové konzole.

Pro otestování jsem nechal schválně server VPS03 bez bounceru, rozdíl alertů (útoků) za posledních 24 hodin je skoro desetinásobný při stejné síťové konfiguraci. Po prohlédnutí přijatých alertů se jedná z 99 % o útoky na SSH.

CrowdSec konzole

Implementace CrowdSec bounceru

Po implementaci CrowdSec enginu máme přehled o útocích, čímž nyní můžeme nasadit druhou část celku - remediaci. Pro ochranu hosta jsem zvolil bouncer se jménem cs-firewall-bouncer a provedl instalaci iptables verze podle dokumentace (přidání repozitáře a instalace balíčku).

Nyní budeme potřebovat API klíč pro nově nainstalovaný bouncer, ten získáme po přihlášení do kontejneru s CrowdSec enginem a zadání příkazu cscli bouncers add host-firewall (host-firewall je označení, lze jakkoliv zaměnit). Tento klíč zadáme do souboru crowdsec-firewall-bouncer.yaml (umístěný v /etc/crowdsec/bouncers/) do položky api_key. Tímto docílíme napojení CrowdSec bounceru v hostovi na CrowdSec engine v dockeru. Po úpravě konfigurace provedeme restart služby příkazem systemctl restart crowdsec-firewall-bouncer.service.

Pokud se vše povedlo správně, tak bychom měli vidět v konzoli pod enginem nový bouncer a v iptables pravidlo na DROP zdrojového listu crowdsec-blacklists. Funkčnost můžeme prověřit o kontrolou logu služby (umístěný v /var/log/crowdsec-firewall-bouncer.log).

Další cscli příkazy

Pár příkazů do CrowdSec enginu pro debug/kontrolu:
cscli console enroll - přidání enginu do konzole
cscli bouncers list - seznam připojených bouncerů
cscli alerts list - seznam alertů
cscli metrics - kontrola metrik (Acquisition, Bouncerů, Parserů, ...)
cscli console status - kontrola napojení na centrální konzoli
cscli capi status - kontrola dostupnosti centrální konzole (last status sync)
cscli hub list - kontrola nastavených scénařů, parserů, ...
cscli console enable context - povolení zasílání kontextu u alertů do centrální konzole

Sdílet

Komentáře

postPřidat komentář

Nebyly přidány žádné komentáře.