Erinevus lehekülje "Squid" redaktsioonide vahel

Allikas: Kuutõrvaja
(Veebivahendaja kasutamine)
(Veebivahendaja seadistamine)
32. rida: 32. rida:
 
* vahendab ja vaheladustab kliendi päringuid HTTP serveritele
 
* 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
 
* 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.
  
 
Selleks tarbeks sobib kasutada näiteks sellise sisuga squid.conf seadistusfaili
 
Selleks tarbeks sobib kasutada näiteks sellise sisuga squid.conf seadistusfaili

Redaktsioon: 3. veebruar 2008, kell 17:16

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.

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

Squid-1.gif

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 kiirendajana

...... Probleem, mida järgnev jutt lahendada püüab, seisneb selles, et kas ei saaks kuidagi asja optimiseerida, kui terve klassitäis arvuteid korraga (ja tunni aja pärast jälle) püüab külastada ühte ja sama kodulehekülge (nt. www.postimees.ee'd).

Klassikaliselt on arvutiklass ühe serveri taha ära maskeeritud ja igasse arvutisse tuuakse info eemalt internetist (antud juhul www.postimees.ee'st) eraldi kohale. Alltoodud joonis kujutab kolme võrgukaardiga serverit, millel töötab programm squid. On näha kahte alamvõrku (192.168.1.0, 192.168.2.0), millel istuvad nn. klientarvutid.

Programmi squid roll seisneb selles, et kogu infovahetus välismaailmast klientide poole toimub läbi tema. Squid kuulab pealt klientide poolt sooritatavaid päringuid (nt. www.postimees.ee) ja lisaks sellele, et ta toob netist ära vastava materjali ning annab need üle päringu esitanud klendile, talletab ta tolle materjali teatud ajaks (mõned päevad) oma andmebaasi (selle maht on ca 100 MB). Ja kui nüüd paari minuti või tunni pärast esitab keegi sama päringu (st. soovib netist alla laadida www.postimees.ee pealehte), siis squid ei lähe sellele enam netti järele, vaid võtab materjali oma kohalikust andmebaasist ning annab kliendile.

Selline mehhanism toimib ja praktiliselt iga kolmas-neljas päring saab vastatud kasutades kohalikku materjali. See efekt on juba märgatav.

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.

Ülalesitatud jutus kasutasin ilmestamiseks konkreetseid arve (minutid, päevad, 100 MB). Nende arvude valik, parent ja naabri valik, võib osutuda keeruliseks ja teiste administraatoritega koostööd eeldavaks ettevõtmiseks.

Allpool on toodud ära sammud, mida kasutasin squidi installeerimisel, konfigureerimisel, käivitamisel ja seismajätmisel.

Veebivahendaja kasutamine vanemaga

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.