WordPress turvamine

From ICO wiki
Jump to navigationJump to search

!NB Kõik õpetused on tehtud kasutades Ubuntu Server 11.04

WordPressi paigaldamine

Varnishi lisamine wordpressile

SuperCache kasutamine

DoS rünnaku tõrjumine mod_evasive mooduliga

Wordpressi paigaldus ja konfigureerimine

Antud toimingud tuleks teha root õigustes.

Mine root-iks:

sudo -i


Tee update kohalike pakettide cache

aptitude update


Tee upgrade pakettidele:

aptitude full-upgrade

Paigalda acpid daemon

aptitude install acpid


Installi apache2 veebi server,mysql andmebaasi server, openssh server, php5 skriptimis keel ning apache2-utils(Apache benchmark tool)

aptitude install apache2 mysql-server ssh php5 php5-mysql apache2-utils


Tõmba alla kõige hilisem .tar fail wordpress.org-ist:

wget http://wordpress.org/latest.tar.gz


Paki lahti wordpressi failid /var/www kausta:

sudo tar zxvf latest.tar.gz --directory=/var/www/


Logi mysql-i sisse:

mysql -u root -p

Loo andmebaas student_wordpress:

 create database student_wordpress;

Loo kasutaja student:

 create user student;

Anna kõik õigused student kasutajale:

 GRANT ALL PRIVILEGES ON student_wordpress.* TO student@localhost IDENTIFIED BY ‘student’;

Välju mysql-ist:

 quit;

Loo uus default veebi saidil põhinev veebi sait:

cp /etc/apache2/sites-available/default /etc/apache2/sites-available/wp


Muuda ära DocumentRoot /etc/apache2/sites-avalible/wp failis:

nano /etc/apache2/sites-avalible/wp

Lisa DocumentRoot /var/www rea lõppu DocumentRoot /var/www/wordpress

DocumentRoot /var/www/wordpress



Keela ära tavaline default veebi sait(seda ei ole vaja antud paigalduses):

a2dissite default


Luba wordpress-i veebisait

a2ensite wp

Tee apache-ile restart

service apache2 restart

Muuda wordpress konfiguratsiooni faili:

nano /var/www/wordpress/wp-config-sample.php

Muuda DB_NAME, DB_USER, DB_PASSWORD vastavalt näitele:

define('DB_NAME', 'student_wordpress');

/** MySQL database username */
define('DB_USER', 'student');

/** MySQL database password */
define('DB_PASSWORD', 'student');

Kopeeri uus konfiguratsiooni fail wordpressi konfiguratsiooni failiks:

cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php


Tee apache2 service-ile reload

service  apache2 reload

Mine wordpressi saidile kasutades host-i IP aadressi(antud näites:192.168.56.102);

http://192.168.56.102


Vali saidi nimi, kasutajanimi, salasõna ning meili aadress.

Vali install

Installi lõppedes tee kindlaks,et kõik toimib(log sisse, vaata wp verisooni ilmselt midagi sellist: You are using WordPress 3.2.1.)

mod_evasive paigaldus ja konfigureerimine

Sissejuhatus

Mod_evasive on lisamoodul Apache'i veebiserveri jaoks, mille abil on võimalik vähendada või täielikult tõrjuda HTTP DoS, DDos või brute force rünnakute mõju. Ühtlasi saab seda kasutada ka monitooringu teostamiseks, kuna moodulit on lihtne panna suhtlema erinevate tulemüüride ja ruuteritega.

Monitooring baseerub dünaamilisel IP aadressitest ja URI-dest koosneval räsitabelil, kust siis keelatakse IP aadressid, mis:

  • küsivad ühte lehte rohkem kui paar korda sekundis
  • teevad rohkem kui 50 üheaegset requesti sama laps-protsessi vastu
  • üritavad teha ükskõik millist requesti samal ajal kui nad on mustas nimekirjas

Paigaldus

Paigaldamine Ubuntu 11.04 serverile on küllaltki lihtne

apt-get install libapache2-mod-evasive

Konfigureerimine

