Brute force -hyökkäykset ovat yleisiä, äänekkäitä ja usein toistuvia — mutta ne ovat myös hyvin estettävissä, kun järjestät oikeat kerrokset ja toimintaohjeet. Alla on käytännöllinen, ammattimainen opas, jolla pysäytät hyökkäykset ajoissa ilman turhia raskaita työkaluja. Ohjeet kattavat sekä palvelin- että WordPress-tason ratkaisut, havainnon, reagoinnin ja jälkiseurannan.
Perusidea: estä automatisoitu liikenne ennen kuin WordPress-resurssit kuormittuvat, tee sisäänpääsy vaikeaksi ja huomioi varautuminen sekä lokien seuranta.
-
Vahva perusta — estä helposti toteutettavat hyökkäykset
-
Poista tai rajoita XML-RPC: jos et käytä sitä (esim. Jetpack tai etäjulkaisu), estä kokonaan. Nginx:ssä
location = /xmlrpc.php { deny all; }
Apache/.htaccess:<Files xmlrpc.php> Order allow,deny Deny from all </Files>
-
Estä käyttäjänimien keräys (user enumeration): tunnettu endpoint
/wp-json/wp/v2/users
voi paljastaa tunnuksia. Piilota tai rajoita pääsy (esim. koodikatkaisu, joka vaatii autentikoinnin tai palauttaa 403 anon-pyynnöille). -
Poista admin-oikeudet kaikilta, jotka eivät niitä tarvitse. Minimoi tilejä, ota käyttöön vahvat salasanat ja salasanapolitiikka.
-
Estä bottihaun liikenne palvelimella (helppo ja tehokas)
-
Nginx rate limiting (yksi komentokeino pysäyttää massakokeilut):
# nginx.conf http-lohkossa
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
ja wp-login.php / xmlrpc.php sijainnissa:
location = /wp-login.php {
limit_req zone=login burst=3 nodelay;
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
-
Apache: mod_evasive tai mod_security voi tehdä saman. Käytä tarjoajan ohjeita.
-
Palomuuri & WAF — ensimmäinen linja hyökkäyksiä vastaan
-
Cloudflare (ilmainen taso) tai vastaava WAF/Edge-palvelu blokkaa DDoS-botit ennen kuin ne saavuttavat palvelimen. Ota Bot Fight Mode tai Rate Limiting käyttöön.
-
Jos et halua cloud-palvelua, käytä palvelintason palomuuria (UFW, firewalld) ja rajoita komentopyyntöjä IP-tasolla.
-
Kirjautumissivun suojaus kevyesti
-
HTTP Basic auth wp-admin/wp-login.php:n eteen (erittäin tehokas, estää WordPressin käsittelyä kokonaan):
Nginx-esimerkki:auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
Luo htpasswd:
htpasswd -c /etc/nginx/.htpasswd käyttäjä
-
Vaihtoehtona: rajoita wp-login.php:n pääsy vain hallinta-IP:ille, jos mahdollista. Tämä on tiukka mutta erittäin turvallinen ratkaisu.
-
Lisää yksi CAPTCHA tai Honeytrap: käytä pientä, kevyttä ratkaisua (esim. yksinkertainen honeypot-kenttä lomakkeessa) jos et halua isoa pluginia.
-
Automaattinen esto: Fail2Ban (suositeltava)
-
Fail2Ban lukee lokit ja estää IP:t jotka tekevät X epäonnistunutta kirjautumista. Asenna fail2ban ja lisää jailia WordPressille. Esimerkki jail.local:
[wordpress-auth]
enabled = true
filter = wordpress-auth
action = iptables[name=WP, port=http, protocol=tcp]
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 3600
Suodata etsii wp-login.php:n epäonnistuneet POST-kutsut; voit kirjoittaa yksinkertaisen filterin joka tunnistaa 401/302+failed patterns. Fail2Ban estää hyökkääjän automaattisesti ja nopeasti.
-
Monitoroi
fail2ban-client status
ja salli whitelist-osoitteet tarvittaessa.
-
Estä toistuvat hyökkäykset sovellustasolla ilman raskaita lisäosia
-
Rajoita yritykset per IP ja ota käyttöön aikakatkaisu kirjautumisen jälkeen. Voit tehdä tämän kevyesti Nginxillä tai esitoteuttamalla pienen PHP:n joka tallentaa epäonnistuneet yritykset transientteihin / Redis:iin ja palauttaa 429.
-
Vaihda oletuskirjautumissivu (/wp-login.php) tai piilota se — tämä ei ole foolproof, mutta vähentää automaattista skannauksesta tulleita yrityksiä.
-
Käyttäjähallinta ja todennus
-
Ota käyttöön kaksivaiheinen tunnistautuminen (2FA). On kevyitä ratkaisuja, jotka eivät ole valtavan raskaita. 2FA pysäyttää jopa onnistuneet tunnusten arvaukset.
-
Pakota vahvat salasanat, käytä password manager -käytäntöä.
-
Poista oletusadmin-käyttäjä ja varmista, ettei kukaan käytä tunnusta “admin”.
-
Lokitus, hälytys ja reagointi
-
Seuraa lokitiedostoja:
tail -f /var/log/nginx/access.log | grep wp-login.php
— huomaat hyökkäysruuhkat nopeasti. -
Aseta yksinkertainen skripti joka laskee epäonnistuneiden yritysten määrän ja lähettää sähköposti-/Slack-hälytyksen kun raja ylittyy.
-
Jos hyökkäys havaitaan: estä IP:t välittömästi (fail2ban tai iptables), aktivoi Cloudflare “Under Attack” mode ja vaihda admin-salasanat.
-
Testaus ja harjoitus — valmistaudu ennakolta
-
Harjoittele palautusprosessia: ota backup, yritä restore staging-ympäristössä.
-
Simuloi brute force -tilanne testi-IP-osoitteilla (ei tuotantoon ulkopuolisilta IP:iltä) ja varmista, että blokit + hälytykset toimivat.
-
Helppo WP-CLI -apu ylläpitäjälle
-
Listaa käyttäjät ja tarkasta epäilyttävät tilit:
wp user list --fields=ID,user_login,user_email,roles,registered
-
Nollaa salasana tai jätä kertakirjautumiseen:
wp user update 23 --user_pass=UusiVahvaSalasana123!
-
Poista automaattisesti epäilyttävät tilit tarvittaessa.
-
Estä muut hyödyntämiset — kovennettu WordPress-asetus
-
Aseta
DISALLOW_FILE_EDIT
wp-configiin:define('DISALLOW_FILE_EDIT', true);
Tämä estää teemojen ja lisäosien muokkauksen adminin kautta. -
Poista REST API:n avoimia endpointteja, jos et käytä niitä (piilota
/wp-json
tai rajoita käyttäjäkohtaisesti).
-
Pitkäaikaiset toimenpiteet ja seuranta
-
Pidä varmuuskopiointi automaattinen (päivittäinen tai tiheämpi kaupallisille sivustoille).
-
Ota käyttöön säännöllinen auditointi: skannaa tiedostot ja tietokanta (työkaluilla tai omalla skriptillä).
-
Dokumentoi toimenpiteet: kuka reagoi hyökkäykseen, mitä tehdään, miten käy palautus.
Yhteenveto checklist muotoon (toimi heti):
-
Ota käyttöön Cloudflare tai vastaava (WAF, rate limiting).
-
Estä XML-RPC jos ei tarvita.
-
Rajoita wp-login.php: rate limit tai basic auth edessä.
-
Asenna Fail2Ban ja määritä wp-login jail.
-
Pakota vahvat salasanat ja ota 2FA käyttöön.
-
Seuraa lokit ja aseta hälytykset.
-
Varaudu palautukseen: automaattinen varmuuskopiointi testattuna.
-
Poista REST API -endpointeista tarpeettomat tai rajoita ne.
-
Vaihda admin-tunnukset ja poista oletustilit.
-
Dokumentoi ja harjoittele reagointiprosessi.
Lisävinkki: vaikuttava mutta kevyt temppu on laittaa wp-admin/wp-login. php:n taakse Basic Auth — hyökkääjä näkee HTTP 401 ennen kuin WordPress edes saa pyynnön. Tämä on usein tehokkaampaa kuin raskaan plug-inin asentaminen.