Varnish: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Lliba (talk | contribs)
m infra aine jaoks viki artikli enda alla haaramine
Lliba (talk | contribs)
Süntaksi esiletõstmine koodilõikudes. Tõlkisin varasema VCL süntaksit ümber, et sama õpetust saaks edasi rakendada. Kõige uuema Varnishi paigaldus kõige uuemale LTS ubuntu väljalaskele.
Line 1: Line 1:
= Kaasajastab Lauri-Rihard Liba, 2015, A21 =
= Kaasajastab 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.
-->
Rene Sepp, Kersti Lang, Carolys Kallas
Rene Sepp, Kersti Lang, Carolys Kallas
Kevad 2012
Viimati muudetud: 14.05.2012
= Sissejuhatus =
= Sissejuhatus =
Varnishit kasutatakse veebilehekülgede kiirendamiseks. See installeeritakse HTTP serveri ette ning tehakse vastavad muutused sisu cachimiseks. Varnish cache tavaliselt kiirendab andmete laadimiset 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 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.
 
= Ajalugu =
= 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. Varnishi tugi, haldus ja arendus koondus hiljem eraldi haruks - Varnish Software.
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.
 
Varnishi versioon 1.0 avalikustati aastal 2006, Varnish 2.0 aastal 2008, Varnish 3.0 aastal 2011 ja Varnish 4.0 aastal 2014.
2006. aastal avaldati Varnishi versioon 1.0. Varnish 2.0 avaldati 2008 ning Varnish 3.0 2011 aastal.
 
= Arhitektuur =
= Arhitektuur =
Varnishi 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 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.
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.
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 =
= Eeldused =
Antud lahendus on testitud Ubuntu Server 10.10 peal, kuid võib töötada ka teiste Ubuntu versioonidega ning muude Linuxi distributsioonidega.
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]].
Eelduseks on töötav veebileht, näiteks wordpressi leht. Kui seda tehtud pole, siis seda kirjeldab  
WordPress turvamise labor. https://wiki.itcollege.ee/index.php/WordPress_turvamine
 
= Varnishi paigaldamine turvalisuse suurendamiseks =
= Varnishi paigaldamine turvalisuse suurendamiseks =
Varnish peatab mittetäielikel http päringutel jõudmast Apache veebiserverini.  
Varnish peatab mittetäielikel http päringutel jõudmast Apache2 veebiserverini.  
Põhineb "Putting Varnish In Front Of Apache On Ubuntu/Debian" artiklil, mis asub siin http://www.howtoforge.com/putting-varnish-in-front-of-apache-on-ubuntu-debian  
Põhineb [http://www.howtoforge.com/putting-varnish-in-front-of-apache-on-ubuntu-debian sellel] artiklil.
==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.
<syntaxhighlight lang="apache">
Listen 8080
</syntaxhighlight>
Järgmisena tuleb muuta virtualhosti failis olev kuulatav port.
Siin näites kasutame Apache2 vaikelehe konfiguratsiooni faili <code>/etc/apache2/sites-available/000-default.conf</code>.
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]]
<syntaxhighlight lang="teraterm">
cd /etc/apache2/sites-available
sed 's/:80/:8080/' 000-default.conf -i
</syntaxhighlight>
Paigaldame apachele lisamooduli, et kuvataks kliendi õige ip aadress.
<syntaxhighlight lang="teraterm">
apt-get install libapache2-mod-rpaf
</syntaxhighlight>
==Varnish Cache Paigaldus==
Õpetame apt utiliiti kasutama https teekondi
<syntaxhighlight lang="teraterm">
apt-get install apt-transport-https
</syntaxhighlight>
Lisame Varnish Cache repositooriumi krüptovõtme
<syntaxhighlight lang="teraterm">
curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add -
</syntaxhighlight>
Lisame Varnish Cache repositooriumi Ubuntu 14.04 Trusty Tahr jaoks oma apt utiliidi allikate loendisse
<syntaxhighlight lang="teraterm">
echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list
</syntaxhighlight>
Uuendame repositooriumi ja paigaldame Varnish Cache
<syntaxhighlight lang="teraterm">
apt-get update && apt-get install varnish
</syntaxhighlight>
==Varnishi konfiguratsiooni muutmine==
Muudame Varnishi konfiguratsiooni faili <code>/etc/default/varnish</code>, et Varnish kuulaks vaikimisi port 80 ja muudame reeglite faili asukohta.
<syntaxhighlight lang="c">
DAEMON_OPTS="-a :80 \
            -T localhost:6082 \
            -f /etc/varnish/meieleht.vcl \
            -S /etc/varnish/secret \
            -s malloc,256m"
