Skip to content

Ochrona przed atakami brute-force

Atak brute-force to próba złamania hasła przez automatyczne wypróbowanie tysięcy kombinacji. WordPress domyślnie NIE limituje liczby prób logowania - bot może próbować 1000 haseł na minutę bez żadnych konsekwencji.

📊 Poziom trudności

Początkujący

⏱️ Czas wdrożenia: 10-40 minut (zależy od wybranej strategii) 🛠️ Wymagane umiejętności: Podstawowa obsługa WordPress (instalacja wtyczek) 💻 Narzędzia: Panel WordPress + konto Google (dla CAPTCHA)

Czym jest atak brute-force?

Typowy scenariusz ataku

  1. Bot znajduje panel logowania: https://twojadomena.pl/wp-login.php
  2. Używa popularnych loginów: admin, administrator, user, nazwa domeny
  3. Próbuje słownik 10,000 najpopularniejszych haseł:
    • 123456, password, qwerty123
    • admin123, welcome, letmein
    • password1, 123456789, 12345678
  4. Wysyła 100-500 prób/minutę przez dni/tygodnie

Konsekwencje nieudanego ataku (nawet bez przełamania hasła)

Dla serwera:

  • Przeciążenie - setki żądań PHP/MySQL na minutę
  • Wolniejsza strona dla prawdziwych użytkowników (zasoby zajęte przez bota)
  • Zużycie zasobów hostingu (może przekroczyć limity CPU/RAM)

Dla administratora:

  • Setki emaili z powiadomieniami "Nieudane logowanie"
  • Logi zapełnione spamem (trudniej znaleźć prawdziwe problemy)

Konsekwencje udanego ataku

Jeśli bot zgadnie hasło:

  • Przejęcie kontroli nad WordPress
  • Wstrzyknięcie malware - backdoor, spam, phishing
  • Kradzież danych - użytkownicy, zamówienia (WooCommerce)
  • SEO spam - linki do stron z viagrami, przekierowania
  • Blokada w Google Safe Browsing - utrata 70-95% ruchu organicznego

⚠️ Czy silne hasło wystarczy?

Silne hasło (16+ znaków, litery+cyfry+symbole) znacznie utrudnia brute-force, ale:

  • Bot nadal generuje tysiące żądań (obciąża serwer nawet bez sukcesu)
  • Jeśli hasło wycieknie w innym serwisie (data breach), atakujący spróbuje go wszędzie
  • Nie chroni przed exploitami wtyczek (np. Privilege Escalation)

Zalecamy: Silne hasło + minimum 2 warstwy ochrony z poniższych metod


Wielowarstwowa ochrona - stack

Hosting Joton już chroni Cię na poziomie serwera:

Warstwa 1: LiteSpeed Web Server (LSWS) - automatyczna, wbudowana w Joton

  • Rate limiting (ograniczanie żądań z jednego IP)
  • Connection limiting (blokada nadmiernych połączeń)
  • Wykrywa i blokuje nietypowe wzorce ruchu

Zobacz: Funkcje bezpieczeństwa Joton - LSWS

Warstwa 2-7: Dodatkowa ochrona na poziomie WordPress (opisane poniżej)

Poniższe metody uzupełniają ochronę LSWS, tworząc wielowarstwowy system bezpieczeństwa.


Warstwa 2: Limitowanie prób logowania

Efekt: Blokada IP po X nieudanych próbach logowania

Priorytet: 🔴 Krytyczny (MUST-HAVE dla każdej strony)

Wtyczka: Limit Login Attempts Reloaded (zalecana dla początkujących)

Dlaczego ta wtyczka:

  • Najprostsza konfiguracja (działa "out of the box")
  • Aktywnie rozwijana (ponad 1M instalacji)
  • Darmowa, bez reklam, open source
  • Kompatybilna z Cloudflare, Redis, LiteSpeed Cache

Instalacja:

  1. Zaloguj się do WordPress
  2. Wtyczki → Dodaj nową
  3. Wyszukaj: Limit Login Attempts Reloaded
  4. Instaluj → Aktywuj

Konfiguracja (zalecana dla hostingu Joton):

  1. Ustawienia → Limit Login Attempts
  2. Zakładka Settings:
