
Wprowadzenie

Coolify to doskonała platforma do samodzielnego hostowania aplikacji, ale jak każda usługa dostępna z internetu, wymaga solidnych środków bezpieczeństwa. CrowdSec zapewnia inteligentne, oparte na społeczności rozwiązanie bezpieczeństwa, które może znacząco wzmocnić ochronę Twojej instalacji Coolify przed złośliwym ruchem, atakami brute force i innymi zagrożeniami bezpieczeństwa.
Ten kompleksowy przewodnik przeprowadzi Cię przez konfigurację CrowdSec jako firewalla dla Twojej instalacji Coolify, w tym zaawansowane funkcje takie jak wyzwania CAPTCHA i powiadomienia Discord.

Dlaczego używać CrowdSec z Coolify?
CrowdSec oferuje kilka przewag nad tradycyjnymi rozwiązaniami firewall:
- Inteligencja społeczności: Wykorzystuje wywiad o zagrożeniach pochodzący od tysięcy użytkowników
- Analiza behawioralna: Wykrywa wzorce ataków, a nie tylko blokuje znane złe IP
- Elastyczne środki zaradcze: Obsługuje różne typy odpowiedzi (ban, captcha, ograniczanie częstotliwości)
- Ochrona w czasie rzeczywistym: Bezproblemowo integruje się z Traefik (proxy Coolify)
- Niski poziom fałszywych alarmów: Zaawansowane parsowanie ogranicza blokowanie legalnego ruchu

