„Squid“ įgaliotojo serverio konfigūravimas su ribota prieiga ir klientų nustatymas naudoti tarpinį serverį – 5 dalis


Linux fondo sertifikuotas inžinierius yra kvalifikuotas specialistas, turintis patirties diegti, valdyti ir šalinti tinklo paslaugas Linux sistemose ir yra atsakingas už sistemos projektavimą, diegimą ir nuolatinę priežiūrą. plati architektūra.

Pristatome „Linux Foundation“ sertifikavimo programą.

Šios serijos 1 dalyje parodėme, kaip įdiegti squid – tarpinį serverį talpykloje, skirtą žiniatinklio klientams. Prieš tęsdami peržiūrėkite tą įrašą (nuoroda pateikta žemiau), jei dar neįdiegėte kalmarų savo sistemoje.

  1. 1 dalis – Tinklo paslaugų diegimas ir automatinio paleidimo konfigūravimas paleidžiant

Šiame straipsnyje parodysime, kaip sukonfigūruoti „Squid“ tarpinį serverį, kad būtų suteikta arba apribota prieiga prie interneto, ir kaip sukonfigūruoti http klientą arba žiniatinklio naršyklę, kad būtų naudojamas šis tarpinis serveris.

Mano testavimo aplinkos sąranka

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

Prisiminkime, kad paprastai žiniatinklio tarpinis serveris yra tarpininkas tarp vieno (ar daugiau) klientų kompiuterių ir tam tikro tinklo resurso, dažniausiai prieiga prie interneto. Kitaip tariant, tarpinis serveris vienoje pusėje yra tiesiogiai prijungtas prie interneto (arba prie maršrutizatoriaus, kuris yra prijungtas prie interneto), o iš kitos pusės - prie klientų kompiuterių tinklo, kuris per jį pasieks pasaulinį žiniatinklį.

Jums gali kilti klausimas, kodėl turėčiau prie savo tinklo infrastruktūros pridėti dar vieną programinę įrangą?

Štai 3 pagrindinės priežastys:

1. Squid saugo failus iš ankstesnių užklausų, kad paspartintų būsimus perkėlimus. Pavyzdžiui, tarkime, kad klientas1 atsisiunčia CentOS-7.0-1406-x86_64-DVD.iso iš interneto. Kai klientas2 prašo prieigos prie to paties failo, squid gali perkelti failą iš talpyklos, o ne dar kartą atsisiųsti iš interneto. Kaip galite spėti, galite naudoti šią funkciją, kad pagreitintumėte duomenų perdavimą kompiuterių tinkle, kurį reikia dažnai atnaujinti.

2. ACL (Prieigos kontrolės sąrašai) leidžia apriboti prieigą prie svetainių ir (arba) stebėti prieigą kiekvienam vartotojui. Galite apriboti prieigą pagal savaitės dieną ar paros laiką arba, pavyzdžiui, domeną.

3. Žiniatinklio filtrų apėjimas yra įmanomas naudojant žiniatinklio tarpinį serverį, kuriam pateikiamos užklausos ir kuris grąžina prašomą turinį klientui, o ne klientas jo prašo tiesiogiai į internetą.

Pavyzdžiui, tarkime, kad esate prisijungę prie client1 ir norite pasiekti www.facebook.com per savo įmonės maršruto parinktuvą. Kadangi svetainė gali būti užblokuota dėl jūsų įmonės politikos, galite prisijungti prie žiniatinklio įgaliotojo serverio ir paprašyti prieigos prie www.facebook.com. Tada nuotolinis turinys vėl grąžinamas jums per žiniatinklio tarpinį serverį, apeinant jūsų įmonės maršruto parinktuvo blokavimo politiką.

Squid konfigūravimas – pagrindai