</syntaxhighlight>
Kopeerime vcl struktuuri vaikefailist <code>default.vcl</code> uude faili <code>meieleht.vcl</code>.
<syntaxhighlight lang="teraterm">
cp /etc/varnish/default.vcl /etc/varnish/meieleht.vcl
</syntaxhighlight>
Täiendame faili <code>meieleht.vcl</code>.
<syntaxhighlight lang="c">
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"));
    }
}


==Kontrollime kas on installitud kõige uuem varnishi versioon.==
sub vcl_backend_response {
<pre>sudo apt-get install curl
    # Remove the X-Forwarded-For header if it exists.
sudo curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
    unset bereq.http.X-Forwarded-For;
sudo echo "deb http://repo.varnish-cache.org/debian/ $(lsb_release -s -c) varnish-2.1" >> /etc/apt/sources.list </pre>


==Apache konfiguratsiooni muutmine==
    # Insert the client IP address as X-Forwarded-For.
Muudame varnishi konfiguratsiooni faili, et varnish kuulaks defaultina port 80.
    # This is the normal IP address of the user.
<pre>nano /etc/default/varnish</pre>
    set bereq.http.X-Forwarded-For = bereq.http.rlnclientipaddr;
Muuda "DAEMON_OPTS="-a *:6081 \" selliseks
<pre>DAEMON_OPTS="-a *:80 \</pre>
ctrl-O ja muudame nime millekski muuks, nt mysite.vcl


Kopeerime /etc/varnish/default.vcl
    # Deliver the content
<pre>cp /etc/varnish/default.vcl /etc/varnish/mysite.vcl</pre>
    return (deliver);
 
Täiendame /etc/varnish/mysite.vcl faili.
<pre>
## 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 {
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.
    # We'll be hiding some headers added by Varnish. We want to make sure people
              ## Since we're not caching (yet), why bother telling people we use it?
    # are not seeing that we are using Varnish.
        remove resp.http.X-Varnish;
    # Since we're not caching (yet), why bother telling people we are using it?
        remove resp.http.Via;
    unset resp.http.X-Varnish;
        remove resp.http.Age;
    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.
    # We'd like to hide the X-Powered-By headers. Nobody has to know we can run
        remove resp.http.X-Powered-By;
    # PHP and have version XYZ of it.
    unset resp.http.X-Powered-By;
}
}
</pre>
</syntaxhighlight>
 
==Varnishi konfiguratsiooni muutmine==
Apache2 tuleb kuulama panna localhosti.
<pre>nano /etc/apache2/ports.conf</pre>
Muuda
<pre>
NameVirtualHost *:80
Listen 80
</pre>
 
selliseks
<pre>
NameVirtualHost *:8000
Listen 192.168.56.101:8000
</pre>
 
192.168.56.101 asemel kasuta oma IP.
 
Paigaldame apachele lisamooduli, et kuvataks kliendi õige ip aadress.
<pre>apt-get install libapache2-mod-rpaf</pre>
 
== Deemonite restart ==
== Deemonite restart ==
Kõigepealt tuleb apachele restart teha
Kõigepealt tuleb apache teenusele restart teha.
<pre>/etc/init.d/apache2 restart</pre>
<syntaxhighlight lang="teraterm">
 