Krok 1: Instalacja CrowdSec
Najpierw zainstaluj CrowdSec na serwerze hostującym Coolify:
apt update
apt upgrade -y
curl -s https://install.crowdsec.net | sudo bash
apt install crowdsec
Zweryfikuj instalację:
systemctl status crowdsec
Krok 2: Konfiguracja CrowdSec dla Coolify
Ponieważ Coolify używa portu 8080, musimy skonfigurować CrowdSec do użycia innego portu:
nano /etc/crowdsec/config.yaml
Zmodyfikuj sekcję api.server.listen_uri:
plugin_config:
user: nobody
group: nogroup
api:
client:
insecure_skip_verify: false
credentials_path: /etc/crowdsec/local_api_credentials.yaml
server:
log_level: info
listen_uri: 0.0.0.0:8095 # Zmienione z domyślnego 8080
profiles_path: /etc/crowdsec/profiles.yaml
console_path: /etc/crowdsec/console.yaml
Ważne: Zmień 127.0.0.1 na 0.0.0.0, aby uniknąć problemów z połączeniem między kontenerami Docker a CrowdSec.
Uruchom ponownie CrowdSec:
systemctl restart crowdsec
Przetestuj połączenie z proxy Coolify:
docker exec coolify-proxy wget -qO- http://host.docker.internal:8095/v1/heartbeat
Uwaga: Odpowiedź 401 Unauthorized też jest OK – oznacza to, że połączenie działa, ale nie jesteśmy uwierzytelnieni, co jest oczekiwane na tym etapie.
Krok 3: Instalacja Firewall Bouncer
W Crowdsec „bouncers” odpowiadają za blokowanie, a „collections” za analizowanie
Zainstaluj bouncer nftables dla ochrony na poziomie systemu:
apt install crowdsec-firewall-bouncer-nftables -y
Zweryfikuj instalację:
cscli metrics
Poszukaj cs-firewall-bouncer w sekcji Local API Bouncers Metrics.
Natomiast warto zaznaczyć, że bouncer nftables może mieć problemy z odczytywaniem adresu IP klienta, jeśli używamy Cloudflare proxy (traefik bouncer nie ma takiego problemu). Więc w przypadku Cloudflare proxy, warto zamienić nftables-bouncer na cloudflare-bouncer
Krok 4: Opcjonalna integracja ze społecznością CrowdSec
Chociaż CrowdSec działa perfekcyjnie w trybie standalone, połączenie z konsolą społeczności zapewnia dodatkowe korzyści:
- Panel internetowy
- Wywiad o zagrożeniach społeczności
- Dane geolokalizacyjne
- Współdzielone listy blokowanych
Aby się zarejestrować (opcjonalnie):
- Zarejestruj się na https://app.crowdsec.net/signup
- Skopiuj komendę rejestracji z konsoli
- Wykonaj:
cscli console enroll XXXXX
- Zatwierdź rejestrację w konsoli internetowej
Krok 5: Konfiguracja integracji z Traefik
Wygeneruj klucz API bouncer dla Traefik:
cscli bouncers add traefik-bouncer
Zapisz wygenerowany klucz – będziesz go potrzebować w następnym kroku.
Utwórz konfigurację wtyczki CrowdSec dla Traefik:
nano /data/coolify/proxy/dynamic/crowdsec-plugin.yaml
http:
middlewares:
crowdsec:
plugin:
bouncer:
crowdsecMode: live
crowdsecLapiHost: 'host.docker.internal:8095'
crowdsecLapiKey: 'TWOJ_KLUCZ_API_BOUNCER_TUTAJ'
enabled: true
Krok 6: Konfiguracja Proxy Coolify
Znajdź najnowszą wersję wtyczki Traefik bouncer na https://github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin (sprawdź zakładkę releases).
Utwórz katalog dla access-logs:
mkdir -p /data/coolify/proxy/accesslogs/
Edytuj konfigurację proxy Coolify:
nano /data/coolify/proxy/docker-compose.yml
Dodaj te argumenty wiersza poleceń do usługi Traefik:
name: coolify-proxy
networks:
coolify:
external: true
services:
traefik:
container_name: coolify-proxy
# ... istniejąca konfiguracja ...
command:
# ... istniejące komendy ...
- '--experimental.plugins.bouncer.modulename=github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin'
- '--experimental.plugins.bouncer.version=v1.4.2' # Użyj najnowszej wersji
- '--accesslog=true'
- '--accesslog.format=json'
- '--accesslog.bufferingsize=0'
- '--accesslog.fields.headers.defaultmode=drop'
- '--accesslog.fields.headers.names.User-Agent=keep'
- '--accesslog.filepath=/traefik/accesslogs/access.log'
Uwaga: Jeśli używasz Cloudflare, możesz potrzebować dodatkowych etykiet w zależności od konfiguracji. Middleware CrowdSec powinien być kompatybilny z proxy Cloudflare.
- '--entryPoints.http.forwardedHeaders.insecure=true'
- '--entryPoints.https.forwardedHeaders.insecure=true'
Ważne: Po edycji pliku docker-compose.yml zawsze uruchom:
docker compose up -d
Wskazówki debugowania
Jeśli napotkasz problemy, sprawdź logi Traefik:
docker logs coolify-proxy
Szukaj błędów związanych z ładowaniem wtyczki lub konfiguracją. Logi pomogą zidentyfikować problemy z konfiguracją wtyczki CrowdSec lub logami dostępu.
Krok 7: Konfiguracja rotacji logów
Aby zapobiec zbyt dużemu wzrostowi logów dostępu, skonfiguruj rotację logów:
nano /etc/logrotate.d/traefik
/data/coolify/proxy/accesslogs/access.log {
size 10M
rotate 5
missingok
notifempty
extension .log
maxage 14
postrotate
docker kill --signal="USR1" coolify-proxy
endscript
}
Ta konfiguracja:
- Rotuje logi gdy osiągną 10MB
- Przechowuje 5 rotowanych plików
- Usuwa logi starsze niż 14 dni
- Sygnalizuje Traefik ponowne otwarcie plików logów po rotacji
Przenieś logrotate z codziennego na godzinne uruchamianie:
mv /etc/cron.daily/logrotate /etc/cron.hourly/
systemctl restart cron
Przetestuj konfigurację:
logrotate /etc/logrotate.d/traefik
Krok 8: Włączenie CrowdSec dla Twoich aplikacji w Coolify
Aby chronić swoje aplikacje Coolify za pomocą CrowdSec:

