Konfiguriranje Squid proxy servera s ograničenim pristupom i postavljanje klijenata da koriste proxy - dio 5


Linux Foundation Certified Engineer je vješt profesionalac koji ima stručnost za instaliranje, upravljanje i rješavanje problema mrežnih usluga u Linux sistemima, te je zadužen za dizajn, implementaciju i tekuće održavanje sistema- široka arhitektura.

Predstavljamo program sertifikacije Linux Foundation.

U 1. dijelu ove serije, pokazali smo kako instalirati squid, proxy keš server za web klijente. Molimo pogledajte taj post (link dat ispod) prije nego nastavite ako još niste instalirali squid na svoj sistem.

  1. Dio 1 – Instaliranje mrežnih usluga i konfiguriranje automatskog pokretanja pri pokretanju

U ovom članku ćemo vam pokazati kako da konfigurišete Squid proxy server da biste odobrili ili ograničili pristup Internetu i kako da konfigurišete http klijent ili veb pretraživač da koristi taj proxy server.

Moje okruženje za testiranje

Squid Server
Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
Klijentska mašina 1
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
Klijentska mašina 2
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

Podsjetimo da je, jednostavnim riječima, web proxy server posrednik između jednog (ili više) klijentskih računala i određenog mrežnog resursa, a najčešći je pristup Internetu. Drugim riječima, proxy server je s jedne strane povezan direktno na Internet (ili na ruter koji je povezan na Internet), a sa druge strane na mrežu klijentskih računara koji će preko njega pristupati World Wide Webu.

Možda se pitate, zašto bih želeo da dodam još jedan softver u svoju mrežnu infrastrukturu?

Evo tri glavna razloga:

1. Squid pohranjuje datoteke iz prethodnih zahtjeva kako bi ubrzao buduće prijenose. Na primjer, pretpostavimo da client1 preuzima CentOS-7.0-1406-x86_64-DVD.iso sa Interneta. Kada client2 zatraži pristup istoj datoteci, squid može prenijeti datoteku iz svoje keš memorije umjesto da je ponovo preuzima sa Interneta. Kao što možete pretpostaviti, ovu funkciju možete koristiti da ubrzate prijenos podataka u mreži računala koja zahtijevaju česta ažuriranja neke vrste.

2. ACL-ovi (Liste kontrole pristupa) nam omogućavaju da ograničimo pristup web stranicama i/ili nadgledamo pristup po korisniku. Možete ograničiti pristup na osnovu dana u sedmici ili doba dana, ili domene, na primjer.

3. Zaobilaženje web filtera je omogućeno korištenjem web proxyja na koji se upućuju zahtjevi i koji vraća traženi sadržaj klijentu, umjesto da ga klijent traži direktno na Internet.

Na primjer, pretpostavimo da ste prijavljeni na client1 i želite pristupiti www.facebook.com putem rutera vaše kompanije. Budući da je stranica možda blokirana pravilima vaše kompanije, umjesto toga možete se povezati na web proxy server i zatražiti pristup www.facebook.com. Udaljeni sadržaj vam se zatim ponovo vraća preko web proxy servera, zaobilazeći politike blokiranja rutera vaše kompanije.

Konfiguriranje Squid-a – osnove

Šema kontrole pristupa web proxy servera Squid sastoji se od dvije različite komponente:

  1. ACL elementi su linije direktive koje počinju riječju “acl” i predstavljaju tipove testova koji se izvode protiv bilo koje transakcije zahtjeva.
  2. Pravila liste pristupa se sastoje od akcije dopusti ili zabrani praćene brojnim elementima ACL-a i koriste se da naznače koja akcija ili ograničenje ima da se izvrši za dati zahtjev. Provjeravaju se po redoslijedu, a pretraživanje liste se završava čim se jedno od pravila podudara. Ako pravilo ima više ACL elemenata, ono se implementira kao boolean I operacija (svi ACL elementi pravila moraju biti podudarni da bi se pravilo podudaralo).