service apache2 restart
Kontrollime IP porti
</syntaxhighlight>
<pre>netstat -lp | grep apache2 </pre>
Kontrollime IP porti.
 
<syntaxhighlight lang="teraterm">
netstat -lp | grep apache2
</syntaxhighlight>
Tulemus peab olema taoline:
Tulemus peab olema taoline:
<pre>
<syntaxhighlight lang="teraterm">
tcp        0      0 localhost:8000         *:*                    LISTEN      4586/apache2  
tcp        0      0 localhost:8080         *:*                    LISTEN      4586/apache2
</pre>
</syntaxhighlight>
 
Teeme restarti Varnishile
Teeme restarti Varnishile
<pre>/etc/init.d/varnish restart </pre>
<syntaxhighlight lang="teraterm">
 
service varnish restart
</syntaxhighlight>
Kontrollime uuesti
Kontrollime uuesti
<pre>netstat -lp | grep varnish </pre>
<syntaxhighlight lang="teraterm">
 
netstat -lp | grep varnish
</syntaxhighlight>
Tulemus peab olema taoline:
Tulemus peab olema taoline:
<pre>
<syntaxhighlight lang="teraterm">
tcp        0      0 *:www                  *:*                    LISTEN      4498/varnishd
tcp        0      0 *:www                  *:*                    LISTEN      4498/varnishd
tcp6      0      0 [::]:www                [::]:*                  LISTEN      4498/varnishd  
tcp6      0      0 [::]:www                [::]:*                  LISTEN      4498/varnishd
</pre>
</syntaxhighlight>
 
Nüüd on Varnish paigaldatud Apache2 ette ja sait peab nüüd töötama. Kui Apach2e peatada kuvatakse Varnish error lehekülg.
Nüüd on varnish paigaldatud apache2 ette. (Wordpress) sait peab nüüd töötama. Kui apache peatada kuvatakse varnish error lehekülg.
 
= Logimine =
= Logimine =
== Access.log ==
Veebilehe külastamisi saab jälgida <code>/var/log/varnish/access.log</code> logi failist.
Veebilehe külastamisi saab jälgida access.logist:
== Apache logides serveri aadressi asemel kliendi aadress ==
<pre>nano /var/log/varnish/access.log</pre>
===Varnishi pool===
 
Lisada oma Varnish konfiguratsiooni .vcl read:
= Juhend, et Apache logides näidataks kliendi IP aadressi, mitte Varnishi serveri enda =
Näiteks <code>/etc/varnish/meieleht.vcl</code>
==Varnishi pool==
<syntaxhighlight lang="c">
 
Lisada oma varnish konfiguratsiooni .vcl read:
 
Näiteks /etc/varnish/default.vcl
<pre>
sub vcl_recv {
sub vcl_recv {
  # Add a unique header containing the client address
    # Add a unique header containing the client address
  remove req.http.X-Forwarded-For;
    unset req.http.X-Forwarded-For;
  set    req.http.X-Forwarded-For = client.ip;
    set    req.http.X-Forwarded-For = client.ip;
  # [...]
    # [...]
}
}
</pre>
</syntaxhighlight>
 
Taaskäivita Varnish teenus.
 
<syntaxhighlight lang="teraterm">
Taaskäivita Varnish
 
<pre>
service varnish restart
service varnish restart
</pre>
</syntaxhighlight>
 
===Apache pool ===  
==Apache pool ==  
Lisada vajalikud moodulid Apache jaoks
Lisada vajalikud moodulid Apache jaoks
 
Tuleb luua fail <code>/etc/apache2/conf.d/varnishlog.conf</code> järgneva sisuga:
Tuleb lisada fail /etc/apache2/conf.d/varnishlog.conf
<syntaxhighlight lang="apache">
<pre>
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined
</pre>
</syntaxhighlight>
 
