CrowdSec – dodatkowa ochrona serwera Linux, Nginx i SSH przed botami oraz atakami brute-force

Jeśli korzystasz z serwera Linux z Nginx, SSH lub WordPressem, prawdopodobnie znasz już Fail2Ban. Jest to dobre narzędzie, ale działa lokalnie — blokuje tylko adresy IP, które zaatakowały Twój serwer.

CrowdSec działa zupełnie inaczej. To system ochrony oparty o współdzieloną reputację IP. Jeśli tysiące serwerów na świecie wykryją atakujące IP, Twój serwer może je zablokować zanim jeszcze spróbują ataku.

Jak działa CrowdSec?

  • analizuje logi systemowe (nginx, ssh, wordpress)
  • wykrywa podejrzane zachowanie
  • wymienia informacje o atakujących IP z innymi serwerami
  • blokuje ruch na poziomie firewalla

Efekt? Większość botów i skanerów internetu nigdy nie dociera do Twojego Nginxa.

Instalacja CrowdSec na Debian / Ubuntu

Instalacja CrowdSec jest bardzo prosta i dostępna bezpośrednio z repozytoriów Debiana.

Podczas instalacji CrowdSec automatycznie:

  • tworzy lokalne API (LAPI)
  • rejestruje serwer w CrowdSec Central API
  • pobiera podstawowe scenariusze bezpieczeństwa

Instalacja firewall bouncer

CrowdSec sam wykrywa zagrożenia, ale potrzebuje komponentu wykonawczego — tzw. bouncera, który blokuje ruch w firewallu.

Domyślnie bouncer korzysta z nftables i automatycznie dodaje reguły blokujące adresy IP.

Instalacja kolekcji bezpieczeństwa

Kolekcje zawierają parsery logów oraz scenariusze wykrywania ataków.

Po instalacji przeładuj konfigurację:

Konfiguracja logów Nginx

Aby CrowdSec analizował ruch HTTP, należy wskazać logi Nginx.

Edytuj plik:

Dodaj konfigurację:

Następnie uruchom ponownie usługę:

Sprawdzenie działania CrowdSec

Status usługi:

Lista aktywnych banów:

Statystyki działania:

Efekt końcowy

Po poprawnej instalacji CrowdSec:

  • serwer automatycznie blokuje znane botnety
  • ataki WordPress i brute-force SSH są zatrzymywane na firewallu
  • Nginx obsługuje mniej złośliwego ruchu
  • CPU i IO serwera są znacząco odciążone

CrowdSec można traktować jako ewolucję Fail2Ban — system, który nie tylko reaguje lokalnie, ale korzysta z globalnej inteligencji zagrożeń.

Fail2Ban: jak wyłapać recydywistów i banować ich na tydzień (recidive)


Jeśli korzystasz z Fail2Ban przy Nginx i WordPress, to prędzej czy później zauważysz jedną rzecz: te same adresy IP wracają. Dostają bana na kilka minut albo godzinę, znikają… i po chwili znowu próbują /.env, /wp-login.php, /phpmyadmin czy inne popularne ścieżki ataku.

Rozwiązaniem nie jest agresywne podkręcanie filtrów. Rozwiązaniem jest recidive — drugi poziom ochrony w Fail2Ban, który analizuje historię banów i długoterminowo blokuje recydywistów.

Nawiązanie do wcześniejszej konfiguracji

Jeśli nie masz jeszcze podstawowej konfiguracji Fail2Ban dla Nginx i WordPress, opisałem ją tutaj:

Fail2Ban + Nginx + WordPress – konfiguracja podstawowa

W tamtym artykule konfigurujemy jail’e typu nginx-exploit, nginx-secure czy sshd. Recidive nie zastępuje tej konfiguracji — on ją wzmacnia.

Jak znaleźć recydywistów w logach

Najpierw warto sprawdzić, czy problem faktycznie występuje. Wyciągamy z logów Fail2Ban listę IP, które były banowane najczęściej:

Przykładowy wynik (adresy częściowo anonimizowane):

Jeśli widzisz liczby typu 8, 9, 13 — to znaczy, że te IP wracają po zdjęciu bana. Krótki bantime jest dla nich tylko przerwą techniczną.

Dlaczego recidive jest lepszy niż zwiększanie bantime

  • Nie musisz banować każdego na 24h za jedną literówkę w URL.
  • Nie zwiększasz ryzyka blokady normalnych użytkowników.
  • Kara jest progresywna i dotyczy tylko powracających adresów.

Recidive analizuje /var/log/fail2ban.log i liczy, ile razy dane IP zostało zbanowane przez inne jail’e. Dzięki temu “dobić” można tylko tych, którzy już wcześniej wielokrotnie trafiali na blokadę.