UstawienieWartość zalecanaWyjaśnienie
Allowed retries4 próbyPo 4 błędnych logowaniach = blokada IP
Minutes lockout20 minutCzas blokady po pierwszym przekroczeniu
Lockout after4 lockoutsPo 4 blokadach (16 prób total) = long lockout
Hours long lockout24 godzinyDługa blokada dla uporczywych botów
Reset retries after12 godzinPo tym czasie licznik prób wraca do 0
  1. Zakładka App Settings:

    • Email notification: Włącz jeśli chcesz dostawać alerty o blokadach
    • Lockout logs: Zapisuj blokady (przydatne do analizy ataków)
  2. Save Settings

Weryfikacja:

Otwórz przeglądarkę (tryb incognito) i spróbuj zalogować się 5 razy z błędnym hasłem. Po 4 próbie zobaczysz:

ERROR: Too many failed login attempts.
Try again in 20 minutes.

💡 Whitelist własnego IP

Jeśli często zapominasz hasła lub logujesz się z tego samego miejsca (biuro, dom), dodaj swoje IP do białej listy:

Settings → IP Whitelist → Add your IP: 123.45.67.89

Znajdź swoje IP: https://whatismyipaddress.com/

Twoje IP nigdy nie będzie blokowane (nawet po 100 błędnych próbach).

Konfiguracje dla różnych typów stron:

Dla blogów/portfolio (ruch <10k/m-c):

  • Allowed retries: 4 próby
  • Minutes lockout: 20 minut
  • Lockout after: 4 lockouts

Dla sklepów e-commerce (WooCommerce):

  • Allowed retries: 3 próby (bardziej restrykcyjne)
  • Minutes lockout: 30 minut
  • Lockout after: 3 lockouts
  • Hours long lockout: 48 godzin

Dla portali z wieloma użytkownikami:

  • Allowed retries: 5 prób (użytkownicy częściej zapominają haseł)
  • Minutes lockout: 15 minut
  • Lockout after: 5 lockouts

Warstwa 3: Zmiana URL panelu logowania

Efekt: Ukrycie /wp-login.php i /wp-admin/ - boty nie znajdą panelu logowania

Priorytet: 🟡 Wysoki (zalecane dla każdej strony)

Dlaczego ukrywać URL logowania?

WordPress domyślnie używa:

  • https://twojadomena.pl/wp-login.php - formularz logowania
  • https://twojadomena.pl/wp-admin/ - przekierowuje na wp-login.php

Te adresy są znane każdemu botowi. Zmiana URL na https://twojadomena.pl/moj-tajny-panel-2024/ eliminuje 99% automatycznych ataków (boty nie wiedzą gdzie szukać).

Wtyczka: WPS Hide Login (najprostsza)

Instalacja:

  1. Wtyczki → Dodaj nową → Wyszukaj: WPS Hide Login
  2. Instaluj → Aktywuj

Konfiguracja:

  1. Ustawienia → WPS Hide Login
  2. Login URL: wpisz własny URL (np. moj-admin-2024)
    • Dobry przykład: sekretny-panel, zarzadzanie-xyz, login-jt2024
    • ❌ Zły przykład: admin, login, backend (łatwe do zgadnięcia dla atakującego)
  3. Redirect URL (opcjonalne): gdzie przekierować boty próbujące wejść na /wp-admin/
    • Zalecamy: zostaw puste (zwróci 404 Not Found)
    • Lub ustaw / (strona główna - bot myśli że to normalna strona)
  4. Save Changes

⚠️ ZAPISZ NOWY URL - inaczej stracisz dostęp!

Po aktywacji WPS Hide Login stary adres /wp-login.php przestanie działać natychmiast.

MUSISZ zapisać nowy URL logowania:

  • W menedżerze haseł (1Password, Bitwarden)
  • W zakładkach przeglądarki
  • Na kartce (backup)

Nowy URL będzie:

https://twojadomena.pl/moj-admin-2024/

Zastąp moj-admin-2024 tym co wpisałeś w "Login URL".