Enda virtualhost konfiguratsioonis muutke log vorming varnishcombined-ks
Enda virtualhost konfiguratsioonis muutke log vorming varnishcombined-ks
<pre>
<syntaxhighlight lang="apache">
<VirtualHost *:80>
<VirtualHost *:80>
   ServerName www.planet.zz
   ServerName www.planet.zz
Line 178: Line 165:
   # [...]
   # [...]
</VirtualHost>
</VirtualHost>
</pre>
</syntaxhighlight>
 
Ja siis tuleb Apache2 teenus taaskäivitada.
Apachele restart
<syntaxhighlight lang="teraterm">
<pre>service apache2 restart</pre>
service apache2 restart
 
</syntaxhighlight>
==Tulemuse kontroll==
===Tulemuse kontroll===
Ühenda kliendiga veebiserveri külge ja vaata apache access.log faili, mis ip logitakse
Ühenda kliendiga veebiserveri külge ja vaata Apache2 <code>access.log</code> faili, mis ip logitakse.
<pre>less /var/log/apache2/access.log</pre>
<syntaxhighlight lang="teraterm">
 
tail /var/log/apache2/access.log
= Juhend, Security.VCL paigaldamine =
</syntaxhighlight>
Security.vcl on Web Application tulemüür, mis on rakendatud vcl(Varnish Control Language) keeles
= Security.VCL paigaldamine =
 
Security.vcl on Web Application tulemüür, mis on rakendatud vcl(Varnish Control Language) keeles.
Sarnaneb mod_security-le, aga on palju kiirem.
Sarnaneb [[mod_security]]le, aga on palju kiirem.
 
Esimese sammuna tuleks paigaldada vajalikud utiliidid:
https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project#tab=Home
<syntaxhighlight lang="teraterm">
 
apt-get install git make
<pre>wget https://github.com/comotion/security.vcl/tarball/master -O - | tar xz</pre>
</syntaxhighlight>
<pre> apt-get install make</pre>
Siis tuleks kloonida [[git]]i repositooriumis olev algmaterjal:
<pre>cd comotion-security.vcl-616f269/vcl/
<syntaxhighlight lang="teraterm">
git clone https://github.com/comotion/security.vcl.git
</syntaxhighlight>
Järgmiste sammudena on vaja repositooriumis olev rakendus paigaldada ja luua sümboolne link Varnishi konfiguratsiooni kausta:
<syntaxhighlight lang="teraterm">
cd security.vcl/vcl/
sudo make
sudo make
cd ..
cd ..
sudo ln -s $PWD/vcl/ /etc/varnish/security</pre>
sudo ln -s $PWD/vcl/ /etc/varnish/security
Lisa Varnishi .vcl conf faili järgnev rida Backend Apache ridade alla
</syntaxhighlight>
<pre> include "/etc/varnish/security/main.vcl";</pre>
Lisa Varnishi .vcl conf faili järgnev rida <code>backend default</code> koodiploki alla:
Välja peaks nägema nii
<syntaxhighlight lang="c">
<pre> backend apache {
include "/etc/varnish/security/main.vcl";
         .host = "<sinu serveri ip>";
</syntaxhighlight>
Välja peaks nägema nii:
<syntaxhighlight lang="c">
backend default {
         .host = "127.0.0.1";
         .port = "8080";
         .port = "8080";
}
}
include "/etc/varnish/security/main.vcl";
include "/etc/varnish/security/main.vcl";
</pre>
<pre>service varnish restart
</pre>


</syntaxhighlight>
Taaskäivita Varnishi teenus.
<syntaxhighlight lang="teraterm>
service varnish restart
</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>http://<sinu serveri ip>/javascript:</pre>
 
Kui kõik toimib tuleb vastuseks:
Kui kõik toimib tuleb vastuseks:
<pre>Error 403 Naughty, not nice!</pre>
:<code>Error 403 Naughty, not nice!</code>
 
