3.3 KiB
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:
- CrowdSec wykrywa atak (np. brute-force SSH, skanowanie HTTP)
- Profil w
conf/profiles.yamldopasowuje alert → przypisuje powiadomieniehttp_default - 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-forcecrowdsecurity/traefik+nginx- HTTP ataki przez Traefikcrowdsecurity/http-cve- znane CVE (log4j, Spring4Shell, etc.)crowdsecurity/base-http-scenarios- skanowanie, traversal, bad UAcrowdsecurity/home-assistant- brute-force HAcrowdsecurity/whitelist-good-actors- SEO boty, CDNDominic-Wagner/vaultwarden- BF BitwardenLePresidente/grafana+jellyfin- BF Grafana/Jellyfin
Whitelista (conf/parsers/s02-enrich/my-whitelist.yaml)
Nigdy nie banowane:
127.0.0.1192.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 4hdefault_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