Glavna konfiguraciona datoteka Squida je /etc/squid/squid.conf, koja ima ~5000 linija, jer uključuje i konfiguracijske direktive i dokumentaciju. Iz tog razloga ćemo kreirati novu datoteku squid.conf sa samo redovima koji uključuju konfiguracijske direktive radi naše pogodnosti, izostavljajući prazne ili komentirane redove. Da bismo to učinili, koristit ćemo sljedeće naredbe.

mv /etc/squid/squid.conf /etc/squid/squid.conf.bkp

I onda,

grep -Eiv '(^#|^$)' /etc/squid/squid.conf.bkp

OR

grep -ve ^# -ve ^$ /etc/squid/squid.conf.bkp > /etc/squid/squid.conf

Sada otvorite novokreiranu datoteku squid.conf i potražite (ili dodajte) sljedeće ACL elemente i pristupne liste.

acl localhost src 127.0.0.1/32
acl localnet src 192.168.0.0/24

Dvije linije iznad predstavljaju osnovni primjer upotrebe ACL elemenata.

  1. Prva riječ, acl, označava da je ovo redak direktive ACL elementa.
  2. Druga riječ, localhost ili localnet, specificira ime za direktivu.
  3. Treća riječ, src u ovom slučaju, je tip ACL elementa koji se koristi za predstavljanje IP adrese klijenta ili raspona adresa, respektivno. Možete odrediti jedan host po IP-u (ili imenu hosta, ako imate implementiranu neku vrstu DNS rezolucije) ili po mrežnoj adresi.
  4. Četvrti parametar je argument filtriranja koji se “unosi” u direktivu.

Dva reda ispod su pravila pristupne liste i predstavljaju eksplicitnu implementaciju ACL direktiva spomenutih ranije. Ukratko, oni ukazuju na to da http pristup treba biti odobren ako zahtjev dolazi sa lokalne mreže (localnet), ili sa localhost. Konkretno, koja je dozvoljena lokalna mreža ili lokalne adrese hosta? Odgovor je: one specificirane u direktivama localhost i localnet.

http_access allow localnet
http_access allow localhost

U ovom trenutku možete ponovo pokrenuti Squid kako biste primijenili sve promjene na čekanju.

service squid restart 		[Upstart / sysvinit-based distributions]
systemctl restart squid.service 	[systemd-based distributions]

a zatim konfigurišite pretraživač klijenta u lokalnoj mreži (192.168.0.104 u našem slučaju) da pristupi Internetu preko vašeg proxyja na sledeći način.

U Firefoxu

1. Idite na meni Uredi i odaberite opciju Preferences.

2. Kliknite na Napredno, zatim na karticu Mreža i na kraju na Postavke

3. Provjerite Ručnu konfiguraciju proxyja i unesite IP adresu proxy servera i port na kojem sluša za veze.

Napomena da prema zadanim postavkama, Squid sluša port 3128, ali ovo ponašanje možete poništiti uređivanjem pristupne liste pravilo koje počinje sa http_port (podrazumevano glasi http_port 3128).

4. Kliknite na OK da primijenite promjene i spremni ste.

Provjera pristupa li klijentu Internetu

Sada možete provjeriti da li vaš klijent lokalne mreže pristupa internetu preko vašeg proxyja na sljedeći način.

1. U svom klijentu otvorite terminal i upišite,

ip address show eth0 | grep -Ei '(inet.*eth0)'

Ta komanda će prikazati trenutnu IP adresu vašeg klijenta (192.168.0.104 na sljedećoj slici).

2. U svom klijentu, koristite web pretraživač da otvorite bilo koju web stranicu (linux-console.net u ovom slučaju).

3. Na serveru pokrenite.

tail -f /var/log/squid/access.log

i imat ćete prikaz uživo zahtjeva koji se serviraju preko Squid.

Ograničavanje pristupa klijentu