<!--
Kahtlen selle sektsiooni vajalikkuses, pole otsest seost Varnishi paigaldusega kuna Varnish ühildub kõigi nende serveritega.
== Alternatiivid ==
== Alternatiivid ==
G-WAN - http://gwan.com/
G-WAN - http://gwan.com/
Nginx - http://nginx.org/
Nginx - http://nginx.org/
Heliod - http://heliod.sourceforge.net/
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/
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 =
== Kasutatud materjal ==
# [https://www.varnish-cache.org/about About Varnish]
1. About Varnish - https://www.varnish-cache.org/about
# [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]
2. Putting Varnish In Front Of Apache On Ubuntu/Debian - http://www.howtoforge.com/putting-varnish-in-front-of-apache-on-ubuntu-debian
# [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]
3. Configuring varnish and apache to pass the original client ip http://theyusedtocallitablog.net/2011/07/configuring-varnish-and-apache-to-pass-the-original-client-ip-specifically-with-wordpress-comments-in-mind/
# [https://github.com/comotion/security.vcl/blob/master/README Security.vcl README]
 
4. https://github.com/comotion/security.vcl/blob/master/README

Revision as of 18:06, 24 May 2015

Kaasajastab Lauri-Rihard Liba, 2015, A21

Koostajad

Rene Sepp, Kersti Lang, Carolys Kallas

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.

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. Varnishi versioon 1.0 avalikustati aastal 2006, Varnish 2.0 aastal 2008, Varnish 3.0 aastal 2011 ja Varnish 4.0 aastal 2014.

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 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. 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

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. Eelduseks on töötav veebileht, näiteks Apache vaikeleht või WordPressi leht. Kui seda tehtud pole, siis seda kirjeldab WordPress turvamise labor.

Varnishi paigaldamine turvalisuse suurendamiseks

Varnish peatab mittetäielikel http päringutel jõudmast Apache2 veebiserverini. Põhineb sellel artiklil.

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

Paigaldame apachele lisamooduli, et kuvataks kliendi õige ip aadress.

apt-get install libapache2-mod-rpaf

Varnish Cache Paigaldus

Õpetame apt utiliiti kasutama https teekondi

apt-get install apt-transport-https

Lisame Varnish Cache repositooriumi krüptovõtme

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 Varnish Cache

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 reeglite faili asukohta.

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.

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 apache teenusele restart teha.

service apache2 restart

Kontrollime IP porti.

netstat -lp | grep apache2

Tulemus peab olema taoline:

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

Teeme restarti Varnishile

service varnish restart

Kontrollime uuesti

netstat -lp | grep varnish

Tulemus peab olema taoline:

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

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

Logimine

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

Apache logides serveri aadressi asemel kliendi aadress

Varnishi pool

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

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;
    # [...]
}

Taaskäivita Varnish teenus.

service varnish restart

Apache pool

Lisada vajalikud moodulid Apache jaoks Tuleb luua fail /etc/apache2/conf.d/varnishlog.conf järgneva sisuga:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined

Enda virtualhost konfiguratsioonis muutke log vorming varnishcombined-ks

<VirtualHost *:80>
  ServerName www.planet.zz
  # [...]
  CustomLog ${APACHE_LOG_DIR}/access.log varnishcombined
  # [...]
</VirtualHost>

Ja siis tuleb Apache2 teenus taaskäivitada.

service apache2 restart

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

Security.vcl on Web Application tulemüür, mis on rakendatud vcl(Varnish Control Language) keeles. Sarnaneb mod_securityle, aga on palju kiirem. Esimese sammuna tuleks paigaldada vajalikud utiliidid:

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!

Kasutatud materjal

  1. About Varnish
  2. Varnishi paigaldus Ubuntus
  3. Süntaksi muudatused versioon Varnish 4.0 versioonis
  4. Putting Varnish In Front Of Apache On Ubuntu/Debian
  5. Configuring varnish and apache to pass the original client ip
  6. Security.vcl README