Varnish: Difference between revisions

From ICO wiki
Jump to navigationJump to search
m (Undo revision 88933 by Lliba (Talk) EI kujuta ette, miks koolonid terve lehe tuksi keerasid.)
(Viited)
Line 1: Line 1:
= Kaasajastab Lauri-Rihard Liba, 2015, A21 =
<!--
Järgnev siin kommentaaris pole otseselt oluline informatsioon, artiklit täiendanud isikute kohta informatsiooni saab lehe muudatuste ajaloost
= Kaasajastas Lauri-Rihard Liba, 2015, A21 =
= Koostajad =  
= Koostajad =  
<!--
 
  Vajab täiendamist. Lingi http://blog.rac.me.uk/2009/11/29/linux-handy-varnish-commands/ alusel.  
  Vajab täiendamist. Lingi http://blog.rac.me.uk/2009/11/29/linux-handy-varnish-commands/ alusel.  
  See link on kahjuks kõvasti aegunud ja puudub täielik info, mis Varnishi versiooni jaoks ja mis poolte nende käskluste taga silmas peeti.
  See link on kahjuks kõvasti aegunud ja puudub täielik info, mis Varnishi versiooni jaoks ja mis poolte nende käskluste taga silmas peeti.
Rene Sepp, Kersti Lang, Carolys Kallas
-->
-->
Rene Sepp, Kersti Lang, Carolys Kallas
'''Varnish''' kasutatakse veebilehekülgede kiirendamiseks. Teenus installeeritakse HTTP serveri ette ning tehakse vastavad muutused sisu puhverdamiseks.
= Sissejuhatus =
 