Kõigepealt on viisakas luua koht, kuhu antud moodul oma logi saaks salvestada

mkdir /var/log/apache2/mod_evasive
chown www-data:www-data /var/log/apache2/mod_evasive

NB! Logimine praegu ei tööta

Mod_evasive moodulil ei lubata antud kausta kirjutada

Couldn't open logfile /var/log/apache2/mod_evasive/dos-192.168.6.13: Permission denied

Nüüd jääb üle lisada vastavad read oma virtuaalsesse hosti (N:~/apache2/sites-enabled/wordpress lõppu)

<ifmodule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSLogDir /var/log/apache2/mod_evasive
DOSEmailNotify root@localhost
DOSWhitelist 127.0.0.1
</ifmodule>

Antud väärtusi tuleks kohandada vastavalt vajadustele

Parameetrite kirjeldused:

  • DOSHashTableSize: Räsitabeli suurus, kus IP aadresseid hoitakse.
  • DOSPageCount: Lehekülgede arv DOSPageInterval sekundis.
  • DOSPageInterval: Aeg sekundites, mida kasutab DOSPageCount.
  • DOSSiteCount: Objektide arv DOSSiteInterval sekundites.
  • DOSSiteInterval: Aeg sekundites, mida kasutab DOSSiteCount.
  • DOSBlockingPeriod: Aeg sekundites, kui kaua IP on bannitud. Kui IP üritab serverile selle aja see ligi pääseda, siis algab loendus ueusti nullist.
  • DOSLogDir: Valikuline. Kataloogitee, kuhu logi salvestatakse. Kui pole määratud kasutatakse /tmp.
  • DOSEmailNotify: Valikuline. Mail kuhu teated saadetakse.
  • DOSSystemCommand: Valikuline. Käsk mis käivitatakse, kui IP bannitakse. Näiteks:
    • DOSSystemCommand "/sbin/iptables -I INPUT -p tcp --dport 80 -s %s -j DROP"
  • DOSWhitelist: Valikuline. Nimekiri IP aadressitest, mida ei blokita.


Kui konfigureerimine valmis, tuleb Apache serverlie teha restart

/etc/init.d/apache2 restart
VÕI
service apache2 restart

Autor

Meelis Tamm, A31

Source: [1]

Varnish Cache-i paigaldamine ja konfigureerimine

Sissejuhatus

Varnish Cache - see on HTTP kiirendaja, ta on vaja, et maksimaalselt suurendada veebilehekülje kiirendust. Varnish Cache salvestab mälus veebilehekülg nii, et veebiserverid ei pea koguda sama lehekülg uuesti ja veel kord uuesti.

Paigaldamine

Kui te soovite installida Varnishit, siis on vaja teha uuendusi. Selle käsu abil uuendame opsüsteemi:

sudo apt-get update

Paigaldamise käsk:

sudo apt-get install varnish

Konfiguratsiooni muutmine

Esimene, mis me teeme, default pordi muutmine. Tuleb muuta faili /etc/default/varnish:

nano /etc/default/varnish

Konfigureerimine Varnichi jaoks kirjutatakse VCL keeles.

Fail konfiguratsioonidega vaikselt asub siin /etc/varnish/default.vcl Fail oleneb mitmest osadest, aga mis on vaja töötamise alguseks - see on backendi viitamine:

Backend - see on server, kuhu varnish saadab päringut, kui tal ei ole vastavad andmeid cache-is.

Kopeerige fail /etc/varnish/default.vcl ja andke teine nimetus

cp /etc/varnish/default.vcl /etc/varnish/itkool.vcl

Ava fail /etc/varnish/itkool.vcl ja sisesta

nano /etc/varnish/itkool.vcl
## Redirect requests to Apache, running on port 8000 on localhost
backend apache {
        .host = "127.0.0.1";
        .port = "8000";
}
## Fetch
sub vcl_fetch {
		## Remove the X-Forwarded-For header if it exists.
        remove req.http.X-Forwarded-For;
		
		## insert the client IP address as X-Forwarded-For. This is the normal IP address of the user.
        set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;
		## Added security, the "w00tw00t" attacks are pretty annoying so lets block it before it reaches our webserver
        if (req.url ~ "^/w00tw00t") {
                error 403 "Not permitted";
        }
		## Deliver the content
        return(deliver);
}