- Przejdź do panelu Coolify
- Otwórz swoją stronę/usługę
- Kliknij „Edit compose file”
- Dodaj etykietę middleware CrowdSec:
labels:
- coolify.traefik.middlewares=crowdsec@file
Uruchom ponownie Traefik:
cd /data/coolify/proxy
docker compose up -d
docker restart coolify-proxy
Krok 9: Konfiguracja analizy logów
Zainstaluj kolekcję Traefik do parsowania logów:
cscli collections install crowdsecurity/traefik
systemctl reload crowdsec
Skonfiguruj CrowdSec do analizy logów Traefik:
nano /etc/crowdsec/acquis.yaml
Dodaj:
---
filenames:
- /data/coolify/proxy/accesslogs/access.log
labels:
type: traefik
Uruchom ponownie obie usługi:
docker restart coolify-proxy
systemctl restart crowdsec
Krok 10: Testowanie konfiguracji
Przetestuj konfigurację, aby upewnić się, że wszystko działa prawidłowo.
Sprawdź logi dostępu
Monitoruj /data/coolify/proxy/accesslogs/access.log
pod kątem przychodzących żądań:
tail -f /data/coolify/proxy/accesslogs/access.log
| jq
Przetestuj blokowanie IP
⚠️ Ważne: Użyj innego urządzenia i sieci (np. telefonu z danymi mobilnymi), aby uniknąć przypadkowego zablokowania siebie!
Z innego urządzenia zanotuj swój adres IP odwiedzając swoją stronę, następnie ręcznie zablokuj ten IP do testów:
cscli decisions add -i TWOJ_TESTOWY_IP -d 10m
Zweryfikuj ochronę
Spróbuj uzyskać dostęp do strony z zablokowanego IP – powinien zostać odrzucony.
Usuń testową blokadę
Posprzątaj po teście usuwając blokadę:
cscli decisions remove -i TWOJ_TESTOWY_IP
Zaawansowane funkcje
Integracja CAPTCHA

Do zaawansowanego łagodzenia ataków skonfiguruj wyzwania CAPTCHA:
Pobierz szablon CAPTCHA:
wget https://raw.githubusercontent.com/maxlerebourg/crowdsec-bouncer-traefik-plugin/main/captcha.html -O /data/coolify/proxy/dynamic/captcha.html
Zarejestruj się w hCaptcha na https://www.hcaptcha.com i uzyskaj klucz strony i sekretny klucz.
Skonfiguruj profil CAPTCHA:
nano /etc/crowdsec/profiles.yaml
name: captcha_remediation
filters:
- Alert.Remediation == true && Alert.GetScope() == "Ip" && Alert.GetScenario() contains "http" && GetDecisionsSinceCount(Alert.GetValue(), "24h") <= 3
decisions:
- type: captcha
duration: 4h
notifications:
- discord
on_success: break
---
Zaktualizuj konfigurację bouncera:
nano /data/coolify/proxy/dynamic/crowdsec-plugin.yaml
http:
middlewares:
crowdsec:
plugin:
bouncer:
crowdsecMode: live
crowdsecLapiHost: 'host.docker.internal:8095'
crowdsecLapiKey: 'TWOJ_KLUCZ_API'
enabled: true
captchaProvider: hcaptcha
captchaSiteKey: TWOJ_KLUCZ_STRONY_HCAPTCHA
captchaSecretKey: TWOJ_SEKRETNY_KLUCZ_HCAPTCHA
captchaHTMLFilePath: /traefik/dynamic/captcha.html
Przetestuj funkcjonalność CAPTCHA
⚠️ Ważne: Użyj innego urządzenia i sieci (np. telefonu z danymi mobilnymi), aby samemu siebie nie zbanować!
Dodaj decyzję CAPTCHA dla swojego testowego IP:
cscli decisions add --ip TWOJ_TESTOWY_IP -d 10m -t captcha
Odwiedź swoją stronę z tego IP, aby zobaczyć wyzwanie CAPTCHA w akcji.
Usuń testową CAPTCHA po zakończeniu:
cscli decisions remove --ip TWOJ_TESTOWY_IP -t captcha
Powiadomienia Discord
Otrzymuj natychmiastowe alerty o zdarzeniach bezpieczeństwa

