mydocker/crowdsec/README.md

3.3 KiB

CrowdSec - dokumentacja

Jak działa

CrowdSec analizuje logi i blokuje złośliwe IP przez dwa komponenty:

Logi → crowdsec (analiza) → decyzja BAN → traefik-bouncer (egzekucja)
                                         → powiadomienie Telegram

traefik-bouncer sprawdza każde żądanie przez Traefika pod CrowdSec API (crowdsec:8080). Jeśli IP ma aktywny ban - zwraca 403.

Telegram - jak działa

Powiadomienia idą przez plugin HTTP (conf/notifications/http.yaml), który wysyła POST do Telegram Bot API.

Przepływ:

  1. CrowdSec wykrywa atak (np. brute-force SSH, skanowanie HTTP)
  2. Profil w conf/profiles.yaml dopasowuje alert → przypisuje powiadomienie http_default
  3. Plugin HTTP czeka 30s na grupowanie alertów, potem wysyła POST:
POST https://api.telegram.org/bot<TOKEN>/sendMessage
{
  "chat_id": 5479795256,
  "parse_mode": "HTML",
  "text": "🚨 CrowdSec Alert\n🔒 Scenariusz: ...\n🌍 IP: ...\n📊 Liczba zdarzeń: ..."
}

Zmienne środowiskowe (w .env):

TELEGRAM_BOT_TOKEN=5580892376:AAHjXRq...
TELEGRAM_CHAT_ID=5479795256

Bot token i chat ID skonfigurowane w docker-compose.yaml i przekazywane do kontenera. Format wiadomości edytowalny w conf/notifications/http.yaml.

Monitorowane źródła logów (conf/acquis.yaml)

Źródło Typ Ścieżka/kontener
SSH syslog /var/log/auth.log
Traefik traefik /var/log/traefik/access.log
Jellyfin jellyfin /var/log/jellyfin/log_*.log
Grafana docker kontener grafana
Bitwarden Vaultwarden kontener bitwarden

Aktywne kolekcje (scenarios + parsery)

  • crowdsecurity/linux + sshd - SSH brute-force
  • crowdsecurity/traefik + nginx - HTTP ataki przez Traefik
  • crowdsecurity/http-cve - znane CVE (log4j, Spring4Shell, etc.)
  • crowdsecurity/base-http-scenarios - skanowanie, traversal, bad UA
  • crowdsecurity/home-assistant - brute-force HA
  • crowdsecurity/whitelist-good-actors - SEO boty, CDN
  • Dominic-Wagner/vaultwarden - BF Bitwarden
  • LePresidente/grafana + jellyfin - BF Grafana/Jellyfin

Whitelista (conf/parsers/s02-enrich/my-whitelist.yaml)

Nigdy nie banowane:

  • 127.0.0.1
  • 192.168.1.0/24 (LAN)
  • 10.13.13.0/24 (VPN WireGuard)
  • 81.201.50.209 (domowy publiczny IP)
  • 212.222.3.226 (IP z pracy)

Profile i decyzje (conf/profiles.yaml)

Dwa profile:

  • default_ip_remediation - ban IP na 4h
  • default_range_remediation - ban całego /24 na 4h

Oba wysyłają powiadomienie http_default (Telegram).

Przydatne komendy

# Skrypty w crowdsec/bin/
./crowdsec/bin/alerts-list      # lista alertów
./crowdsec/bin/decisions        # aktywne bany
./crowdsec/bin/metrics          # statystyki parsowania

# Bezpośrednio
docker exec crowdsec cscli alerts list
docker exec crowdsec cscli decisions list
docker exec crowdsec cscli decisions delete --ip 1.2.3.4   # odbanuj IP
docker exec crowdsec cscli decisions add --ip 1.2.3.4 --duration 24h  # ręczny ban

# Test powiadomienia Telegram
docker exec crowdsec cscli notifications test http_default

Ręczny ban IP

docker exec crowdsec cscli decisions add --ip 1.2.3.4 --duration 168h --reason "manual"

Logi

docker logs crowdsec --tail 100 -f
docker logs traefik-bouncer --tail 50