Pretpostavimo sada da želite eksplicitno zabraniti pristup toj određenoj IP adresi klijenta, a da pritom zadržite pristup za ostatak lokalne mreže.

1. Definirajte novu ACL direktivu na sljedeći način (nazvao sam je ubuntuOS, ali možete je imenovati kako god želite).

acl ubuntuOS src 192.168.0.104

2. Dodajte ACL direktivu na localnet pristup listu koja je već uspostavljena, ali sa znakom uzvika. To znači, “Dozvoli pristup Internetu klijentima koji odgovaraju lokalnoj ACL direktivi osim onoj koja odgovara ubuntuOS direktivi”.

http_access allow localnet !ubuntuOS

3. Sada moramo ponovo pokrenuti Squid da bismo primijenili promjene. Zatim, ako pokušamo da pretražimo bilo koju stranicu, otkrit ćemo da je pristup sada odbijen.

Konfiguriranje Squid – fino podešavanje

Ograničavanje pristupa po domeni i/ili po dobu dana/danu u sedmici

Da ograničimo pristup Squid-u po domeni, koristit ćemo ključnu riječ dstdomain u ACL direktivi, kako slijedi.

acl forbidden dstdomain "/etc/squid/forbidden_domains"

Gdje je forbidden_domains običan tekstualni fajl koji sadrži domene kojima želimo zabraniti pristup.

Konačno, moramo odobriti pristup Squidu za zahtjeve koji se ne podudaraju s gornjom direktivom.

http_access allow localnet !forbidden

Ili ćemo možda htjeti dozvoliti pristup tim stranicama samo u određeno doba dana (10:00 do 11:00h) samo u ponedeljak (M), Srijeda (P) i Petak (P).

acl someDays time MWF 10:00-11:00
http_access allow forbidden someDays
http_access deny forbidden

U suprotnom, pristup tim domenima će biti blokiran.

Ograničavanje pristupa autentifikacijom korisnika

Squid podržava nekoliko mehanizama za autentifikaciju (Basic, NTLM, Digest, SPNEGO i Oauth) i pomoćnike (SQL baza podataka, LDAP, NIS, NCSA, da spomenemo samo neke). U ovom vodiču ćemo koristiti osnovnu autentifikaciju sa NCSA.

Dodajte sljedeće redove u vaš /etc/squid/squid.conf fajl.

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive on
auth_param basic realm Squid proxy-caching web server for Tecmint's LFCE series
acl ncsa proxy_auth REQUIRED
http_access allow ncsa

Napomena: U CentOS 7, NCSA dodatak za lignje se može pronaći u /usr/lib64/squid/basic_nsca_auth, pa promijenite u skladu s tim u gornjem redu.

Nekoliko pojašnjenja:

  1. Moramo reći Squidu koji pomoćni program za autentifikaciju da koristi sa auth_param direktivom tako što ćemo navesti ime programa (najvjerovatnije, /usr/lib/squid/ncsa_auth ili /usr/lib64/squid/basic_nsca_auth), plus sve opcije komandne linije (/etc/squid/passwd u ovom slučaju) ako je potrebno.
  2. Datoteka /etc/squid/passwd kreirana je putem htpasswd, alata za upravljanje osnovnom autentifikacijom putem datoteka. To će nam omogućiti da dodamo listu korisničkih imena (i njihovih odgovarajućih lozinki) kojima će biti dozvoljeno korištenje Squid-a.
  3. credentialsttl 30 minuta će zahtijevati unos vašeg korisničkog imena i lozinke svakih 30 minuta (možete odrediti i ovaj vremenski interval sa satima).
  4. osjetljivo na velika i mala slova na označava da su korisnička imena i lozinke osjetljive na velika i mala slova.
  5. realm predstavlja tekst dijaloga za autentifikaciju koji će se koristiti za autentifikaciju squid-a.
  6. Konačno, pristup se odobrava samo kada proxy autentifikacija (proxy_auth REQUIRED) uspije.