Konfiguracja recidive (5 banów w 24h = 7 dni bana)

Dodaj poniższy blok do /etc/fail2ban/jail.local:

Na końcu pliku wklej:

Zapisz plik i zrestartuj Fail2Ban:

Sprawdź status jaila:

Jak sprawdzić kto jest blisko progu recidive

Jeśli chcesz zobaczyć IP, które już mają kilka banów i zbliżają się do progu recidive:

Podsumowanie

Recidive to jeden z najprostszych i najbardziej skutecznych sposobów na ograniczenie powracających skanerów i botów. Zamiast agresywnie banować wszystkich — blokujesz tylko tych, którzy wracają wielokrotnie.

W środowisku z wieloma domenami, Nginx reverse proxy i WordPress to praktycznie obowiązkowy element konfiguracji: mniej szumu w logach, mniej powtarzalnych ataków i mniej ręcznej analizy.

Debian 13 (Trixie) → Proxmox VE 9 – Uproszczona instalacja na czystym Debianie

Proxmox VE 9 bazuje na Debianie 13 (Trixie) i wprowadza nowsze jądro systemu, zaktualizowane LXC, QEMU oraz ulepszony stos wirtualizacji. Ten poradnik przedstawia uproszczoną i zautomatyzowaną metodę instalacji Proxmox VE 9 na czystym systemie Debian 13 przy użyciu dwóch skryptów instalacyjnych.

Metoda opiera się na tym samym podejściu, co mój wcześniejszy poradnik instalacji Proxmox 8 na Debianie 12, ale została dostosowana do Debiana 13 oraz Proxmox VE 9.

Wymagania wstępne

  • Świeża instalacja Debian 13 (Trixie)
  • Dostęp root
  • Połączenie z Internetem

Wszystkie polecenia należy wykonywać jako użytkownik root.

Część 1 – Przygotowanie systemu i instalacja jądra Proxmox

Pobierz pierwszy skrypt:

Ten skrypt:

  • Ustawia hostname i aktualizuje plik /etc/hosts
  • Instaluje keyring archiwum Proxmox (weryfikowany przez SHA512)
  • Dodaje repozytorium Proxmox VE 9 dla Debian 13
  • Wykonuje pełną aktualizację systemu
  • Instaluje proxmox-default-kernel
  • Restartuje system

Zawartość install-proxmox9-part1.sh

Część 2 – Instalacja Proxmox VE 9

Po restarcie pobierz i uruchom:

Zawartość install-proxmox9-part2.sh

Dostęp do interfejsu webowego

Po zakończeniu działania drugiego skryptu otwórz:

Zaloguj się użytkownikiem root oraz swoim hasłem roota. Możesz zobaczyć ostrzeżenie o certyfikacie — jest to normalne przy świeżych instalacjach.

Rozwiązywanie problemów – błąd 401 Unauthorized (repozytorium pve-enterprise)

Jeśli po instalacji lub podczas wykonywania apt update pojawi się następujący błąd:

Oznacza to, że aktywne jest repozytorium enterprise, ale system nie posiada ważnej subskrypcji Proxmox. W tym poradniku korzystamy z repozytorium pve-no-subscription, więc należy wyłączyć repozytorium enterprise.

Naprawa jest bardzo prosta – wykonaj:

Po wyłączeniu repozytorium aktualizacja powinna zakończyć się poprawnie:

Jeśli wszystko jest w porządku, zobaczysz komunikat:

Podsumowanie

Ta metoda zapewnia czysty i kontrolowany sposób wdrożenia Proxmox VE 9 bezpośrednio na Debianie 13, bez używania instalatora ISO. Jest szczególnie przydatna w środowiskach zautomatyzowanych, laboratoriach oraz niestandardowych konfiguracjach infrastruktury.

Fail2Ban + Nginx (WordPress-friendly): 5 podejrzanych żądań → ban na 5 minut (iptables-nft fix, testy i odblokowanie IP)

Ten poradnik pokazuje kompletną instalację i konfigurację Fail2Ban dla Nginx i WordPressa, w taki sposób, aby:

  • blokować skanery i boty (np. próby dostępu do /.env, /.git, phpmyadmin itd.),
  • nie blokować administratora WordPressa,
  • banować IP po 5 błędnych/podejrzanych żądaniach,
  • ban trwa tylko 5 minut (bez ryzyka zablokowania samego siebie na długo).

Krok 1: instalacja Fail2Ban

Zainstaluj Fail2Ban:

Włącz i uruchom usługę:

Sprawdź czy działa:

Krok 2: utworzenie filtra nginx-secure

Utwórz plik filtra:

