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
- Bot znajduje panel logowania:
https://twojadomena.pl/wp-login.php - Używa popularnych loginów:
admin,administrator,user, nazwa domeny - Próbuje słownik 10,000 najpopularniejszych haseł:
123456,password,qwerty123admin123,welcome,letmeinpassword1,123456789,12345678
- 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:
- Zaloguj się do WordPress
- Wtyczki → Dodaj nową
- Wyszukaj:
Limit Login Attempts Reloaded - Instaluj → Aktywuj
Konfiguracja (zalecana dla hostingu Joton):
- Ustawienia → Limit Login Attempts
- Zakładka Settings:
| Ustawienie | Wartość zalecana | Wyjaśnienie |
|---|---|---|
| Allowed retries | 4 próby | Po 4 błędnych logowaniach = blokada IP |
| Minutes lockout | 20 minut | Czas blokady po pierwszym przekroczeniu |
| Lockout after | 4 lockouts | Po 4 blokadach (16 prób total) = long lockout |
| Hours long lockout | 24 godziny | Długa blokada dla uporczywych botów |
| Reset retries after | 12 godzin | Po tym czasie licznik prób wraca do 0 |
Zakładka App Settings:
- Email notification: Włącz jeśli chcesz dostawać alerty o blokadach
- Lockout logs: Zapisuj blokady (przydatne do analizy ataków)
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 logowaniahttps://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:
- Wtyczki → Dodaj nową → Wyszukaj:
WPS Hide Login - Instaluj → Aktywuj
Konfiguracja:
- Ustawienia → WPS Hide Login
- 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)
- Dobry przykład:
- 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)
- 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:
- Zaloguj się przez FTP/Manager plików Joton
- Przejdź do
wp-content/plugins/ - Zmień nazwę folderu:
wps-hide-login/→wps-hide-login-disabled/ - WordPress automatycznie wyłączy wtyczkę
- Stary
/wp-login.phpwróci - Zaloguj się standardowo → ponownie aktywuj wtyczkę → tym razem zapisz URL!
Weryfikacja:
- Otwórz przeglądarkę (tryb incognito)
- Spróbuj wejść na stary URL:
https://twojadomena.pl/wp-login.php- Powinno pokazać 404 Not Found lub przekierowanie na stronę główną
- 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
| Typ | Przykład | Wady | Zalety |
|---|---|---|---|
| reCAPTCHA v2 | "Zaznacz: Nie jestem robotem" + puzzle obrazkowe | Irytujące dla użytkowników, problemy z accessibility | Darmowy, skuteczny (Google) |
| reCAPTCHA v3 | Niewidoczny (analiza zachowania) | Czasem blokuje prawdziwych użytkowników za VPN | Nie wymaga interakcji użytkownika |
| hCaptcha | Alternatywa dla reCAPTCHA (privacy-friendly) | Mniej popularna | Lepszy privacy niż Google |
| Cloudflare Turnstile | Najnowsza technologia (lightweight) | Wymaga konta Cloudflare | Najlż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
- Otwórz: https://www.google.com/recaptcha/admin/create
- Zaloguj się kontem Google
- Wypełnij formularz:
- Label: Nazwa twojej strony (np. "MojSklep WordPress")
- reCAPTCHA type: wybierz reCAPTCHA v3
- Domains: wpisz
twojadomena.pl(bez https://) - Zaakceptuj regulamin → Submit
- Skopiuj:
- Site Key (klucz publiczny)
- Secret Key (klucz prywatny)
Krok 2: Instalacja wtyczki
- Wtyczki → Dodaj nową → Wyszukaj:
Advanced Google reCAPTCHA - Instaluj → Aktywuj
Krok 3: Konfiguracja wtyczki
- Ustawienia → Advanced reCAPTCHA Settings
- Wklej:
- Site Key: (skopiowany z Google)
- Secret Key: (skopiowany z Google)
- reCAPTCHA Version: v3
- 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)
- 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)
- Save Settings
Weryfikacja:
- Wyloguj się z WordPress
- Otwórz
/wp-login.php(lub nowy URL z WPS Hide Login) - W prawym dolnym rogu powinieneś zobaczyć badge: "protected by reCAPTCHA"
- 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:
- Coś co wiesz - hasło
- 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:
- Wtyczki → Dodaj nową → Wyszukaj:
WP 2FA - Instaluj → Aktywuj
- 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)
Pobierz aplikację mobilną:
- Android/iOS: Google Authenticator (darmowa)
- Alternatywy: Authy, Microsoft Authenticator, FreeOTP
- Desktop: 1Password, Bitwarden (jeśli mają funkcję TOTP)
Zeskanuj QR kod:
- Otwórz aplikację mobilną
- Kliknij "+" lub "Dodaj konto"
- Wybierz "Zeskanuj kod QR"
- Skieruj kamerę na kod wyświetlony w WordPress
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):
- Zaloguj się przez SSO z panelu Joton: Reset hasła - SSO
- Wtyczki → WP 2FA → Dezaktywuj
- Zaloguj się standardowo (tylko hasło) → ponownie skonfiguruj 2FA
Weryfikacja:
- Wyloguj się z WordPress
- Zaloguj się z poprawną nazwą użytkownika i hasłem
- Pojawi się drugi ekran: "Enter your authentication code"
- Otwórz aplikację mobilną → wpisz 6-cyfrowy kod
- Zalogowany!
Od teraz każde logowanie wymaga:
- Hasło (coś co wiesz)
- 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:
- Limit Login Attempts Reloaded → Lockouts
- 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ć:
- Zaloguj się przez FTP/Manager plików Joton
- Otwórz plik
.htaccessw katalogupublic_html - Dodaj na początku pliku (przed
# BEGIN WordPress):
# 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).
- 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:
- Zaloguj się do Cloudflare
- Security → WAF → Tools → IP Access Rules
- Dodaj:
- IP Address:
123.45.67.89 - Action: Block
- Zone: Twoja domena
- IP Address:
- 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ć:
- Limit Login Attempts Reloaded - blokada po 4 próbach
- 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
Recommended Setup (20 minut) - dla firm i sklepów
Co wdrożyć (dodatkowo do Minimum):
- Limit Login Attempts Reloaded
- WPS Hide Login - zmiana URL logowania
- reCAPTCHA v3 - blokada automatów
- 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):
- Wszystko z "Recommended Setup"
- WP 2FA - weryfikacja dwuetapowa dla administratorów
- 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:
- Wpisz hasło (jak zwykle)
- Otwórz aplikację mobilną na telefonie (3 sekundy)
- 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.phpwró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.phpto 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 → WordPressKaż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:
- Wtyczki → Dodaj nową → Wyszukaj:
WP Activity Log - Instaluj → Aktywuj
- 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 minutesJeś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:
Zainstaluj kompleksową wtyczkę bezpieczeństwa - Wtyczki bezpieczeństwa (Wordfence, iThemes, Sucuri)
Zabezpiecz wp-config.php - Hardening wp-config.php (wyłączenie edytora, security keys)
Skonfiguruj monitoring - Monitoring i audyt (logi aktywności, wykrywanie zagrożeń)
Sprawdź użytkowników - Użytkownicy → Wszyscy - usuń nieaktywne konta admina, zmień login "admin" na unikalny
Przydatne linki
- Bezpieczeństwo WordPress - przegląd - poziomy zabezpieczeń, funkcje Joton (LSWS)
- Reset hasła WordPress - SSO, WordPress Toolkit
- Weryfikacja dwuetapowa 2FA - 2FA dla panelu klienta Joton
- OWASP - Brute Force Attacks - dokumentacja bezpieczeństwa
Powrót do: Bezpieczeństwo WordPress