tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

WordPressin suojaus: Nginx ja Fail2ban

Sisällys

WordPress on erittäin suosittu tapa toteuttaa websivustoja. Suosio takaa myös sen, että WordPress on jokaisen pahantahtoisen botin kohteena, kun etsitään aukkopaikkoja. Tilannetta ei yhtään helpota sekään, että WordPress-asennukset ovat usein useista lisäosista rakennettuja palapelejä tai korttitaloja, jotka ovat juuri niin vahvoja kuin rakennelman heikoin osa on. Siksi ylimääräiset ja käyttämättömät pluginit ja teemat pitäisi aina muistaa poistaa. Jos niiden jokin PHP-koodi vuotaa, niin se vuotaa vaikka teemaa tai lisäosaa ei olisikaan aktivoitu. Aivan yhtä tärkeää on muistaa hoitaa päivitykset ja kääntäen: jos päivityksiä ei tule edes sen vertaa, että voimassaoleva WordPressin versio kuitataan, niin kannattaa etsiä korvaava.

Suoria ja tunnettuja hyökkäyksiä vastaan voi suojautua. Ne eivät yleensä saa mitään aikaiseksi, koska aukot on jo aikoja sitten paikattu, mutta ne kuormittavat turhaan. Lisäksi vastaan voi tulla uusia aukkoja, joita päästään hyödyntämään vanhojen tuttujen kautta. Siksi esimerkiksi XMLRPC olisi estettävä, jos sitä ei ehdottomasti tarvitse johonkin – suurin osa ei tarvitse.

Jos käytässä on Nginx ja Fail2ban, niin ekstrasuojaa saa kohtuullisen helpollakin.

Nginx

Avaa Nginxin conf:

nano /etc/nginx/nginx.conf

Lisää uusi logi html blokkiin:

log_format blocked '$time_local: Blocked request from $remote_addr $request';

Tallenna ja poistu.

Avaa virtual hostin conf-tiedosto:

nano /etc/nginx/sites-available/example.com.conf

Lisää server lohkoon tämä:

Käynnistä Nginx uudelleen:

systemctl restart nginx

Fail2ban

Avaa jail.local:

nano /etc/fail2ban/jail.local

Lisää sinne tämä, voit muokata bantimen ja findtimen itsellesi sopivammaksi:


[nginx-blocked]
enabled = true
port = 80,443
filter = nginx-blocked
logpath = /var/log/nginx/blocked.log
bantime = 3600
maxretry = 3
backend = auto
findtime = 86400
banaction = iptables-multiport
protocol = tcp
chain = INPUT

Tehdään uusi suodatin:

nano /etc/fail2ban/filter.d/nginx-blocked.conf

Lisää sinne tämä:


[Definition]
failregex = ^.* Blocked request from <HOST>.*$
ignoreregex =

Lataa Fail2ban uudelleen:

fail2ban-client reload

Jos ei toimi, niin tarkasta, että filterin regex ja login merkinnät sopivat toisiinsa.