## Deliver
sub vcl_deliver {
		## We'll be hiding some headers added by Varnish. We want to make sure people are not seeing we're using Varnish.
              ## Since we're not caching (yet), why bother telling people we use it?
        remove resp.http.X-Varnish;
        remove resp.http.Via;
        remove resp.http.Age;
		
		## We'd like to hide the X-Powered-By headers. Nobody has to know we can run PHP and have version xyz of it.
        remove resp.http.X-Powered-By;
}

Salvesta fail CTRL + O käsuga

Apache konfiguratsiooni muutmine

Ava fail /etc/apache2/ports.conf ja leia

nano /etc/apache2/ports.conf
NameVirtualHost *:80
Listen 192.168.6.101:80

Muuda

NameVirtualHost *:8000
Listen 192.168.6.101:8000

Ava fail /etc/apache2/sites-available/wp ja leia

 <VirtualHost *:80>
        ServerAdmin webmaster@localhost

Muuda

VirtualHost *:8000>
        ServerAdmin webmaster@localhost


Praegu paigaldame lisa Apache moodul selle jaoks, et veenduda kas kasutaja IP aadress lõpeb korrektselt. Praegu Varnish on põhimõtteliselt seotud apache2. Kuna Lakk on põhimõtteliselt rääkides apache2, sa võib näidata aadressil 127.0.0.1 nagu külastaja IP.

nano apt-get install libapache2-mod-rpaf

RPAF (Reverse Proxy Add Forward) moodul holitseb selle eest, et localhosti IP vahetatakse ära IP-ga, mis on seadistatud X-Forwarded-For failis.

Deemonide restart

Restart Apache server:

/etc/init.d/apache2 restart

Kontrolli kas on olemas IP portid:

netstat -lp | grep apache2

Kui te näete, siis kõik on korras

tcp        0      0 *:https                 *:*                     LISTEN      843/apache2     
tcp        0      0 192.168.6.101:8000      *:*                     LISTEN      843/apache2     

Kui ei näita niimodi, siis on viga. Praegu teeme Varnishile restardi, et kuulata teema pordis 80

/etc/init.d/varnish restart 

Kontrolli

netstat -lp | grep varnish
tcp        0      0 *:www                   *:*                     LISTEN      781/varnishd    
tcp        0      0 localhost:6082          *:*                     LISTEN      779/varnishd   
tcp6       0      0 [::]:www                [::]:*                  LISTEN      781/varnishd

Praegu Varnish on sättinud Apache-is. Külasta saiti ja vaata, kas toimib. Kui sa tõmbad Apache maha, siis näed lehel Varnishi errorit.

Super Cache

Selle osa koostamine on veel töös.

Super Cache-i paigaldamiseks tuleb sisse logida admin-paneeli. Siis vasakult nimekirjast valida Plugins-i alt Add new.





Siis kirjutada otsingusse "WP Super Cache".



Pärast seda valida nimekirjast Super Cache ning vajutada "Install now".














Pärast seda "Activate the Plugin".





Super Cache -i toimimiseks on vajalik valida Custom structure Permalink-i seadete alt ning sisestada sinna /index.php/?p=%post_id%

Edasi vali vasakult Settings-u alt WP Super Cache.

Lisaks tuleb muuta .htaccess faili sisu mis peaks välja nägema selline:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

kuna wordpress tahab htaccess faili ka ise muuta aegajalt siis on hea panna htaccessi õigused 777 peale käsuga:

chmod 777 .htaccess

Pärast konfimist tuleks kindlasti .htaccess õigused vähemaks võtta kuna konstantselt ei pea õigused 777 peal olema, need tarvilikud vaid konfi ajaks.

Jõudluse võrdlus SuperCache-iga ja ilma