„Squid“ žiniatinklio tarpinio serverio prieigos valdymo schema susideda iš dviejų skirtingų komponentų:

  1. ACL elementai yra direktyvų eilutės, kurios prasideda žodžiu „acl“ ir nurodo testų tipus, kurie atliekami prieš bet kokią užklausos operaciją.
  2. Prieigos sąrašo taisyklės susideda iš veiksmo leisti arba neleisti, po kurio seka keletas ACL elementų, ir yra naudojamos nurodyti veiksmą ar apribojimą. turi būti įvykdytas pagal tam tikrą prašymą. Jie tikrinami eilės tvarka, o sąrašo paieška nutraukiama, kai tik viena iš taisyklių atitinka. Jei taisyklė turi kelis ACL elementus, ji įgyvendinama kaip loginė IR operacija (visi taisyklės ACL elementai turi atitikti, kad taisyklė atitiktų).

Pagrindinis Squid konfigūracijos failas yra /etc/squid/squid.conf, kuris yra ~5000 eilučių, nes jame yra ir konfigūracijos nurodymai, ir dokumentacija. Dėl šios priežasties mes sukursime naują squid.conf failą, kuriame bus tik tos eilutės, kuriose yra konfigūracijos nurodymai, nepalikdami tuščių ar komentuojamų eilučių. Norėdami tai padaryti, naudosime šias komandas.

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

Ir tada,

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

OR

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

Dabar atidarykite naujai sukurtą squid.conf failą ir ieškokite (arba pridėkite) šių ACL elementų ir prieigos sąrašų.

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

Dvi aukščiau pateiktos eilutės yra pagrindinis ACL elementų naudojimo pavyzdys.

  1. Pirmasis žodis acl rodo, kad tai yra ACL elemento direktyvos eilutė.
  2. Antrasis žodis localhost arba localnet nurodo direktyvos pavadinimą.
  3. Trečiasis žodis, šiuo atveju src, yra ACL elemento tipas, naudojamas atitinkamai kliento IP adresui arba adresų diapazonui pavaizduoti. Galite nurodyti vieną pagrindinį kompiuterį pagal IP (arba pagrindinio kompiuterio pavadinimą, jei įdiegta kokia nors DNS skiriamoji geba) arba pagal tinklo adresą.
  4. Ketvirtasis parametras yra filtravimo argumentas, kuris „tiekiamas“ į direktyvą.

Toliau pateiktos dvi eilutės yra prieigos sąrašo taisyklės ir aiškiai parodo anksčiau minėtų ACL direktyvų įgyvendinimą. Keliais žodžiais jie nurodo, kad http prieiga turėtų būti suteikta, jei užklausa gaunama iš vietinio tinklo (localnet) arba iš localhost. Kokie yra leistini vietinio tinklo arba vietinio pagrindinio kompiuterio adresai? Atsakymas yra: tie, kurie nurodyti „localhost“ ir „localnet“ direktyvose.

http_access allow localnet
http_access allow localhost

Šiuo metu galite iš naujo paleisti Squid, kad pritaikytumėte visus laukiančius pakeitimus.

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

ir sukonfigūruokite kliento naršyklę vietiniame tinkle (mūsų atveju 192.168.0.104), kad galėtumėte pasiekti internetą per tarpinį serverį, kaip nurodyta toliau.

„Firefox“.

1. Eikite į meniu Redaguoti ir pasirinkite parinktį Nuostatos.

2. Spustelėkite Išplėstinė, tada skirtuką Tinklas ir galiausiai Nustatymai...

3. Pažymėkite Rankinis tarpinio serverio konfigūravimas ir įveskite įgaliotojo serverio IP adresą ir prievadą, kuriame jis klauso jungtims.

Pastaba Pagal numatytuosius nustatymus Squid klausosi prievado 3128, bet galite nepaisyti šio elgesio redaguodami prieigos sąrašą taisyklė, kuri prasideda http_port (pagal numatytuosius nustatymus ji skaitoma http_port 3128).

4. Spustelėkite Gerai, kad pritaikytumėte pakeitimus ir viskas.

Patikrinimas, ar Klientas prisijungia prie interneto

Dabar galite patikrinti, ar jūsų vietinio tinklo klientas prisijungia prie interneto per tarpinį serverį, kaip nurodyta toliau.

1. Kliente atidarykite terminalą ir įveskite

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

Ši komanda parodys dabartinį jūsų kliento IP adresą (192.168.0.104 kitame paveikslėlyje).

2. Kliento programoje naudokite žiniatinklio naršyklę, kad atidarytumėte bet kurią svetainę (šiuo atveju linux-console.net).