Jeśli zapomniałeś nowego URL:

  1. Zaloguj się przez FTP/Manager plików Joton
  2. Przejdź do wp-content/plugins/
  3. Zmień nazwę folderu: wps-hide-login/wps-hide-login-disabled/
  4. WordPress automatycznie wyłączy wtyczkę
  5. Stary /wp-login.php wróci
  6. Zaloguj się standardowo → ponownie aktywuj wtyczkę → tym razem zapisz URL!

Weryfikacja:

  1. Otwórz przeglądarkę (tryb incognito)
  2. Spróbuj wejść na stary URL: https://twojadomena.pl/wp-login.php
    • Powinno pokazać 404 Not Found lub przekierowanie na stronę główną
  3. Otwórz nowy URL: https://twojadomena.pl/moj-admin-2024/
    • Powinien pojawić się formularz logowania WordPress

Warstwa 4: CAPTCHA na formularzu logowania

Efekt: Blokada automatycznych botów (wymaga interakcji człowieka)

Priorytet: 🟡 Średni (zalecane dla sklepów i portali z wieloma użytkownikami)

Rodzaje CAPTCHA

TypPrzykładWadyZalety
reCAPTCHA v2"Zaznacz: Nie jestem robotem" + puzzle obrazkoweIrytujące dla użytkowników, problemy z accessibilityDarmowy, skuteczny (Google)
reCAPTCHA v3Niewidoczny (analiza zachowania)Czasem blokuje prawdziwych użytkowników za VPNNie wymaga interakcji użytkownika
hCaptchaAlternatywa dla reCAPTCHA (privacy-friendly)Mniej popularnaLepszy privacy niż Google
Cloudflare TurnstileNajnowsza technologia (lightweight)Wymaga konta CloudflareNajlżejszy, privacy-friendly

Rekomendacja: reCAPTCHA v3 (invisible) - najlepszy balans bezpieczeństwo/wygoda dla użytkownika

Wtyczka: Advanced Google reCAPTCHA