Supercache-iga
Benchmarking www.itkool.ee (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests


Server Software:        Apache/2.2.17
Server Hostname:        www.itkool.ee
Server Port:            80
Document Path:          /
Document Length:        9554 bytes
Concurrency Level:      200
Time taken for tests:   1.457 seconds
Complete requests:      200
Failed requests:        0
Write errors:           0
Total transferred:      1971800 bytes
HTML transferred:       1910800 bytes
Requests per second:    137.30 [#/sec] (mean)
Time per request:       1456.617 [ms] (mean)
Time per request:       7.283 [ms] (mean, across all concurrent requests)
Transfer rate:          1321.96 [Kbytes/sec] received
Connection Times (ms)
             min  mean[+/-sd] median   max
Connect:        7   10   2.1     10      14
Processing:    55  798 409.6    821    1441
Waiting:        8  751 410.1    770    1437
Total:         68  808 407.6    831    1447
Percentage of the requests served within a certain time (ms)
 50%    831
 66%   1036
 75%   1159
 80%   1236
 90%   1366
 95%   1434
 98%   1445
 99%   1446
100%   1447 (longest request)

ilma:

Benchmarking www.itkool.ee (be patient) Completed 100 requests Completed 200 requests Finished 200 requests


Server Software: Apache/2.2.17 Server Hostname: www.itkool.ee Server Port: 80

Document Path: / Document Length: 9413 bytes

Concurrency Level: 20 Time taken for tests: 25.600 seconds Complete requests: 200 Failed requests: 172

  (Connect: 0, Receive: 0, Length: 172, Exceptions: 0)

Write errors: 0 Total transferred: 1932771 bytes HTML transferred: 1882571 bytes Requests per second: 7.81 [#/sec] (mean) Time per request: 2560.029 [ms] (mean) Time per request: 128.001 [ms] (mean, across all concurrent requests) Transfer rate: 73.73 [Kbytes/sec] received

Connection Times (ms)

             min  mean[+/-sd] median   max

Connect: 0 1 1.4 0 5 Processing: 803 2522 572.9 2485 4346 Waiting: 648 2126 526.2 2053 4000 Total: 807 2523 572.5 2485 4346

Percentage of the requests served within a certain time (ms)

 50%   2485
 66%   2557
 75%   2690
 80%   2740
 90%   3120
 95%   3624
 98%   4261
 99%   4272
100%   4346 (longest request)

Iptables

protsessis...

Teie iptables.conf fail peab välja nägema nii nagu näidatud allpool:

-A INPUT -s 192.168.6.101/32 -p tcp -m tcp --dport 8000 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -s 192.168.6.1/32 -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7
-A INPUT -p tcp -m tcp --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -s 192.168.6.101/32 -j ACCEPT 
-A INPUT -m state --state ESTABLISHED -j ACCEPT 
-A INPUT -s 192.168.6.200/32 -p tcp -m tcp --dport 53 -j ACCEPT 
-A INPUT -s 192.168.6.200/32 -p udp -m udp --dport 53 -j ACCEPT 
-A INPUT -s 192.168.6.200/32 -p tcp -m tcp --dport 443 -j ACCEPT 
-A OUTPUT -o lo -j ACCEPT 
COMMIT

Räägime täpsemalt milleks need reeglid vaja on.

1. Endaoma IP'd 2. Connection limit (seletada/ seda arvu tuleb muuta suuremaks, näiteks suures ettevõttes kliendid kes istuvad NAT'i taga, ei saa liigi leheküljele, sest conn limit ühest IP on piiratud 10-ga)

Kui tahame varnish'it kasutada, tuleb lubada porti 8000:

iptables -A INPUT -s 192.168.6.101/32 -p tcp -m tcp --dport 8000 -j ACCEPT

Lubame weebiserveri:

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

SSH lubamiseks sellest IP-st:

iptables -A INPUT -s 192.168.6.1/32 -p tcp -m tcp --dport 22 -j ACCEPT

See rida annab võimalust katkestada ühendusi mille arv on üle 10 pordis 80:

iptables -A INPUT -p tcp -m tcp --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT --reject-with icmp-port-unreachable

Praegu meil ei salvestatakse logi failid. Kui tahame näha täpsemalt millised paketid vistakse minema, peame lubama logimist:

iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7
iptables -A INPUT -s 192.168.6.101/32 -j ACCEPT

Väljaminevate ühenduste jaoks tagasi tulnud pakette lubamiseks:

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

Nimeserveri lubamiseks peame avama nii tcp kui ka udp pordid:

iptables -A INPUT -s 192.168.6.200/32 -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A INPUT -s 192.168.6.200/32 -p udp -m udp --dport 53 -j ACCEPT

SSL'i jaoks:

iptables -A INPUT -s 192.168.6.200/32 -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT 

Teised turvameetodid

On olemas mitmeid erinevaid võimalusi, kuidas veel saab oma wordpressi veebilehe turvata.

Späm filter

Akismet või Automattic Kismet on spämmi filter. Antud teenus püüab filtreerida spämmi mis tuleb blogi kommentaaridest ja TrackPack pingidest. Filter kombineerib informatsiooni mis ta kogus kõikidest blogidest ja kasutab need spämmi reegleid, et blokeerida tuleviku spämmi. Akismet on toodud Automattic firma poolt, ettevõtte mis keskendub vaba-tarkvara arenemisel WordPressi platformi jaoks. Akismet tuli välja aastal 25. oktroobris aastal 2005 ja seisuga Aprilliga aastal 2011 juba püüdis üle 25 miljardi spämmi kommentaare ja pinge.

Akisment on sisseehitatud WordPressil aga vaikimisel on ta välja lülitatud, kuna selle sisse lülitamine nõuab võtit audentimist. Blogi administratoor peab ise antud teenust akteeverima. Selleks, et aktiveerida Akismeti, on vaja:

1) Administraatoori kontrool paneelis on vaja minna Plugins - Installed

2) Linnuke Akismeti peale ja vali "Activate"