Wklej:

Krok 3: utworzenie jail nginx-secure

Utwórz plik:

Wklej:

Krok 4: restart Fail2Ban

Krok 5: sprawdzenie czy firewall działa

Sprawdź czy chain istnieje:

Test z zewnątrz

Uruchom z innej maszyny:

Po 5 próbach IP zostanie zbanowane na 5 minut.

Sprawdzenie banów

Odblokowanie IP

Odblokuj swoje IP:

Podsumowanie

  • chroni przed skanerami i exploitami,
  • nie blokuje panelu WordPress,
  • ban trwa tylko 5 minut,
  • działa poprawnie z iptables-nft,
  • łatwy test i łatwe odblokowanie IP.

Automatyczny upgrade Debian 12 → Debian 13 z opcjonalną aktualizacją PHP i nginx

Upgrade Debiana z wersji 12 (bookworm) do 13 (trixie) to operacja, która na serwerach i kontenerach (np. Proxmox LXC / VM) powinna być robiona powtarzalnie i bez niespodzianek. Poniżej masz prosty poradnik oraz gotowe komendy do pobrania i uruchomienia skryptu.

Zanim odpalisz upgrade: zrób backup / snapshot. W Proxmoxie najlepiej vzdump lub snapshot. Na bare-metal chociaż kopia /etc, aplikacji i baz danych.

  • Proxmox LXC / VM: backup (vzdump) albo snapshot.
  • Serwer: backup /etc, /var/www, bazy danych (MySQL/PostgreSQL), certyfikaty SSL.

Skrypt do pobrania:

https://soban.pl/bash/upgrade_to_debian13.sh

1) Backup przed upgradem (przykłady)

Przykład backupu w Proxmox (na hoście Proxmox, podmień CTID/VMID):

Przykład prostego backupu katalogów na serwerze (to nie zastąpi pełnego snapshotu, ale lepsze to niż nic):

2) Pobranie skryptu (wget / curl)

Najprościej: użyj wget. Jeśli komenda wget nie działa mimo zainstalowanego pakietu, użyj wariantu z pełną ścieżką /usr/bin/wget.

Wariant A (standardowy wget):

Wariant B (wget z pełną ścieżką – pomaga gdy PATH jest skopany):

Wariant C (curl):

3) Pomoc skryptu (parametry)

Zanim odpalisz upgrade, zobacz listę parametrów i przykłady użycia:

4) Upgrade Debian 12 → Debian 13 (system only)

Jeśli jesteś na Debian 12 (bookworm) i chcesz wykonać tylko upgrade systemu:

Skrypt zrobi backup /etc/apt/sources.list, podmieni repozytoria na trixie, wykona apt update oraz apt full-upgrade, a na końcu autoremove i autoclean.

5) Auto-detekcja PHP/nginx i aktualizacja jeśli potrzeba

Jeśli kontener/VM jest webowy i chcesz, żeby skrypt sam wykrył użycie PHP (nginx + fastcgi_pass) i w razie potrzeby zaktualizował PHP oraz nginx:

6) Wymuszona aktualizacja PHP i nginx (PHP-FPM socket fix)

Jeśli chcesz wymusić instalację/upgrade PHP oraz automatyczne przestawienie konfiguracji nginx na poprawny socket PHP-FPM:

To polecenie instaluje PHP 8.2 (php-fpm + popularne moduły) i podmienia w konfiguracjach nginx stare ścieżki socketów na /run/php/php8.2-fpm.sock. Następnie wykonuje nginx -t oraz restart/reload usług.

7) Debian 13 już jest? Tryb tylko PHP/nginx (bez release upgrade)

Jeżeli system jest już na Debian 13 (trixie) i chcesz wykonać tylko aktualizację PHP/nginx bez ruszania repozytoriów systemowych:

8) Tryb testowy (dry-run)

Jeśli chcesz zobaczyć co skrypt zrobi, ale bez wykonywania zmian:

9) Diagnostyka: wget jest zainstalowany, a nie działa

Jeżeli apt mówi, że wget jest zainstalowany, a shell krzyczy command not found, to najczęściej problem z PATH. Najprostsza obejściówka to użycie pełnej ścieżki: /usr/bin/wget.

Podsumowanie

To rozwiązanie jest wygodne, bo w jednym miejscu masz upgrade Debian 12 → Debian 13 oraz (opcjonalnie) ogarnięcie problemów z PHP/nginx po upgrade (socket PHP-FPM, test konfiguracji nginx i restart usług). Najważniejsze: zrób backup przed upgradem i zawsze zacznij od --help, żeby widzieć dostępne opcje.

Skrypt: https://soban.pl/bash/upgrade_to_debian13.sh