3. Serveryje paleiskite.

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

ir gausite tiesioginį užklausų, teikiamų per Squid, vaizdą.

Kliento prieigos ribojimas

Dabar tarkime, kad norite aiškiai uždrausti prieigą prie to konkretaus kliento IP adreso, kartu išsaugodami prieigą prie likusio vietinio tinklo.

1. Apibrėžkite naują ACL direktyvą taip (aš pavadinau ubuntuOS, bet galite pavadinti kaip tik norite).

acl ubuntuOS src 192.168.0.104

2. Pridėkite direktyvą ACL į vietinio tinklo prieigos sąrašą, kuris jau yra, bet prieš jį padėkite šauktuką. Tai reiškia: „Leisti prieigą prie interneto klientams, atitinkantiems vietinio tinklo ACL direktyvą, išskyrus tą, kuris atitinka ubuntuOS direktyvą“.

http_access allow localnet !ubuntuOS

3. Dabar turime iš naujo paleisti Squid, kad pritaikytume pakeitimus. Tada, jei bandysime naršyti į bet kurią svetainę, pamatysime, kad prieiga dabar uždrausta.

Squid konfigūravimas – tikslus derinimas

Prieigos ribojimas pagal domeną ir (arba) pagal paros laiką/savaitės dieną

Norėdami apriboti prieigą prie Squid pagal domeną, ACL direktyvoje naudosime raktinį žodį dstdomain, kaip nurodyta toliau.

acl forbidden dstdomain "/etc/squid/forbidden_domains"

Kur forbidden_domains yra paprasto teksto failas, kuriame yra domenai, prie kurių norime uždrausti prieigą.

Galiausiai turime suteikti prieigą prie Squid užklausoms, kurios neatitinka anksčiau pateiktos direktyvos.

http_access allow localnet !forbidden

O gal norėsime leisti pasiekti tas svetaines tik tam tikru paros metu (10:00–11:00) tik pirmadienį (M), Trečiadienis (V) ir Penktadienis (P).

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

Priešingu atveju prieiga prie tų domenų bus užblokuota.

Prieigos ribojimas naudojant vartotojo autentifikavimą

„Squid“ palaiko kelis autentifikavimo mechanizmus (Basic, NTLM, Digest, SPNEGO ir Oauth) ir pagalbininkus (SQL duomenų bazė, LDAP, NIS, NCSA). Šioje mokymo programoje naudosime pagrindinį autentifikavimą su NCSA.

Pridėkite šias eilutes į savo /etc/squid/squid.conf failą.

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

Pastaba: CentOS 7 NCSA papildinį, skirtą squid, rasite adresu /usr/lib64/squid/basic_nsca_auth, todėl atitinkamai pakeiskite aukščiau esančią eilutę.

Keletas patikslinimų:

  1. Turime nurodyti Squid, kurią autentifikavimo pagalbinę programą naudoti su direktyva auth_param, nurodydami programos pavadinimą (greičiausiai /usr/lib/squid/ncsa_auth arba /usr/lib64/squid/basic_nsca_auth) ir bet kokias komandinės eilutės parinktis (šiuo atveju /etc/squid/passwd), jei reikia.
  2. Failas /etc/squid/passwd sukuriamas naudojant htpasswd – įrankį, leidžiantį valdyti pagrindinį autentifikavimą naudojant failus. Tai leis mums pridėti vartotojų vardų (ir atitinkamų slaptažodžių), kuriems bus leista naudoti Squid, sąrašą.
  3. credentialsttl 30 minučių reikės įvesti naudotojo vardą ir slaptažodį kas 30 minučių (šį laiko intervalą galite nurodyti ir valandomis).
  4. Įjungtas didžiosios ir mažosios raidės rodo, kad naudotojų vardai ir slaptažodžiai skiriami didžiosioms ir mažosioms raidėms.
  5. valdymas reiškia autentifikavimo dialogo lango, kuris bus naudojamas autentifikuoti kalmarams, tekstą.
  6. Galiausiai prieiga suteikiama tik sėkmingai patvirtinus įgaliotąjį serverį (PRoxy_auth REQUIRED).