Utwórz plik konfiguracji powiadomień:
nano /etc/crowdsec/notifications/discord.yaml
type: http
name: discord
log_level: info
format: |
{
"embeds": [
{
"title": "🚨 CrowdSec Security Alert",
"color": 15158332,
"description": "{{range . -}}{{$alert := . -}}{{range .Decisions -}}**IP**: `{{.Value}}`\n**Action**: {{.Type}}\n**Duration**: {{.Duration}}\n**Scenario**: {{.Scenario}}\n\n🔍 **Quick Analysis:**\n [Whois](https://www.whois.com/whois/{{.Value}}) | [Shodan](https://www.shodan.io/host/{{.Value}}) | [AbuseIPDB](https://www.abuseipdb.com/check/{{.Value}}) | [VirusTotal](https://www.virustotal.com/gui/ip-address/{{.Value}})\n\n{{end -}}{{end -}}",
"footer": {
"text": "CrowdSec Security Engine"
}
}
]
}
url:URL_TWOJEGO_WEBHOOK_DISCORD
method: POST
headers:
Content-Type: application/json
Włącz powiadomienia w profilach
Edytuj konfigurację profili:
nano /etc/crowdsec/profiles.yaml
Dodaj do domyślnego profilu:
name: default_ip_remediation
filters:
- Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
- type: ban
duration: 12h
notifications:
- discord
on_success: break
Przetestuj powiadomienia Discord
Uruchom ponownie CrowdSec i przetestuj system powiadomień:
systemctl restart crowdsec
cscli notifications test discord
Konfiguracja allowlist
Zapobiegnij przypadkowemu blokowaniu normalnego ruchu.
To bardzo ważne, ponieważ czasami CrowdSec może zbanować nasz serwer podczas aktualizacji WordPressa itp.
nano /etc/crowdsec/parsers/s02-enrich/whitelists.yaml
name: crowdsecurity/whitelists
description: "Whitelist events from private ipv4 addresses"
whitelist:
reason: "private ipv4/ipv6 ip/ranges"
ip:
- "::1"
- "PUBLICZNE_IP_TWOJEGO_SERWERA" # Dodaj publiczne IP swojego serwera
- "TWOJE_DOMOWE_IP" # Dodaj IP domu/biura jeśli masz statyczne
cidr:
- "127.0.0.0/8"
- "192.168.0.0/16"
- "10.0.0.0/8"
- "172.16.0.0/12"
Monitorowanie
Regularne sprawdzenia
Monitoruj swoją instalację CrowdSec:
# Sprawdź status CrowdSec
systemctl status crowdsec
# Zobacz bieżące decyzje
cscli decisions list
# Sprawdź metryki
cscli metrics
# Zobacz alerty
cscli alerts list
Analiza logów
Monitoruj co wykrywa CrowdSec:
bash# Najnowsze alerty
cscli alerts list -l 10
# Decyzje według scenariusza
cscli decisions list --json | jq '.[] | .scenario' | sort | uniq -c
# Najczęściej blokowane IP
cscli decisions list --json | jq -r '.[] | .value' | sort | uniq -c | sort -nr | head -10
Rozwiązywanie problemów
Częste problemy
Brak połączenia Traefik do CrowdSec:
- Upewnij się, że listen_uri jest ustawione na 0.0.0.0:8095
- Sprawdź reguły firewalla
- Zweryfikuj klucz API bouncer
Brak podejmowanych decyzji przez CrowdSec:
- Sprawdź czy logi Traefik są zapisywane
- Zweryfikuj konfigurację acquis.yaml
- Upewnij się, że Traefik jest poprawnie skonfigurowany
Fałszywe alarmy:
- Dodaj legalne IP do listy dozwolonych adresów
- Dostosuj progi scenariuszy
- Przejrzyj i dostrajaj profile
CAPTCHA nie działa:
- Zweryfikuj poprawność kluczy hCaptcha
- Sprawdź ścieżkę pliku captcha.html
- Upewnij się, że domeny są skonfigurowane w hCaptcha
Podsumowanie
Masz teraz kompleksową konfigurację bezpieczeństwa, która obejmuje:
- Wykrywanie zagrożeń w czasie rzeczywistym poprzez analizę behawioralną CrowdSec
- Dzielenie się inteligencją społeczności i otrzymywanie danych o zagrożeniach
- Elastyczne środki zaradcze z banami, wyzwaniami CAPTCHA i ograniczaniem częstotliwości
- Natychmiastowe powiadomienia przez Discord o zdarzeniach bezpieczeństwa
- Ochrona na poziomie systemu poprzez integrację z firewallem
- Ochrona na poziomie aplikacji poprzez middleware Traefik
- Inteligentna lista dozwolonych zapobiegająca blokowaniu legalnego ruchu
- Kompleksowe logowanie i monitorowanie dla wglądu w bezpieczeństwo
Gotowe! Twoja instancja Coolify jest teraz chroniona przez CrowdSec!