Pokrenite sljedeću naredbu da kreirate datoteku i dodate vjerodajnice za korisnika gacanepa (izostavite oznaku -c ako datoteka već postoji).

htpasswd -c /etc/squid/passwd gacanepa

Otvorite web pretraživač na klijentskoj mašini i pokušajte da pretražujete bilo koju lokaciju.

Ako provjera autentičnosti uspije, dopušta se pristup traženom resursu. U suprotnom, pristup će biti odbijen.

Upotreba keš memorije za ubrzanje prijenosa podataka

Jedna od prepoznatljivih karakteristika Squida je mogućnost keširanja resursa traženih s weba na disk kako bi se ubrzali budući zahtjevi tih objekata od strane istog klijenta ili drugih.

Dodajte sljedeće direktive u vaš squid.conf fajl.

cache_dir ufs /var/cache/squid 1000 16 256
maximum_object_size 100 MB
refresh_pattern .*\.(mp4|iso) 2880

Nekoliko pojašnjenja gore navedenih direktiva.

  1. ufs je Squid format za pohranu.
  2. /var/cache/squid je direktorij najvišeg nivoa u kojem će se pohranjivati keš datoteke. Ovaj direktorij mora postojati i na njega Squid može pisati (Squid NEĆE kreirati ovaj direktorij za vas).
  3. 1000 je iznos (u MB) za korištenje u ovom direktoriju.
  4. 16 je broj poddirektorija 1. nivoa, dok je 256 broj poddirektorija 2. nivoa unutar /var/spool/squid.
  5. Direktiva maximum_object_size specificira maksimalnu veličinu dozvoljenih objekata u kešu.
  6. refresh_pattern govori Squidu kako se nositi s određenim tipovima datoteka (.mp4 i .iso u ovom slučaju) i koliko dugo treba pohraniti tražene objekti u kešu (2880 minuta=2 dana).

Prva i druga 2880 su donja i gornja granica, redom, koliko dugo će se objekti bez eksplicitnog vremena isteka smatrati nedavnim, i stoga će ih opsluživati keš memorija, dok 0% je postotak starosti objekata (vrijeme od posljednje izmjene) da će se svaki objekt bez eksplicitnog vremena isteka smatrati nedavnim.

Studija slučaja: preuzimanje .mp4 datoteke sa 2 različita klijenta i testiranje keša

Prvi klijent (IP 192.168.0.104) preuzima datoteku 71 MB .mp4 za 2 minute i 52 sekunde.

Drugi klijent (IP 192.168.0.17) preuzima isti fajl za 1,4 sekunde!

To je zato što je datoteka poslužena iz Squid keš memorije (označena sa TCP_HIT/200) u drugom slučaju, za razliku od prve instance, kada je preuzeta direktno sa Internet (predstavlja TCP_MISS/200).

Ključne riječi HIT i MISS, zajedno sa kodom odgovora 200 http, pokazuju da je datoteka oba puta uspješno poslužena, ali je keš memorija HIT i Propušteno. Kada keš memorija iz nekog razloga ne može ispuniti zahtjev, onda Squid pokušava da ga posluži sa Interneta.

Zaključak

U ovom članku smo raspravljali o tome kako postaviti Squid web proxy za keširanje. Možete koristiti proxy server za filtriranje sadržaja prema odabranim kriterijima, kao i za smanjenje kašnjenja (pošto se identični dolazni zahtjevi poslužuju iz keš memorije, koja je bliža klijentu od web servera koji zapravo opslužuje sadržaj, što rezultira bržim prijenose podataka) i mrežni promet (smanjenje količine korištenog propusnog opsega, što vam štedi novac ako plaćate promet).

Možda ćete htjeti pogledati web stranicu Squid za daljnju dokumentaciju (obavezno provjerite i wiki), ali ne oklijevajte da nas kontaktirate ako imate bilo kakvih pitanja ili komentara. Bit će nam više nego drago čuti od vas!