Squid
Sisukord
Sissejuhatus
Üldiselt saab teenuste kasutamise puhul klient pöörduda kas otse teenust pakkuva serveri poole või kasutada vahendajat (ingl. k. proxy), mis pöördub teenuse poole kliendi eest. Kusjuures vahendaja võib kasutada omakorda mõne teise vahendaja abi. Vahendajate kasutamine on populaarne lisaks veebile (HTTP) veel näiteks eposti (SMTP) ja nimeteenuse (DNS) puhul.
Vahendaja kasutamisel ilmnevad sellised aspektid
- klient ei pea pääsema TCP/IP ühenduse mõttes otse teenust pakkuvale serverile juurde, mis võib osutuda oluliseks turvalisuse seisukohast
- vahendajal on võimalus vaheladustada (ingl. k. to cache) serverilt saadavaid vastuseid ja neid nö korduvkasutada kliendile vastust esitades, mis võib osutuda oluliseks jõudluse seisukohast
- teenust pakkuva serveri jaoks jääb klient anonüümseks
- vahendaja saab kontrollida, milliste teenust pakkuvate serveritega klient suhtleb
- klient saab oma tegevuse ära sooritada vaatamata teenust pakkuva serveri parasjagu töökorrasolekule, nt eposti puhul vahendaja võtab kliendilt kirja vastu ning saadab edasi siis kui teenust pakkuv server on valmis seda vastu võtma
Vahendamist saab teha mitmel tasemel, kui seda tehakse teenust pakkuva protokolli tasemel, siis nimetatakse selle tegevuse sooritajat rakendustaseme vahendajaks (ingl. k. application proxy).
Tarvkvara Squid on HTTP protokolli kasutavate teenuste rakendustaseme vahendaja, asudes loogiliselt brauseri ja veebiserveri vahel. Tavaliselt on Squid realiseeritud eraldi serverina ehk teenusena, mille kasutamine tuleb brauseris seadistada.
Üldiselt kasutatakse vahendamist, eriti just vahendamisega kaasnevat andmete vaheladustamise võimalust seoses HTTP teenustega ohtrasti, lisaks Squidile brauser sisemiselt vaheladustab andmeid ning samuti veebiserver oma töö käigus. Veel üldisemalt vaadeldes on vaheladustamine (ingl. k. cacheing) arvutustehnika puhul üks oluline jõudluse tõstmise instrument, nt protsessorite puhul kasutatakse samuti mitme tasemelist cache'i, kõvakettakontrollerite puhul ning osa operatsioonisüsteemi mälust, mis pole nö aktiivses kasutuses on suures osas kasutuses failisüsteemi cache'ina.
Paigaldamine
Tänapäeval esineb tarkvara Squid viimane stabiilne versioon 2.6.x reeglina operatsioonisüsteemi paketihaldusvahendite abil paigaldataval kujul. Nt Debian GNU/Linux 4.0 puhul toimub paigaldamine käsuga
bash# apt-get install squid
Paigaldamisel moodustatakse spetsiaalne süsteemi kasutaja ja grupp ning vaheladustatud andmete hoidmiseks nn cache_dir kataloog, Debiani puhul /var/spool/squid. Programmi seadistused on kirjas failis /etc/squid/squid.conf.
Veebivahendaja seadistamine
Squidi saab kasutada veebivahendajana mitmel pisut erineval moel. Käesolevas punktis esitame kuidas kasutada Squidi kõige tavapärasemas rollis, kus Squid
- töötab iseseisva teenusena aadressil 192.168.10.11:3128
- vahendab ja vaheladustab kliendi päringuid HTTP serveritele
- Squidi kasutamine on piiratud kliendi ip aadressi järgi, teenindatakse ainult localhosti ning 192.168.10.0/24 võrgus asuvaid kliente
Nii seadistatud Squidist võiks olla kasu kohtvõrku teenindava veebivajandajana, langeb välisliikuse maht ning kasutajad saavad vastused kätte kiiremini. Võit kiiruses tekib tänu sellele, et kui üks kohtvõrgu arvuti on mingit veebikohta külastanud, siis Squidi vahelaos küll ei salvestata ära nn .php faili, küll aga taustapildid, .css failid jms ning kui järgmine kohtvõrgu arvuti esitab päringu samale veebilehele, siis võiks ta saada kõik vastused peale .php faili juba kohalikust Squidist.
Selleks tarbeks sobib kasutada näiteks sellise sisuga squid.conf seadistusfaili
cache_dir ufs /var/spool/squid 384 16 256 http_port 192.168.10.11:3128 icp_port 0 acl all src 0.0.0.0/0.0.0.0 acl localhost src 127.0.0.1/255.255.255.255 acl kohtvork src 192.168.10.0/255.255.255.0 acl SSL_ports port 443 # https acl SSL_ports port 563 # snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl CONNECT method CONNECT http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow kohtvork http_access deny all access_log /var/log/squid/access.log squid emulate_httpd_log on useragent_log /var/log/squid/useragent.log referer_log /var/log/squid/referer.log acl QUERY urlpath_regex cgi-bin \? cache deny QUERY
Seadistusfailis kasutatud direktiivide selgitused
- cache_dir - näitab, millised kataloogis asuvad vaheladustatud andmed
- http_port - millisel soketil Squid teenust pakub
- icp_port - Squid ei tee teiste veebivahendajatega koostööd (ei kuula pordil 3130)
- acl (access control list) - omistab nimed erinevatele väärtustele
- cache, http_access - lubab ja keelab pärigute teenindamist
- *_log - logifailide asukohad ja omadused
Squidist päringute läbisaamist kontrollitakse peamiselt acl ja http_access direktiividega. http_access direktiivide esinemise järjekord on oluline, rakendub esimesena klappinud reegel.
Töötava programmi seadistusfailis tehtud muudatuste kehtestamiseks tuleb öelda
bash# /etc/init.d/squid reload
Veebivahendaja kasutamine
Veebivahendaja kasutamiseks on tarvis programm käivitada öeldes
bash# /etc/init.d/squid start
Selles, kuidas programm käivitus annab märku cache.log logifail. Squidi kasutamiseks tuleb brauseris näidata veebivahendaja asukoht, nt Firefoxi moodi programmis toimub see valides menüüst
Edit -> Preferences -> Advanced -> Network -> Settings
Pildil toodud juhtumil kasutab brauser kõigi http ja https aadresside poole pöördumiseks, mis ei asu 192.168.12.0/24 võrgus või ei sisalda domeeninimes looma.aed aadressil 192.168.10.11:3128 asuvat veebivahendajat. Veebivahendaja tööd saab jälgida access.log logifaili uurides
bash# tail -f /var/log/squid/access.log 1202047619.603 690 127.0.0.1 TCP_MISS/200 25900 GET http://kuutorvaja.eenet.ee/wiki/Squid - DIRECT/193.40.0.10 text/html 1202047619.962 181 127.0.0.1 TCP_MISS/200 18690 GET http://kuutorvaja.eenet.ee/mw-1.9.3/images/b/bd/Squid-1.gif - DIRECT/193.40.0.10 image/gif
Veebivahendaja kasutamine kiirendina
Kui tavaliselt asub Squid pigem lähemal brauserile kui veebiserverile, siis osutub, et üks oluline Squidi kasutusjuht näeb ette justnimelt veebivahendaja paigutamise vahetult veebiserveri ette. Kliendid pöörduvad 'enda meelest' veebiserveri poole, aga tegelikult teenindab neid vastavalt pordil Squid, mis vastab klientidele ise päringuid ja vajadusel vahendab päringuid enda taga töötavale veebiserverile. Squidi ülesandeks on sellisel juhul
- veebiserverilt koormuse vähendamine võttes reeglina enda peale staatiliste päringute teenindamise
- kontrollida veebiserverile jõudvaid päringuid, nt meetodite (POST, GET), lähte ip aadressid vms suhtes
- mitme Squidi kasutamisel saaks korralada iseenesest ka koormusjaotusega tegeleva lülituse, kui konkreetsel juhul peaks see pudelikaela leevendama
- üks Squid asub mitme veebiserveri ees
Niisugust asjakorraldust nimetatakse kiirendavas rezhiimis töötavaks veebivahendajaks (ingl. k. httpd-accelerator või reverse proxy).
Eeldades, et veebiserver töötab aadressil 192.168.10.15:80 võiks sellist Squidi seadistusfaili kasutades pakkuda veebilist teenust aadressil 192.168.10.11:80
cache_dir ufs /var/spool/squid-http 384 16 256 http_port 192.168.10.11:80 defaultsite=www.loomaaed.tartu.ee vhost icp_port 0 cache_peer 192.168.10.15 parent 80 0 no-query originserver name=loomaaed login=PASS acl sites_loomaaed dstdomain www.loomaaed.tartu.ee cache_peer_access loomaaed allow sites_loomaaed acl all src 0.0.0.0/0.0.0.0 acl localhost src 127.0.0.1/255.255.255.255 acl Safe_ports port 80 # http http_access deny !Safe_ports http_access allow all access_log /var/log/squid/access.log squid emulate_httpd_log on useragent_log /var/log/squid/useragent.log referer_log /var/log/squid/referer.log
cache_peer parameetri taga kasutatud 'login=PASS' tõttu töötab brauseri jaoks veebiserveri basic_auth autentimine kui veebiserver peaks seda kasutama.
Veebivahendaja kasutamine vanema ja naabriga
Siin on veel selline moment, et mitu squid serverit võivad teha omavahel koostööd.
Üks võimalus on see, et määrata oma squidile parent (vanem) - siis on nii, et päringud, mis ei sisaldu enda kohalikus andmebaasis, saadetakse parent squidile (see asub tavaliselt teises - suuremas, paremas masinas) ning too vaatab kust saab.
Teine võimalus on määrata oma squidile sibling (naaber) - siis on nii, et naabrid peavad efektiivselt ühte suurt andmebaasi mitme peale. Ja kui päring esitatakse ning kohalik squid ei leia oma andmebaasist vastust, siis kõigepealt külastab ta naabreid ja seejärel parent'i.
Ainus konf fail, millega saab ja on vaja tegeleda, on squid.conf, minul on ta selline:
root@masin# egrep ^[^#] squid.conf
http_port 3128 icp_port 3130 cache_peer cache.tartu.eenet.ee parent 3128 3130 no-query cache_peer_domain cache.tartu.eenet.ee !.ee acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_mem 8 MB acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl sub1 src 192.168.1.0/255.255.255.0 acl sub2 src 192.168.2.0/255.255.255.0 acl kopka src 193.40.xxx.xxx/255.255.255.255 http_access allow manager localhost http_access allow manager kopka http_access allow sub1 http_access allow sub2 http_access allow kopka icp_access allow sub1 icp_access allow sub2 icp_access allow kopka
Lühidalt kokkuvõttes realiseerib see konfiguratsioon järgmist:
- kuulatakse porte 3128 ja 3130 - vanemaks on cache.tartu.eenet.ee vastavate portidega, kusjuures mitte saata ICP (???) päringuid talle - küsida kõike peale .ee domainide - acl access list: määrab masinad ja alamvõrgud, kes meie squidi kasutada saavad ja annab neile õigused - samuti selle, kust monitoringut teha saab
Piirangud
acl abil saab defineerida faile, kuhu saab kirjutada näiteks sõnu, mille esinemisel veebis veeb blokeeritakse. Näiteks
acl porn url_regex "/usr/local/etc/squid/porn.block.txt" acl notporn url_regex "/usr/local/etc/squid/porn.unblock.txt" acl badlang url_regex "/usr/local/etc/squid/badlang.block.txt"
ja siis vastavalt
http_access allow notporn all http_access deny porn all http_access deny badlang all
Failidesse võib kirjutada järgnevalt
.t100.com .mp3 .mpeg morpheus napster .mpg
Nagu näha, keelata saab nii domeene, faililaiendeid, kui ka üksikuid tekstilõike sisaldavaid lehti.
Juhul kui on soov kasutada squidi vaid veebi piiramiseks ja mitte cacheda faile kettale võib seadistusfaili kirjutada cache_dir null /tmp
Monitooring
Kaval on panna tööle ka kaasapandud cgi script squidi töö jälgimiseks (nt. selleks, et jälgida kuidas nn. hitte tuleb - see on protsent läbi squidi esitatud päringutest, mida ta oma kohalikust andmebaasist rahuldada sai). See eeldab, et samas masinas on apache või mõni muu sarnane webserver installeeritud.
Squidi kasutaja autentimine
Kui soovida Squidi kasutajamist piirata Squidi kasutajanime ja parooli omavate kasutajatega, tuleb lisada seadistusfaili (NB! süntaks on viimasel ajal muutunud, toodud näide kehtib uuemate 2.6.x versioonide puhul)
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/ncsa.passwd acl kasutajad proxy_auth REQUIRED auth_param basic children 5 auth_param basic realm Tartu loomaaed auth_param basic credentialsttl 1 week ... http_access allow kasutajad
Kusjuures paroolifaili sisu moodustatakse traditsioonilise nn basic_auth paroolifaili tekitamise programmiga htpasswd. Squidi access.log failis salvestatakse iga päringu juures päringu teinud kasutaja kasutajanimi.