Krok 1: Uzyskaj klucze reCAPTCHA v3

  1. Otwórz: https://www.google.com/recaptcha/admin/create
  2. Zaloguj się kontem Google
  3. Wypełnij formularz:
    • Label: Nazwa twojej strony (np. "MojSklep WordPress")
    • reCAPTCHA type: wybierz reCAPTCHA v3
    • Domains: wpisz twojadomena.pl (bez https://)
    • Zaakceptuj regulamin → Submit
  4. Skopiuj:
    • Site Key (klucz publiczny)
    • Secret Key (klucz prywatny)

Krok 2: Instalacja wtyczki

  1. Wtyczki → Dodaj nową → Wyszukaj: Advanced Google reCAPTCHA
  2. Instaluj → Aktywuj

Krok 3: Konfiguracja wtyczki

  1. Ustawienia → Advanced reCAPTCHA Settings
  2. Wklej:
    • Site Key: (skopiowany z Google)
    • Secret Key: (skopiowany z Google)
    • reCAPTCHA Version: v3
  3. Forms to Protect (formularze do ochrony):
    • Login Form (MUST-HAVE)
    • Registration Form (jeśli masz rejestrację użytkowników)
    • Lost Password Form (zalecane)
    • Comments (opcjonalne - jeśli masz problem ze spamem w komentarzach)
  4. Score Threshold (próg dla v3):
    • Ustaw: 0.5 (domyślne)
    • Niższy = bardziej restrykcyjny (0.3 = blokuje więcej podejrzanych)
    • Wyższy = mniej restrykcyjny (0.7 = przepuszcza więcej)
  5. Save Settings

Weryfikacja:

  1. Wyloguj się z WordPress
  2. Otwórz /wp-login.php (lub nowy URL z WPS Hide Login)
  3. W prawym dolnym rogu powinieneś zobaczyć badge: "protected by reCAPTCHA"
  4. Spróbuj zalogować się - jeśli reCAPTCHA działa, formularz odeśle bez dodatkowej interakcji

💡 reCAPTCHA v3 jest niewidoczna

Użytkownicy NIE muszą klikać "Nie jestem robotem". Google analizuje zachowanie w tle:

  • Ruch myszki
  • Czas wypełniania formularza
  • Historia przeglądania (jeśli zalogowany do Google)

Wynik: ocena 0.0-1.0 gdzie:

  • 1.0 = pewny człowiek
  • 0.0 = pewny bot

Jeśli score < threshold (0.5), formularz nie przejdzie.


Warstwa 5: Weryfikacja dwuetapowa (2FA) - najsilniejsza ochrona

Efekt: Nawet jeśli atakujący zna hasło, nie wejdzie bez kodu z telefonu

Priorytet: 🔴 Krytyczny dla administratorów, 🟡 Zalecane dla wszystkich użytkowników

Czym jest 2FA?

Weryfikacja dwuetapowa wymaga dwóch składników do logowania:

  1. Coś co wiesz - hasło
  2. Coś co masz - kod z aplikacji mobilnej (Google Authenticator, Authy) lub SMS

Nawet jeśli atakujący:

  • Wykradnie hasło (phishing, data breach, keylogger)
  • Złamie hasło (brute-force, słownik)

Nie może się zalogować bez drugiego składnika (telefonu).

Wtyczka: WP 2FA (zalecana)

Dlaczego ta wtyczka:

  • Oficjalnie rekomendowana przez WordPress.org
  • Obsługuje TOTP (Google Authenticator, Authy, 1Password)
  • Email backup codes (jeśli zgubisz telefon)
  • Wymuszenie 2FA dla ról (Administrator, Editor)
  • Darmowa, open source

Instalacja:

  1. Wtyczki → Dodaj nową → Wyszukaj: WP 2FA
  2. Instaluj → Aktywuj
  3. Pojawi się kreator konfiguracji (Configuration Wizard)

Krok 1: Choose 2FA method

  • Wybierz: One-Time Password (recommended)
  • Kliknij Continue

Krok 2: Choose enforcement policy

  • For which roles? → Zaznacz: Administrator (must-have)
  • Opcjonalnie: Editor (jeśli masz redaktorów)
  • Grace period: 7 days (użytkownicy mają 7 dni na skonfigurowanie 2FA)
  • Kliknij Continue

Krok 3: Configure your 2FA (dla Twojego konta)

  1. Pobierz aplikację mobilną:

    • Android/iOS: Google Authenticator (darmowa)
    • Alternatywy: Authy, Microsoft Authenticator, FreeOTP
    • Desktop: 1Password, Bitwarden (jeśli mają funkcję TOTP)
  2. Zeskanuj QR kod:

    • Otwórz aplikację mobilną
    • Kliknij "+" lub "Dodaj konto"
    • Wybierz "Zeskanuj kod QR"
    • Skieruj kamerę na kod wyświetlony w WordPress
  3. Wpisz kod:

    • Aplikacja pokaże 6-cyfrowy kod (zmienia się co 30 sekund)
    • Wpisz kod w polu Authentication Code
    • Kliknij Validate & Save

Krok 4: Backup codes (WAŻNE - zapisz je!)

Wtyczka wygeneruje 10 backup codes (jednorazowe kody awaryjne). Zapisz je w bezpiecznym miejscu (menedżer haseł):

1A2B-3C4D
5E6F-7G8H
9I0J-1K2L
...

Kiedy użyjesz backup codes:

  • Zgubiłeś telefon
  • Nie masz dostępu do aplikacji (rozładowana bateria, brak internetu)
  • Zmieniłeś telefon i nie przeniosłeś aplikacji

Każdy kod działa tylko raz - po użyciu staje się nieważny.

⚠️ Backup codes to "złoty klucz" - bez nich stracisz dostęp

Jeśli zgubisz telefon i nie zapiszesz backup codes, stracisz dostęp do WordPress.

MUSISZ zapisać backup codes:

  • W menedżerze haseł (1Password, Bitwarden) - sekcja "Notes"
  • Wydrukować i schować w bezpiecznym miejscu
  • Zapisać w zaszyfrowanym pliku (VeraCrypt, 7-Zip z hasłem)

Jeśli stracisz dostęp (bez backup codes):

  1. Zaloguj się przez SSO z panelu Joton: Reset hasła - SSO
  2. Wtyczki → WP 2FA → Dezaktywuj
  3. Zaloguj się standardowo (tylko hasło) → ponownie skonfiguruj 2FA

Weryfikacja:

  1. Wyloguj się z WordPress
  2. Zaloguj się z poprawną nazwą użytkownika i hasłem
  3. Pojawi się drugi ekran: "Enter your authentication code"
  4. Otwórz aplikację mobilną → wpisz 6-cyfrowy kod
  5. Zalogowany!

Od teraz każde logowanie wymaga:

  1. Hasło (coś co wiesz)
  2. Kod z telefonu (coś co masz)

Warstwa 6: Blokowanie IP na poziomie serwera (zaawansowane)

Efekt: Całkowita blokada IP przed dotarciem do WordPress (najszybsze)

Priorytet: 🟢 Niski (tylko jeśli masz ciągłe ataki z tych samych IP)

Kiedy używać blokowania IP?

  • Widzisz w logach ten sam IP atakujący tysiące razy
  • Wtyczka Limit Login Attempts blokuje go, ale wciąż próbuje
  • Chcesz trwale zablokować IP (nie tylko na 24h)

Metoda 1: .htaccess (LiteSpeed/Apache)

Jak znaleźć IP atakującego:

  1. Limit Login Attempts Reloaded → Lockouts
  2. Zobaczysz listę zablokowanych IP:
    123.45.67.89 - 47 failed attempts - Locked until: 2024-01-15 14:30
    123.45.67.89 - 52 failed attempts - Locked until: 2024-01-16 10:15
    123.45.67.89 - 61 failed attempts - Locked until: 2024-01-17 08:45

Jeśli to samo IP pojawia się dziesiątki razy przez tygodnie = dodaj do .htaccess.

Jak zablokować:

  1. Zaloguj się przez FTP/Manager plików Joton
  2. Otwórz plik .htaccess w katalogu public_html
  3. Dodaj na początku pliku (przed # BEGIN WordPress):
apache
# Blokada ataków brute-force
<RequireAll>
  Require all granted
  Require not ip 123.45.67.89
  Require not ip 98.76.54.32
</RequireAll>

Zmień 123.45.67.89 na IP atakującego (możesz dodać wiele linii Require not ip).

  1. Zapisz plik

Weryfikacja:

  • Otwórz stronę z zablokowanego IP (np. przez VPN) → zobaczysz 403 Forbidden
  • Z innego IP strona działa normalnie

Metoda 2: Cloudflare Firewall (jeśli używasz Cloudflare)

Jeśli Twoja domena używa Cloudflare jako proxy/CDN:

  1. Zaloguj się do Cloudflare
  2. Security → WAF → Tools → IP Access Rules
  3. Dodaj:
    • IP Address: 123.45.67.89
    • Action: Block
    • Zone: Twoja domena
  4. Add

Cloudflare zablokuje IP przed dotarciem do serwera Joton (jeszcze szybciej niż .htaccess).


Strategie ochrony - którą wybrać?

Minimum Viable Security (5 minut) - dla każdej strony

Co wdrożyć:

  1. Limit Login Attempts Reloaded - blokada po 4 próbach
  2. Silne hasło (16+ znaków) - wygeneruj w menedżerze haseł

Ochrona: 90% botów (automatyczne ataki ze słownika)

Czas wdrożenia: 5 minut

Dla kogo: Każda strona WordPress, bez wyjątku


Co wdrożyć (dodatkowo do Minimum):

  1. Limit Login Attempts Reloaded
  2. WPS Hide Login - zmiana URL logowania
  3. reCAPTCHA v3 - blokada automatów
  4. Silne hasło

Ochrona: 99% botów (włącznie z zaawansowanymi botami szukającymi ukrytych URL)

Czas wdrożenia: 20 minut

Dla kogo: Sklepy e-commerce, strony firmowe, portale z formularzami


Maximum Security (40 minut) - dla high-value targets

Co wdrożyć (wszystko z Recommended + 2FA):

  1. Wszystko z "Recommended Setup"
  2. WP 2FA - weryfikacja dwuetapowa dla administratorów
  3. Blokowanie IP (opcjonalnie - jeśli masz ciągłe ataki)

Ochrona: 99.9% ataków (włącznie z targeted attacks - celowane ataki na konkretną stronę)

Czas wdrożenia: 40 minut

Dla kogo:

  • Sklepy przetwarzające płatności (WooCommerce)
  • Portale z danymi użytkowników (członkostwa, subskrypcje)
  • Strony rządowe, medyczne, prawnicze
  • High-traffic portale (50k+ odwiedzin/m-c)

Najczęstsze pytania

Czy zmiana URL logowania wystarczy?

NIE. Atakujący może znaleźć nowy URL przez:

  • Brute-force samego URL - próbowanie /admin/, /login/, /backend/, /panel/
  • Skanowanie plików wtyczek - niektóre linkują do wp-login.php w swoim kodzie
  • Google dorking - site:twojadomena.pl inurl:login

Zalecamy: Zmiana URL + Limit Login Attempts + CAPTCHA (multi-layered defense)

Czy 2FA spowalnia logowanie?

Dodaje 5-10 sekund do procesu logowania:

  1. Wpisz hasło (jak zwykle)
  2. Otwórz aplikację mobilną na telefonie (3 sekundy)
  3. Przepisz 6-cyfrowy kod (2 sekundy)

Dla administratorów logujących się 1-2 razy dziennie to akceptowalny koszt za 99.9% ochronę.

Jeśli logujesz się 50× dziennie (development), włącz 2FA tylko na produkcji, nie na staging.

Co jeśli zablokuję siebie przez pomyłkę?

Limit Login Attempts:

  • Zaloguj się przez FTP/Manager plików Joton
  • Zmień nazwę folderu wtyczki: limit-login-attempts-reloaded/~disabled/
  • Blokada zniknie natychmiast
  • Zaloguj się do WordPress → ponownie aktywuj wtyczkę

WPS Hide Login (zapomniałem nowego URL):

  • FTP → zmień nazwę folderu: wps-hide-login/~disabled/
  • Stary /wp-login.php wróci
  • Zaloguj się → zapisz nowy URL w menedżerze haseł

WP 2FA (zgubi łem telefon, nie mam backup codes):

  • Zaloguj się przez SSO z panelu Joton: Reset hasła - SSO
  • Wyłącz wtyczkę WP 2FA
  • Zaloguj się standardowo → ponownie skonfiguruj 2FA

Zawsze masz dostęp przez FTP/SSH/Manager plików Joton - nawet jeśli WordPress jest zablokowany.

Czy LSWS w Joton wystarczy bez wtyczek?

NIE całkowicie. LSWS chroni na poziomie serwera WWW (pierwsza linia obrony), ale:

  • Nie zna kontekstu WordPress (nie wie że /wp-login.php to formularz logowania)
  • Nie może wymusić 2FA
  • Nie może ukryć URL logowania

Stack ochrony (wszystkie warstwy razem):

Internet → LSWS (rate limiting) → Limit Login Attempts (context-aware) → 2FA → WordPress

Każda warstwa uzupełnia poprzednią, nie zastępuje.


Monitoring prób logowania (opcjonalne)

Jeśli chcesz widzieć kto próbuje się włamać, zainstaluj wtyczkę do logowania aktywności:

WP Activity Log:

  1. Wtyczki → Dodaj nową → Wyszukaj: WP Activity Log
  2. Instaluj → Aktywuj
  3. Activity Log → Activity Log

Zobaczysz:

2024-01-15 14:23 | User "admin" failed login from IP 123.45.67.89 (Russia)
2024-01-15 14:24 | User "admin" failed login from IP 123.45.67.89 (Russia)
2024-01-15 14:25 | IP 123.45.67.89 locked out for 20 minutes

Jeśli widzisz setki prób z różnych IP (distributed brute-force), rozważ:

  • Cloudflare (darmowy tier) - WAF + Bot Fight Mode
  • Wordfence Firewall - blokuje znane sieci botnet

Szczegóły: Monitoring i audyt


Następne kroki

Po zabezpieczeniu logowania:

  1. Zainstaluj kompleksową wtyczkę bezpieczeństwa - Wtyczki bezpieczeństwa (Wordfence, iThemes, Sucuri)

  2. Zabezpiecz wp-config.php - Hardening wp-config.php (wyłączenie edytora, security keys)

  3. Skonfiguruj monitoring - Monitoring i audyt (logi aktywności, wykrywanie zagrożeń)

  4. Sprawdź użytkowników - Użytkownicy → Wszyscy - usuń nieaktywne konta admina, zmień login "admin" na unikalny

Przydatne linki

Powrót do: Bezpieczeństwo WordPress