3) Nüüd peab sisestama Akismetii API võtme. Võtme saab tasuta tellida akismeti ametliku veebilehest.

4) Vajuta "Update options"

5) Akismet spämmi filter on sisselülitatud.

Nüüd on vaja mõned postituse reegleid konfigureerida. Selleks on vaja minna Settings - Discussion menüüsse all ja välja lülitada

Nüüd ei pea administraator isiklikult iga komentaari läbi vaatama ja kinnitama. Antud töö hakkab tegelema Akismet.

Anti-bot lahendus

On olemas mitmeid erinevaid võimalusi kuidas saab kindlaks teha, et kasutaja, kes postitab on inimene. Selle jaoks on igasuguseid captcha meetodeid, näiteks kasutaja peab sisestama juhuslikult kombineeritud teksti või lahendama mingeid lihtsaid matemaatilisi võrrandeid. Antud meetodid ei ole eriti "sõbralikud", sest vahel tekivad probleemid kasutajatele, eriti nendele, kes ei suuda korralikult näha märke.

Palju sõbralikum ja lihtsam anti-bot meetod on lahendus, kus kasutaja peab märkima linnukese kommentaari alla. Selle jaoks wordpressil on plugin X. Plugini installeerimiseks on vaja:

1) Mine oma wordpress plugin kataloogisse

cd /var/www/wp-content/plugins/

2) Käsuga wget allalaadime plugini

wget http://downloads.wordpress.org/plugin/growmap-anti-spambot-plugin.1.1.zip

3) Pakime lahti antud arhiivi

unzip growmap-anti-spambot-plugin.1.1.zip

Nüüd tuleb minna tagasi oma wordpress administratoori menüüsse ja aktiveerida see plugin.

IP kontroll

Tihti on vaja turvata väga vajalikke faile. Selle jaoks on vaja:

1) Mine oma wordpress kataloogi

cd /var/www/wordpress

2) Teeme .htaccess faile. Antud teksti-fail wordpress kasutab oma reeglite jaoks.

touch .htaccess

3) Kirjuta järgmised reegleid:


http://wptidbits.com/tutorials/21-most-popular-htaccess-hacks-for-wordpress/