Vykdykite šią komandą, kad sukurtumėte failą ir pridėtumėte vartotojo gacanepa kredencialus (praleiskite vėliavėlę -c, jei failas jau yra).

htpasswd -c /etc/squid/passwd gacanepa

Atidarykite žiniatinklio naršyklę kliento įrenginyje ir pabandykite naršyti į bet kurią nurodytą svetainę.

Jei autentifikavimas sėkmingas, prieiga prie prašomo šaltinio suteikiama. Priešingu atveju prieiga bus uždrausta.

Talpyklos naudojimas siekiant pagreitinti duomenų perdavimą

Viena iš skiriamųjų „Squid“ ypatybių yra galimybė talpykloje išsaugoti žiniatinklio reikalaujamus išteklius į diską, kad paspartintų to paties kliento ar kitų objektų užklausas ateityje.

Pridėkite šias direktyvas į failą squid.conf.

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

Keletas minėtų direktyvų paaiškinimų.

  1. ufs yra Squid saugojimo formatas.
  2. /var/cache/squid yra aukščiausio lygio katalogas, kuriame bus saugomi talpyklos failai. Šis katalogas turi egzistuoti ir jį gali įrašyti Squid (Squid NEGALIMA sukurti šio katalogo už jus).
  3. 1000 yra suma (MB), kurią reikia naudoti šiame kataloge.
  4. 16 yra 1 lygio pakatalogių skaičius, o 256 yra 2 lygio pakatalogių skaičius /var/spool/squid.
  5. Direktyva maximum_object_size nurodo maksimalų leistinų objektų dydį talpykloje.
  6. refresh_pattern nurodo Squid, kaip elgtis su tam tikrais failų tipais (šiuo atveju .mp4 ir .iso) ir kiek laiko turėtų saugoti prašomą failą. objektai talpykloje (2880 minučių=2 dienos).

Pirmasis ir antrasis 2880 yra atitinkamai apatinės ir viršutinės ribos, nurodančios, kiek ilgai objektai be aiškaus galiojimo laiko bus laikomi naujais, todėl juos aptarnaus talpykla, o 0 % yra objektų amžiaus procentas (laikas nuo paskutinio modifikavimo), kai kiekvienas objektas be aiškaus galiojimo laiko bus laikomas naujausiu.

Atvejo analizė: .mp4 failo atsisiuntimas iš 2 skirtingų klientų ir talpyklos testavimas

Pirmasis klientas (IP 192.168.0.104) atsisiunčia 71 MB .mp4 failą per 2 minutes ir 52 sekundes.

Antrasis klientas (IP 192.168.0.17) atsisiunčia tą patį failą per 1,4 sekundės!

Taip yra todėl, kad failas buvo pateiktas iš Squid talpyklos (nurodytas TCP_HIT/200) antruoju atveju, o ne pirmuoju atveju, kai jis buvo atsisiųstas tiesiai iš internetas (atstovauja TCP_MISS/200).

Raktiniai žodžiai HIT ir MISS kartu su atsako kodu 200 http rodo, kad failas buvo sėkmingai pateiktas abu kartus, tačiau talpykla buvo PATAIKYTA ir praleistas atitinkamai. Kai dėl kokių nors priežasčių talpykla negali aptarnauti užklausos, Squid bando ją pateikti iš interneto.

Išvada

Šiame straipsnyje aptarėme, kaip nustatyti „Squid“ žiniatinklio talpyklos tarpinį serverį. Galite naudoti tarpinį serverį, norėdami filtruoti turinį pagal pasirinktus kriterijus, taip pat sumažinti delsą (nes identiškos gaunamos užklausos pateikiamos iš talpyklos, kuri yra arčiau kliento nei žiniatinklio serveris, kuris faktiškai aptarnauja turinį, todėl greičiau duomenų perdavimas) ir tinklo srautas (sumažina naudojamo pralaidumo kiekį, o tai sutaupo pinigų, jei mokate už srautą).

Norėdami gauti daugiau dokumentų, galbūt norėsite apsilankyti Squid svetainėje (būtinai patikrinkite ir wiki), bet nedvejodami susisiekite su mumis, jei turite klausimų ar komentarų. Mums bus labai malonu išgirsti iš jūsų!