Varnish Cache kasutatakse veebilehekülgede kiirendamiseks. See installeeritakse HTTP serveri ette ning tehakse vastavad muutused sisu puhverdamiseks. Varnish Cache tavaliselt kiirendab andmete laadimist 300-1000 kordselt sõltuvalt veebilehe ülesehitusest. Varnish Cache hoiab veebilehti vahemälus kiirendades sellega javaskriptide ning piltide laadimist. Lisaks kasutatakse seda ka koormuse tasakaalustamiseks ning turvalisuse suurendamiseks.
Varnish tavaliselt kiirendab andmete laadimist 300-1000 kordselt sõltuvalt veebilehe ülesehitusest. Varnish Cache hoiab veebilehti vahemälus kiirendades sellega javaskriptide ning piltide laadimist. Lisaks kasutatakse seda ka koormuse tasakaalustamiseks ning turvalisuse suurendamiseks.<ref>[https://www.varnish-cache.org/about About Varnish]</ref>
= Ajalugu =
 
Projekti algatas Norra suurim tabloidformaadis ajaleht Verdens Gang. Arhitekt ja juhtiv arendaja on Taani konsultant Poul-Henning Kamp (tuntud kui FreeBSDcore arendaja). Haldus, infrastruktuuri - ja täiendavat arendust varustas algselt Norra Linux konsultatsioonifirma Linpro. Varnish Cache tugi, haldus ja arendus koondus hiljem eraldi haruks - Varnish Software.
==Ajalugu==
Varnishi versioon 1.0 avalikustati aastal 2006, Varnish 2.0 aastal 2008, Varnish 3.0 aastal 2011 ja Varnish 4.0 aastal 2014.
Projekti algatas Norra suurim tabloidformaadis ajaleht Verdens Gang<ref>[https://www.varnish-software.com/use-case/vg-norway VG (Norway)| Varnish Software]</ref>. Arhitekt ja juhtiv arendaja on Taani konsultant Poul-Henning Kamp (tuntud kui FreeBSDcore arendaja).<ref>[https://www.varnish-cache.org/trac/wiki/ArchitectNotes Notes from the Architect]</ref> Varnish Cache tugi, haldus ja arendus koondus hiljem eraldi haruks - Varnish Software<ref>[https://www.varnish-software.com/about-us About Us | Varnish Software]</ref>.
= Arhitektuur =
 
Varnishi versioon 1.0 avalikustati aastal 2006<ref>[https://www.varnish-cache.org/lists/pipermail/varnish-announce/2006-September/000638.html Varnish 1.0 released]</ref>, Varnish 2.0 aastal 2008<ref>[https://www.varnish-cache.org/lists/pipermail/varnish-announce/2008-October/000010.html Varnish 2.0 released]</ref>, Varnish 3.0 aastal 2011<ref>[https://www.varnish-cache.org/lists/pipermail/varnish-announce/2011-June/000670.html Varnish 3.0.0 released]</ref> ja Varnish 4.0 aastal 2014<ref>[https://www.varnish-cache.org/lists/pipermail/varnish-announce/2014-April/000696.html Varnish 4.0.0 released]</ref>.
 
==Arhitektuur==
Varnish Cache salvestab andmed virtuaalmällu ja jätab otsustada, mis salvestatakse mällu ja mida suunatakse ketta operatsioonisüsteemi. See aitab vältida olukorda, kus operatsioonisüsteem hakkab andmeid suunama vahemällu samal ajal kui nad paigutatakse rakenduse poolt kettale.
Varnish Cache salvestab andmed virtuaalmällu ja jätab otsustada, mis salvestatakse mällu ja mida suunatakse ketta operatsioonisüsteemi. See aitab vältida olukorda, kus operatsioonisüsteem hakkab andmeid suunama vahemällu samal ajal kui nad paigutatakse rakenduse poolt kettale.
Lisaks on Varnishi tugevalt "keermestatud", iga kliendi ühendust käsitletakse kui eraldi "keeret". Kui seadistatud aktiivsete "keerete" arv on täidetud, paigutatakse sisenevad ühendused ülevoolu järjekorda. Kui kui see järjekord jõuab teatud piirini, hakkab süsteem sissetulevaid ühendusi tagasi lükkama.
Lisaks on Varnishi tugevalt "keermestatud", iga kliendi ühendust käsitletakse kui eraldi "keeret". Kui seadistatud aktiivsete "keerete" arv on täidetud, paigutatakse sisenevad ühendused ülevoolu järjekorda. Kui kui see järjekord jõuab teatud piirini, hakkab süsteem sissetulevaid ühendusi tagasi lükkama.
Peamine seadistamise mehhanism on VCL (Varnishi Configuration Language).Enamus kasutajapoliitika otsuseid jäetakse VCL koodi, mis muudab Varnishi palju rohkem seadistatav ja kohanemisvõimelisemaks kui enamik teisi HTTP kiirendeid. Kui VLC script on laetud, tõlgitakse see "C" keelde, kompileeritakse, et jagada objektid süsteemi poolt kompilaatorisse ja seotakse otse kiirendiga.
 
Peamine seadistamise mehhanism on VCL (Varnishi Configuration Language). Enamus kasutajapoliitika otsuseid jäetakse VCL koodi, mis muudab Varnishi palju rohkem seadistatavaks ja kohanemisvõimelisemaks kui enamik teisi HTTP kiirendeid. Kui VLC skript on laetud, tõlgitakse see "C" keelde, kompileeritakse, et jagada objektid süsteemi poolt kompilaatorisse ja seotakse otse kiirendiga.
 
Arvu run-time parameetrid kontrollivad näiteks maksimaalset ja minimaalset aktiivsete keerete arvu, nende erinevaid süsteemipause jne. Käsurea juhtimise liides võimaldab neid parameetreid muuta, uusi VCL skripte kompileerida, laadida ja aktiveerida kiirendile taaskäivitust tegemata.
Arvu run-time parameetrid kontrollivad näiteks maksimaalset ja minimaalset aktiivsete keerete arvu, nende erinevaid süsteemipause jne. Käsurea juhtimise liides võimaldab neid parameetreid muuta, uusi VCL skripte kompileerida, laadida ja aktiveerida kiirendile taaskäivitust tegemata.
Selleks, et vähendada süsteemi päringute arvu kiirelt miinimumini, on logi-andmed salvestatud mällu ning logi-andmete filtreerimine, vorminine ning kirjutamine aktiivsele kettale kettale.
 
= Eeldused =
Selleks, et vähendada süsteemi päringute arvu kiirelt miinimumini, on logi-andmed salvestatud mällu ning logi-andmete filtreerimine, vorminine ning kirjutamine aktiivsele kettale kettale.<ref>[http://en.wikipedia.org/wiki/Varnish_%28software%29#Architecture Varnish(software) Wikipedia]</ref>
Antud installatsiooni lahendus on testitud Ubuntu 14.04.2 LTS peal, kuid võib toimida muudel Debianil baseeruvate distributsioonide peal. Muude distributsioonide peal paigaldamiseks tasub uurida arendaja [https://www.varnish-cache.org/releases kodulehekülge].
 
Eelduseks on töötav veebileht, näiteks [[Veebiserveri_labor|Apache]] vaikeleht või WordPressi leht. Kui seda tehtud pole, siis seda kirjeldab [[WordPress_turvamine|WordPress turvamise labor]].
==Varnishi paigaldamine turvalisuse suurendamiseks==
= Varnishi paigaldamine turvalisuse suurendamiseks =
<<!-- Warning style viksitud ArchWikist -->div style="padding: 5px; margin: 0.50em 0; background-color: #FFDDDD; border: thin solid #DDBBBB; overflow: hidden;">'''Hoiatus: '''Antud installatsiooni lahendus on testitud Ubuntu 14.04.2 LTS peal, kuid võib toimida muudel Debianil baseeruvate distributsioonide peal. Muude distributsioonide peal paigaldamiseks tasub uurida arendaja kodulehekülge<ref>[https://www.varnish-cache.org/releases Varnish Releases]</ref>.
Varnish peatab mittetäielikel http päringutel jõudmast Apache2 veebiserverini.
 
Põhineb [http://www.howtoforge.com/putting-varnish-in-front-of-apache-on-ubuntu-debian sellel] artiklil.
Eelduseks on töötav veebileht, näiteks [[Veebiserveri_labor|Apache]] vaikeleht või WordPressi leht. Kui seda tehtud pole, siis seda kirjeldab [[WordPress_turvamine|WordPress turvamise labor]].</div>
==Apache konfigureerimine==
Järgneva juhendi<ref>[http://www.howtoforge.com/putting-varnish-in-front-of-apache-on-ubuntu-debian Putting Varnish In Front Of Apache On Ubuntu/Debian]</ref> abil on võimalik sättida Varnish ülesse nii, et mitte-täielikud HTTP päringud püütakse kinni Varnishi teenuse poolt. Esialgne juhend on kohandatud uuema Varnishi versiooni ja Ubuntu väljalaske jaoks.
 
===Apache konfigureerimine===
Apache2 tuleb kuulama panna localhost, selleks on vaja <code>/etc/apache2/ports.conf</code> konfiguratsiooni failis vaja muuta vaikimisi kuulamis port 80 pealt 8080 peale.
Apache2 tuleb kuulama panna localhost, selleks on vaja <code>/etc/apache2/ports.conf</code> konfiguratsiooni failis vaja muuta vaikimisi kuulamis port 80 pealt 8080 peale.
<syntaxhighlight lang="apache">
<syntaxhighlight lang="apache">
Line 35: Line 47:
sed 's/:80/:8080/' 000-default.conf -i
sed 's/:80/:8080/' 000-default.conf -i
</syntaxhighlight>
</syntaxhighlight>
Paigaldame apachele lisamooduli, et kuvataks kliendi õige ip aadress.
Kuna hetkeseisuga on konfiguratsioon selline, et Varnish saab kirjeid Apachelt ja külastajate IP addressiks logitakse lokaalse masina IP.
Paigaldame Apachele lisamooduli, et kuvataks kliendi õige ip aadress:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
apt-get install libapache2-mod-rpaf
apt-get install libapache2-mod-rpaf
</syntaxhighlight>
</syntaxhighlight>
==Varnish Cache Paigaldus==
 
Õpetame apt utiliiti kasutama https teekondi
===Varnish Paigaldus===
Kuna Varnishi repositoorium<ref>[https://www.varnish-cache.org/installation/ubuntu Installation on Ubuntu]</ref> on turvalisel http kanalil siis on vaja laiendada apt utiliiti, et see oleks võimeline tõlgendama https:// aadresse, kui vastav laiendus pole paigaldatud siis saab selle Ubuntus installeerida järgnevalt:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
apt-get install apt-transport-https
apt-get install apt-transport-https
</syntaxhighlight>
</syntaxhighlight>
Lisame Varnish Cache repositooriumi krüptovõtme
Lisame Varnish Repositooriumi krüptovõtme, et apt oleks suuteline autentida repositooriumist alla laetavaid faile:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add -
curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add -
</syntaxhighlight>
</syntaxhighlight>
Lisame Varnish Cache repositooriumi Ubuntu 14.04 Trusty Tahr jaoks oma apt utiliidi allikate loendisse
Lisame Varnish Cache repositooriumi Ubuntu 14.04 Trusty Tahr jaoks oma apt utiliidi allikate loendisse:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list
echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list
</syntaxhighlight>
</syntaxhighlight>
Uuendame repositooriumi ja paigaldame Varnish Cache
Uuendame repositooriumi ja paigaldame Varnishi:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
apt-get update && apt-get install varnish
apt-get update && apt-get install varnish
</syntaxhighlight>
</syntaxhighlight>
==Varnishi konfiguratsiooni muutmine==
 
Muudame Varnishi konfiguratsiooni faili <code>/etc/default/varnish</code>, et Varnish kuulaks vaikimisi port 80 ja muudame reeglite faili asukohta.
===Varnishi konfiguratsiooni muutmine===
Muudame Varnishi konfiguratsiooni faili <code>/etc/default/varnish</code>, et Varnish kuulaks vaikimisi port 80 ja muudame VCL faili asukohta. Siin näites on kasutusele võetud <code>/etc/varnish/meieleht.vcl</code>:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
DAEMON_OPTS="-a :80 \
DAEMON_OPTS="-a :80 \
Line 65: Line 80:
             -s malloc,256m"
             -s malloc,256m"
</syntaxhighlight>
</syntaxhighlight>
Kopeerime vcl struktuuri vaikefailist <code>default.vcl</code> uude faili <code>meieleht.vcl</code>.
Kopeerime vcl struktuuri vaikefailist <code>default.vcl</code> uude faili <code>meieleht.vcl</code>:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
cp /etc/varnish/default.vcl /etc/varnish/meieleht.vcl
cp /etc/varnish/default.vcl /etc/varnish/meieleht.vcl
</syntaxhighlight>
</syntaxhighlight>
Täiendame faili <code>meieleht.vcl</code>.
Täiendame faili <code>meieleht.vcl</code>, et tõsta Apache turvalisust Varnishi abiga.
<<!-- Note style viksitud ArchWikist -->div style="padding: 5px; margin: 0.50em 0; background-color: #DDDDFF; border: thin solid #BBBBDD; overflow: hidden;">'''Märge: '''Esialgne juhend kasutas Varnish 2.1, mille süntaks erineb natukene Varnish 4.0.3 omast. <ref>[https://www.varnish-cache.org/docs/trunk/whats-new/upgrade-4.0.html Süntaksi muudatused versioon Varnish 4.0 versioonis]</ref></div>
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
sub vcl_recv {
sub vcl_recv {
Line 106: Line 122:
}
}
</syntaxhighlight>
</syntaxhighlight>
== Deemonite restart ==
 
Kõigepealt tuleb apache teenusele restart teha.
===Deemonite restart===
Kõigepealt tuleb taaskäivitada Apache teenus:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
service apache2 restart
service apache2 restart
</syntaxhighlight>
</syntaxhighlight>
Kontrollime IP porti.
Järgnevalt kontrollime, kas Apache kuulab meie poolt konfigureeritud pordi peal netstat utiliidiga:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
netstat -lp | grep apache2
netstat -lp | grep apache2
Line 119: Line 136:
tcp        0      0 localhost:8080          *:*                    LISTEN      4586/apache2
tcp        0      0 localhost:8080          *:*                    LISTEN      4586/apache2
</syntaxhighlight>
</syntaxhighlight>
Teeme restarti Varnishile
Taaskäivitame Varnishi teenuse:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
service varnish restart
service varnish restart
</syntaxhighlight>
</syntaxhighlight>
Kontrollime uuesti
Kontrollime, kas Varnishi teenus kuulab õigelt pordilt:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
netstat -lp | grep varnish
netstat -lp | grep varnish
Line 132: Line 149:
tcp6      0      0 [::]:www                [::]:*                  LISTEN      4498/varnishd
tcp6      0      0 [::]:www                [::]:*                  LISTEN      4498/varnishd
</syntaxhighlight>
</syntaxhighlight>
Nüüd on Varnish paigaldatud Apache2 ette ja sait peab nüüd töötama. Kui Apach2e peatada kuvatakse Varnish error lehekülg.
Varnish on ka võimeline ipv6 pealt kuulamisega.
= Logimine =
 
Nüüd on Varnish paigaldatud Apache2 ette ja sait peab nüüd töötama. Kui Apache2 peatada kuvatakse Varnish error lehekülg.
 
==Logimine==
Veebilehe külastamisi saab jälgida <code>/var/log/varnish/access.log</code> logi failist.
Veebilehe külastamisi saab jälgida <code>/var/log/varnish/access.log</code> logi failist.
== Apache logides serveri aadressi asemel kliendi aadress ==
===Detailsemate logide konfigureerimine===
===Varnishi pool===
<<!-- Warning style viksitud ArchWikist -->div style="padding: 5px; margin: 0.50em 0; background-color: #FFDDDD; border: thin solid #DDBBBB; overflow: hidden;">'''Hoiatus: '''Järgnev sektsioon on vabatahtlik. Kui oled siiani järginud juhendit siis on sul Apache2+Varnish konfigureeritud ja toimiv ning edasi pole vaja konfigureerida aine IT Infrastruktuuride raames.</div>
Vaikimisi kuvatakse Apache logides serveri aadressi asemel kliendi addres. Kuna kliendi asemel suhtleb Apache veebiserveriga Varnish, mis on lokaalse masina peal siis see tähendab, et logifailides kuvatakse iga kirje puhul serveri enda aadressi.
<ref>[http://willjackson.org/blog/configure-vanish-forward-client-ip-addresses-apache-logs Configure Varnish to forward client ip addresses in Apache logs]</ref>
<!--<ref>[http://webcache.googleusercontent.com/search?q=cache:eR2P_eWyRjoJ:theyusedtocallitablog.net/2011/07/configuring-varnish-and-apache-to-pass-the-original-client-ip-specifically-with-wordpress-comments-in-mind/+&cd=1&hl=en&ct=clnk&gl=ee&client=ubuntu Configuring varnish and apache to pass the original client ip]</ref>-->
 
====VCL faili reeglid====
Lisada oma Varnish konfiguratsiooni .vcl read:
Lisada oma Varnish konfiguratsiooni .vcl read:
Näiteks <code>/etc/varnish/meieleht.vcl</code>
Näiteks failis <code>/etc/varnish/meieleht.vcl</code>
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
sub vcl_recv {
sub vcl_recv {
     # Add a unique header containing the client address
     # Rename the incoming XFF header to work around a Varnish bug.
    unset req.http.X-Forwarded-For;
    if (req.http.X-Forwarded-For) {
     set   req.http.X-Forwarded-For = client.ip;
        # Append the client IP
     # [...]
        set req.http.X-Real-Forwarded-For = req.http.X-Forwarded-For ", " regsub(client.ip, ":.*", "");
        unset req.http.X-Forwarded-For;
     } else {
        # Simply use the client IP
        set req.http.X-Real-Forwarded-For = regsub(client.ip, ":.*", "");
     }
}
}
</syntaxhighlight>
</syntaxhighlight>
Taaskäivita Varnish teenus.
 
====Apache pool====
Konfigureerime Apachet uut logimis formaati kasutama jäsklusega, mis loob faili <code>varnish-log</code>.
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
service varnish restart
echo 'LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined' > /etc/apache2/conf.d/varnish-log
</syntaxhighlight>
</syntaxhighlight>
===Apache pool ===
 
Lisada vajalikud moodulid Apache jaoks
Samuti tuleb igal oma virtualhostil (nt. <code>000-default.conf</code>) juures muuta logifaili formaadis sõne <code>combined</code> järgnevaks sõneks <code>varnishcombined</code>, jällegi oleks kasulik rakendada <code>sed</code>i utiliiti.
Tuleb luua fail <code>/etc/apache2/conf.d/varnishlog.conf</code> järgneva sisuga:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="apache">
cd /etc/apache2/sites-available/
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined
sed 's/combined/varnishcombined/' 000-default.conf -i
</syntaxhighlight>
</syntaxhighlight>
Enda virtualhost konfiguratsioonis muutke log vorming varnishcombined-ks
 
<syntaxhighlight lang="apache">
Vahepealseks etapiks on teenuste taaskäivitamine:
<VirtualHost *:80>
<syntaxhighlight lang="teraterm">
  ServerName www.planet.zz
service apache2 restart && service varnish restart
  # [...]
  CustomLog ${APACHE_LOG_DIR}/access.log varnishcombined
  # [...]
</VirtualHost>
</syntaxhighlight>
</syntaxhighlight>
Ja siis tuleb Apache2 teenus taaskäivitada.
 
Siis tuleb virtualhostid välja ja sisse lülitada:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
service apache2 restart
a2dissite 000-default.conf n2ide.conf n2ide3.conf
a2ensite 000-default.conf n2ide.conf n2ide3.conf
</syntaxhighlight>
</syntaxhighlight>
===Tulemuse kontroll===
 
====Tulemuse kontroll====
Ühenda kliendiga veebiserveri külge ja vaata Apache2 <code>access.log</code> faili, mis ip logitakse.
Ühenda kliendiga veebiserveri külge ja vaata Apache2 <code>access.log</code> faili, mis ip logitakse.
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
tail /var/log/apache2/access.log
tail /var/log/apache2/access.log
</syntaxhighlight>
</syntaxhighlight>
= Security.VCL paigaldamine =
 
Security.vcl on Web Application tulemüür, mis on rakendatud vcl(Varnish Control Language) keeles.
==Security.VCL paigaldamine==
Sarnaneb [[mod_security]]le, aga on palju kiirem.
<<!-- Warning style viksitud ArchWikist -->div style="padding: 5px; margin: 0.50em 0; background-color: #FFDDDD; border: thin solid #DDBBBB; overflow: hidden;">'''Hoiatus: '''Järgnev sektsioon on vabatahtlik. Kui oled siiani järginud juhendit siis on sul Apache2+Varnish konfigureeritud ja toimiv ning edasi pole vaja konfigureerida aine IT Infrastruktuuride raames.</div>
Esimese sammuna tuleks paigaldada vajalikud utiliidid:
Security.vcl on Web Application tulemüür, mis on rakendatud vcl(Varnish Control Language) keeles.<ref>[https://github.com/comotion/security.vcl/blob/master/README Security.vcl README]</ref>
 
Oma funktsiooni poolest sarnaneb [[mod_security]]le, aga on rakendatud teist mood.
 
Esimese sammuna tuleks paigaldada vajalikud utiliidid kompileerimiseks:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
apt-get install git make
apt-get install git make
</syntaxhighlight>
</syntaxhighlight>
Siis tuleks kloonida [[git]]i repositooriumis olev algmaterjal:
Siis tuleks kloonida [[git]]i repositooriumis olev algmaterjal:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
git clone https://github.com/comotion/security.vcl.git
git clone https://github.com/comotion/security.vcl.git
</syntaxhighlight>
</syntaxhighlight>
Järgmiste sammudena on vaja repositooriumis olev rakendus paigaldada ja luua sümboolne link Varnishi konfiguratsiooni kausta:
Järgmiste sammudena on vaja repositooriumis olev rakendus paigaldada ja luua sümboolne link Varnishi konfiguratsiooni kausta:
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
Line 193: Line 230:
sudo ln -s $PWD/vcl/ /etc/varnish/security
sudo ln -s $PWD/vcl/ /etc/varnish/security
</syntaxhighlight>
</syntaxhighlight>
Lisa Varnishi .vcl conf faili järgnev rida <code>backend default</code> koodiploki alla:
Lisa Varnishi .vcl conf faili järgnev rida <code>backend default</code> koodiploki alla:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
include "/etc/varnish/security/main.vcl";
include "/etc/varnish/security/main.vcl";
</syntaxhighlight>
</syntaxhighlight>
Välja peaks nägema nii:
Välja peaks nägema nii:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Line 207: Line 246:


</syntaxhighlight>
</syntaxhighlight>
Taaskäivita Varnishi teenus.
Taaskäivita Varnishi teenus.
<syntaxhighlight lang="teraterm">
<syntaxhighlight lang="teraterm">
service varnish restart
service varnish restart
</syntaxhighlight>
</syntaxhighlight>
== Tulemuse kontroll ==
 
===Tulemuse kontroll===
Proovi nüüd minna enda veebiserveri külge aadressiga:
Proovi nüüd minna enda veebiserveri külge aadressiga:
:<code><nowiki>http://<sinu serveri ip>/javascript:</nowiki></code>
<pre><nowiki>http://<sinu serveri ip>/javascript:</nowiki></pre>
Kui kõik toimib tuleb vastuseks:
Kui kõik toimib tuleb vastuseks:
:<code>Error 403 Naughty, not nice!</code>
<pre>Error 403 Naughty, not nice!</pre>
<!--
 
Kahtlen selle sektsiooni vajalikkuses, pole otsest seost Varnishi paigaldusega kuna Varnish ühildub kõigi nende serveritega.
==Viited==
== Alternatiivid ==
<references />
G-WAN - http://gwan.com/
Nginx - http://nginx.org/
Heliod - http://heliod.sourceforge.net/
Nende jõudluse võrdlust on võimalik näha leheküljelt: http://www.virkki.com/jyri/articles/index.php/the-fastest-web-server-is/
-->
= Kasutatud materjal =
# [https://www.varnish-cache.org/about About Varnish]
# [https://www.varnish-cache.org/installation/ubuntu Varnishi paigaldus Ubuntus]
# [https://www.varnish-cache.org/docs/trunk/whats-new/upgrade-4.0.html Süntaksi muudatused versioon Varnish 4.0 versioonis]
# [http://www.howtoforge.com/putting-varnish-in-front-of-apache-on-ubuntu-debian Putting Varnish In Front Of Apache On Ubuntu/Debian]
# [http://theyusedtocallitablog.net/2011/07/configuring-varnish-and-apache-to-pass-the-original-client-ip-specifically-with-wordpress-comments-in-mind/ Configuring varnish and apache to pass the original client ip]
# [https://github.com/comotion/security.vcl/blob/master/README Security.vcl README]

Revision as of 18:10, 25 May 2015

Varnish kasutatakse veebilehekülgede kiirendamiseks. Teenus installeeritakse HTTP serveri ette ning tehakse vastavad muutused sisu puhverdamiseks.

Varnish tavaliselt kiirendab andmete laadimist 300-1000 kordselt sõltuvalt veebilehe ülesehitusest. Varnish Cache hoiab veebilehti vahemälus kiirendades sellega javaskriptide ning piltide laadimist. Lisaks kasutatakse seda ka koormuse tasakaalustamiseks ning turvalisuse suurendamiseks.[1]

Ajalugu

Projekti algatas Norra suurim tabloidformaadis ajaleht Verdens Gang[2]. Arhitekt ja juhtiv arendaja on Taani konsultant Poul-Henning Kamp (tuntud kui FreeBSDcore arendaja).[3] Varnish Cache tugi, haldus ja arendus koondus hiljem eraldi haruks - Varnish Software[4].

Varnishi versioon 1.0 avalikustati aastal 2006[5], Varnish 2.0 aastal 2008[6], Varnish 3.0 aastal 2011[7] ja Varnish 4.0 aastal 2014[8].

Arhitektuur

Varnish Cache salvestab andmed virtuaalmällu ja jätab otsustada, mis salvestatakse mällu ja mida suunatakse ketta operatsioonisüsteemi. See aitab vältida olukorda, kus operatsioonisüsteem hakkab andmeid suunama vahemällu samal ajal kui nad paigutatakse rakenduse poolt kettale.

Lisaks on Varnishi tugevalt "keermestatud", iga kliendi ühendust käsitletakse kui eraldi "keeret". Kui seadistatud aktiivsete "keerete" arv on täidetud, paigutatakse sisenevad ühendused ülevoolu järjekorda. Kui kui see järjekord jõuab teatud piirini, hakkab süsteem sissetulevaid ühendusi tagasi lükkama.

Peamine seadistamise mehhanism on VCL (Varnishi Configuration Language). Enamus kasutajapoliitika otsuseid jäetakse VCL koodi, mis muudab Varnishi palju rohkem seadistatavaks ja kohanemisvõimelisemaks kui enamik teisi HTTP kiirendeid. Kui VLC skript on laetud, tõlgitakse see "C" keelde, kompileeritakse, et jagada objektid süsteemi poolt kompilaatorisse ja seotakse otse kiirendiga.

Arvu run-time parameetrid kontrollivad näiteks maksimaalset ja minimaalset aktiivsete keerete arvu, nende erinevaid süsteemipause jne. Käsurea juhtimise liides võimaldab neid parameetreid muuta, uusi VCL skripte kompileerida, laadida ja aktiveerida kiirendile taaskäivitust tegemata.

Selleks, et vähendada süsteemi päringute arvu kiirelt miinimumini, on logi-andmed salvestatud mällu ning logi-andmete filtreerimine, vorminine ning kirjutamine aktiivsele kettale kettale.[9]

Varnishi paigaldamine turvalisuse suurendamiseks

Hoiatus: Antud installatsiooni lahendus on testitud Ubuntu 14.04.2 LTS peal, kuid võib toimida muudel Debianil baseeruvate distributsioonide peal. Muude distributsioonide peal paigaldamiseks tasub uurida arendaja kodulehekülge[10]. Eelduseks on töötav veebileht, näiteks Apache vaikeleht või WordPressi leht. Kui seda tehtud pole, siis seda kirjeldab WordPress turvamise labor.

Järgneva juhendi[11] abil on võimalik sättida Varnish ülesse nii, et mitte-täielikud HTTP päringud püütakse kinni Varnishi teenuse poolt. Esialgne juhend on kohandatud uuema Varnishi versiooni ja Ubuntu väljalaske jaoks.

Apache konfigureerimine

Apache2 tuleb kuulama panna localhost, selleks on vaja /etc/apache2/ports.conf konfiguratsiooni failis vaja muuta vaikimisi kuulamis port 80 pealt 8080 peale.

Listen 8080

Järgmisena tuleb muuta virtualhosti failis olev kuulatav port. Siin näites kasutame Apache2 vaikelehe konfiguratsiooni faili /etc/apache2/sites-available/000-default.conf. Kus tuleb muuta vaikimisi kuulatav port 80 meile vajalikuks port 8080 peale. Seda saab teha manuaalselt tekstiredaktoriga, kuid kui on vaja mitu faili muuta siis on mõtekas kasutusele võtta käsurea utiliit sed

cd /etc/apache2/sites-available
sed 's/:80/:8080/' 000-default.conf -i

Kuna hetkeseisuga on konfiguratsioon selline, et Varnish saab kirjeid Apachelt ja külastajate IP addressiks logitakse lokaalse masina IP. Paigaldame Apachele lisamooduli, et kuvataks kliendi õige ip aadress:

apt-get install libapache2-mod-rpaf

Varnish Paigaldus

Kuna Varnishi repositoorium[12] on turvalisel http kanalil siis on vaja laiendada apt utiliiti, et see oleks võimeline tõlgendama https:// aadresse, kui vastav laiendus pole paigaldatud siis saab selle Ubuntus installeerida järgnevalt:

apt-get install apt-transport-https

Lisame Varnish Repositooriumi krüptovõtme, et apt oleks suuteline autentida repositooriumist alla laetavaid faile:

curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add -

Lisame Varnish Cache repositooriumi Ubuntu 14.04 Trusty Tahr jaoks oma apt utiliidi allikate loendisse:

echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list

Uuendame repositooriumi ja paigaldame Varnishi:

apt-get update && apt-get install varnish

Varnishi konfiguratsiooni muutmine

Muudame Varnishi konfiguratsiooni faili /etc/default/varnish, et Varnish kuulaks vaikimisi port 80 ja muudame VCL faili asukohta. Siin näites on kasutusele võetud /etc/varnish/meieleht.vcl:

DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/meieleht.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

Kopeerime vcl struktuuri vaikefailist default.vcl uude faili meieleht.vcl:

cp /etc/varnish/default.vcl /etc/varnish/meieleht.vcl

Täiendame faili meieleht.vcl, et tõsta Apache turvalisust Varnishi abiga.

Märge: Esialgne juhend kasutas Varnish 2.1, mille süntaks erineb natukene Varnish 4.0.3 omast. [13]
sub vcl_recv {
    # Add a unique header containing the client address.
    unset req.http.X-Forwarded-For;
    set req.http.X-Forwarded-For = client.ip;
    # Added security, the "w00tw00t" attacks are pretty annoying so let's block
    # it before it reaches our webserver.
    if (req.url ~ "^/w00tw00t") {
        return (synth(403, "Not permitted"));
    }
}

sub vcl_backend_response {
    # Remove the X-Forwarded-For header if it exists.
    unset bereq.http.X-Forwarded-For;

    # Insert the client IP address as X-Forwarded-For.
    # This is the normal IP address of the user.
    set bereq.http.X-Forwarded-For = bereq.http.rlnclientipaddr;

    # Deliver the content
    return (deliver);
}

sub vcl_deliver {
    # We'll be hiding some headers added by Varnish. We want to make sure people
    # are not seeing that we are using Varnish.
    # Since we're not caching (yet), why bother telling people we are using it?
    unset resp.http.X-Varnish;
    unset resp.http.Via;
    unset 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.
    unset resp.http.X-Powered-By;
}

Deemonite restart

Kõigepealt tuleb taaskäivitada Apache teenus:

service apache2 restart

Järgnevalt kontrollime, kas Apache kuulab meie poolt konfigureeritud pordi peal netstat utiliidiga:

netstat -lp | grep apache2

Tulemus peab olema taoline:

tcp        0      0 localhost:8080          *:*                     LISTEN      4586/apache2

Taaskäivitame Varnishi teenuse:

service varnish restart

Kontrollime, kas Varnishi teenus kuulab õigelt pordilt:

netstat -lp | grep varnish

Tulemus peab olema taoline:

tcp        0      0 *:www                   *:*                     LISTEN      4498/varnishd
tcp6       0      0 [::]:www                [::]:*                  LISTEN      4498/varnishd

Varnish on ka võimeline ipv6 pealt kuulamisega.

Nüüd on Varnish paigaldatud Apache2 ette ja sait peab nüüd töötama. Kui Apache2 peatada kuvatakse Varnish error lehekülg.

Logimine

Veebilehe külastamisi saab jälgida /var/log/varnish/access.log logi failist.

Detailsemate logide konfigureerimine

Hoiatus: Järgnev sektsioon on vabatahtlik. Kui oled siiani järginud juhendit siis on sul Apache2+Varnish konfigureeritud ja toimiv ning edasi pole vaja konfigureerida aine IT Infrastruktuuride raames.

Vaikimisi kuvatakse Apache logides serveri aadressi asemel kliendi addres. Kuna kliendi asemel suhtleb Apache veebiserveriga Varnish, mis on lokaalse masina peal siis see tähendab, et logifailides kuvatakse iga kirje puhul serveri enda aadressi. [14]

VCL faili reeglid

Lisada oma Varnish konfiguratsiooni .vcl read: Näiteks failis /etc/varnish/meieleht.vcl

sub vcl_recv {
    # Rename the incoming XFF header to work around a Varnish bug.
    if (req.http.X-Forwarded-For) {
        # Append the client IP
        set req.http.X-Real-Forwarded-For = req.http.X-Forwarded-For ", " regsub(client.ip, ":.*", "");
        unset req.http.X-Forwarded-For;
    } else {
        # Simply use the client IP
        set req.http.X-Real-Forwarded-For = regsub(client.ip, ":.*", "");
    }
}

Apache pool

Konfigureerime Apachet uut logimis formaati kasutama jäsklusega, mis loob faili varnish-log.

echo 'LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined' > /etc/apache2/conf.d/varnish-log

Samuti tuleb igal oma virtualhostil (nt. 000-default.conf) juures muuta logifaili formaadis sõne combined järgnevaks sõneks varnishcombined, jällegi oleks kasulik rakendada sedi utiliiti.

cd /etc/apache2/sites-available/
sed 's/combined/varnishcombined/' 000-default.conf -i

Vahepealseks etapiks on teenuste taaskäivitamine:

service apache2 restart && service varnish restart

Siis tuleb virtualhostid välja ja sisse lülitada:

a2dissite 000-default.conf n2ide.conf n2ide3.conf
a2ensite 000-default.conf n2ide.conf n2ide3.conf

Tulemuse kontroll

Ühenda kliendiga veebiserveri külge ja vaata Apache2 access.log faili, mis ip logitakse.

tail /var/log/apache2/access.log

Security.VCL paigaldamine

Hoiatus: Järgnev sektsioon on vabatahtlik. Kui oled siiani järginud juhendit siis on sul Apache2+Varnish konfigureeritud ja toimiv ning edasi pole vaja konfigureerida aine IT Infrastruktuuride raames.

Security.vcl on Web Application tulemüür, mis on rakendatud vcl(Varnish Control Language) keeles.[15]

Oma funktsiooni poolest sarnaneb mod_securityle, aga on rakendatud teist mood.

Esimese sammuna tuleks paigaldada vajalikud utiliidid kompileerimiseks:

apt-get install git make

Siis tuleks kloonida giti repositooriumis olev algmaterjal:

git clone https://github.com/comotion/security.vcl.git

Järgmiste sammudena on vaja repositooriumis olev rakendus paigaldada ja luua sümboolne link Varnishi konfiguratsiooni kausta:

cd security.vcl/vcl/
sudo make
cd ..
sudo ln -s $PWD/vcl/ /etc/varnish/security

Lisa Varnishi .vcl conf faili järgnev rida backend default koodiploki alla:

include "/etc/varnish/security/main.vcl";

Välja peaks nägema nii:

backend default {
        .host = "127.0.0.1";
        .port = "8080";
}

include "/etc/varnish/security/main.vcl";

Taaskäivita Varnishi teenus.

service varnish restart

Tulemuse kontroll

Proovi nüüd minna enda veebiserveri külge aadressiga:

http://<sinu serveri ip>/javascript:

Kui kõik toimib tuleb vastuseks:

Error 403 Naughty, not nice!

Viited