Vyhledávání na webu

Konfigurace serveru proxy Squid s omezeným přístupem a nastavení klientů pro použití proxy - část 5


Linux Foundation Certified Engineer je zkušený profesionál, který má zkušenosti s instalací, správou a odstraňováním problémů se síťovými službami v systémech Linux a má na starosti návrh, implementaci a průběžnou údržbu systému – široká architektura.

Představujeme certifikační program Linux Foundation.

V části 1 této série jsme si ukázali, jak nainstalovat squid, proxy mezipaměťový server pro webové klienty. Než budete pokračovat, přečtěte si tento příspěvek (odkaz níže), pokud jste do svého systému ještě nenainstalovali chobotnici.

  1. Část 1 – Instalace síťových služeb a konfigurace automatického spouštění při spouštění

V tomto článku vám ukážeme, jak nakonfigurovat proxy server Squid za účelem udělení nebo omezení přístupu k internetu a jak nakonfigurovat klienta http nebo webový prohlížeč pro použití tohoto proxy serveru.

Nastavení mého testovacího prostředí

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

Připomeňme si, že zjednodušeně řečeno je webový proxy server prostředníkem mezi jedním (nebo více) klientskými počítači a určitým síťovým zdrojem, přičemž nejčastějším je přístup k internetu. Jinými slovy, proxy server je na jedné straně připojen přímo k internetu (nebo k routeru, který je připojen k internetu) a na druhé straně k síti klientských počítačů, které přes něj budou přistupovat k World Wide Web.

Možná se ptáte, proč bych měl chtít přidat další kus softwaru do své síťové infrastruktury?

Zde jsou 3 hlavní důvody:

1. Squid ukládá soubory z předchozích požadavků pro urychlení budoucích přenosů. Předpokládejme například, že klient1 stáhne CentOS-7.0-1406-x86_64-DVD.iso z internetu. Když klient2 požádá o přístup ke stejnému souboru, squid může soubor přenést ze své mezipaměti místo toho, aby jej znovu stahoval z internetu. Jak můžete hádat, můžete tuto funkci použít ke zrychlení datových přenosů v síti počítačů, které vyžadují časté aktualizace nějakého druhu.

2. ACL (Access Control Lists) nám umožňují omezit přístup k webovým stránkám a/nebo monitorovat přístup na základě jednotlivých uživatelů. Přístup můžete omezit například na základě dne v týdnu nebo denní doby nebo domény.

3. Obcházení webových filtrů je možné díky použití webového proxy serveru, na který jsou odesílány požadavky a který vrací požadovaný obsah klientovi, namísto toho, aby jej klient požadoval přímo na internet.

Předpokládejme například, že jste přihlášeni jako klient1 a chcete přistupovat na www.facebook.com prostřednictvím směrovače vaší společnosti. Vzhledem k tomu, že stránky mohou být blokovány zásadami vaší společnosti, můžete se místo toho připojit k webovému proxy serveru a požádat jej o přístup na www.facebook.com. Vzdálený obsah se vám pak znovu vrátí přes webový proxy server, čímž se obchází zásady blokování směrovače vaší společnosti.

Konfigurace Squid – základy

Schéma řízení přístupu webového proxy serveru Squid se skládá ze dvou různých komponent:

  1. Prvky ACL jsou direktivní řádky, které začínají slovem „acl“ a představují typy testů, které se provádějí proti jakékoli transakci požadavku.
  2. pravidla přístupového seznamu se skládají z akce povolit nebo zakázat následovanou řadou prvků ACL a používají se k označení akce nebo omezení. které mají být pro danou žádost vynuceny. Kontrolují se v pořadí a vyhledávání v seznamu se ukončí, jakmile se jedno z pravidel shoduje. Pokud má pravidlo více prvků ACL, je implementováno jako logická operace AND (všechny prvky ACL pravidla se musí shodovat, aby se pravidlo shodovalo).

Hlavním konfiguračním souborem Squid je /etc/squid/squid.conf, což je ~5000 řádků, protože obsahuje konfigurační směrnice i dokumentaci. Z toho důvodu vytvoříme nový soubor squid.conf pouze s řádky, které obsahují konfigurační direktivy pro naše pohodlí, vynecháme prázdné nebo komentované řádky. K tomu použijeme následující příkazy.

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

A pak,

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

OR

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

Nyní otevřete nově vytvořený soubor squid.conf a vyhledejte (nebo přidejte) následující prvky ACL a přístupové seznamy.

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

Dva výše uvedené řádky představují základní příklad použití prvků ACL.

  1. První slovo, acl, označuje, že se jedná o řádek direktivy prvku ACL.
  2. Druhé slovo, localhost nebo localnet, určuje název direktivy.
  3. Třetí slovo, v tomto případě src, je typ prvku ACL, který se používá k reprezentaci IP adresy klienta nebo rozsahu adres. Jednoho hostitele můžete zadat podle IP (nebo názvu hostitele, pokud máte implementován nějaký druh překladu DNS) nebo podle síťové adresy.
  4. Čtvrtý parametr je argument filtrování, který je „předán“ direktivě.

Dva řádky níže jsou pravidla přístupového seznamu a představují explicitní implementaci výše zmíněných direktiv ACL. V několika slovech naznačují, že přístup http by měl být udělen, pokud požadavek přichází z místní sítě (localnet) nebo z localhost. Jaká je konkrétně povolená adresa místní sítě nebo místního hostitele? Odpověď zní: ty uvedené v direktivách localhost a localnet.

http_access allow localnet
http_access allow localhost

V tomto okamžiku můžete restartovat Squid, abyste mohli použít všechny čekající změny.

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

a poté nakonfigurujte klientský prohlížeč v místní síti (v našem případě 192.168.0.104) pro přístup k internetu přes váš proxy následovně.

Ve Firefoxu

1. Přejděte do nabídky Upravit a vyberte možnost Předvolby.

2. Klikněte na Pokročilé, poté na kartu Síť a nakonec na Nastavení

3. Zaškrtněte Ruční konfiguraci proxy a zadejte IP adresu proxy serveru a port, na kterém naslouchá pro spojení.

Poznámka Ve výchozím nastavení Squid naslouchá na portu 3128, ale toto chování můžete přepsat úpravou seznamu přístupů pravidlo, které začíná http_port (ve výchozím nastavení zní http_port 3128).

4. Kliknutím na OK použijete změny a můžete začít.

Ověření, že klient přistupuje k internetu

Nyní můžete ověřit, že váš klient místní sítě přistupuje k Internetu prostřednictvím vašeho proxy, a to následovně.

1. Ve svém klientovi otevřete terminál a zadejte,

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

Tento příkaz zobrazí aktuální IP adresu vašeho klienta (192.168.0.104 na následujícím obrázku).

2. Ve svém klientovi použijte webový prohlížeč k otevření libovolné webové stránky (v tomto případě linux-console.net).

3. Na serveru spusťte.

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

a získáte živý pohled na požadavky vyřizované prostřednictvím Squid.

Omezení přístupu ze strany klienta

Nyní předpokládejme, že chcete explicitně zakázat přístup k této konkrétní IP adrese klienta, a přitom zachovat přístup pro zbytek místní sítě.

1. Definujte novou direktivu ACL následovně (nazval jsem ji ubuntuOS, ale můžete si ji pojmenovat, jak chcete).

acl ubuntuOS src 192.168.0.104

2. Přidejte direktivu ACL do seznamu localnet access, který již existuje, ale před ní uveďte vykřičník. To znamená, „Povolit přístup k Internetu klientům vyhovujícím direktivě ACL localnet s výjimkou těch, které odpovídají direktivě ubuntuOS“.

http_access allow localnet !ubuntuOS

3. Nyní potřebujeme restartovat Squid, abychom mohli použít změny. Když se pak pokusíme přejít na jakoukoli stránku, zjistíme, že přístup je nyní odepřen.

Konfigurace Squid – jemné ladění

Omezení přístupu podle domény a/nebo podle denní doby/dne v týdnu

Abychom omezili přístup k Squid podle domény, použijeme klíčové slovo dstdomain v direktivě ACL následovně.

acl forbidden dstdomain "/etc/squid/forbidden_domains"

Kde zakázané_domény je prostý textový soubor, který obsahuje domény, ke kterým chceme odepřít přístup.

Nakonec musíme udělit přístup Squid pro požadavky, které neodpovídají výše uvedené směrnici.

http_access allow localnet !forbidden

Nebo možná budeme chtít povolit přístup na tyto stránky pouze v určitou denní dobu (10:00 až 11:00) pouze v pondělí (M), středa (W) a pátek (F).

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

V opačném případě bude přístup k těmto doménám zablokován.

Omezení přístupu pomocí ověření uživatele

Squid podporuje několik autentizačních mechanismů (Basic, NTLM, Digest, SPNEGO a Oauth) a pomocníků (SQL databáze, LDAP, NIS, NCSA, abychom jmenovali alespoň některé). V tomto tutoriálu použijeme základní ověřování pomocí NCSA.

Přidejte následující řádky do svého souboru /etc/squid/squid.conf.

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

Poznámka: V CentOS 7 lze plugin NCSA pro olihně nalézt v /usr/lib64/squid/basic_nsca_auth, takže změňte odpovídajícím způsobem ve výše uvedeném řádku.

Několik upřesnění:

  1. Musíme Squidu sdělit, který autentizační pomocný program má použít s direktivou auth_param zadáním názvu programu (s největší pravděpodobností /usr/lib/squid/ncsa_auth nebo /usr/lib64/squid/basic_nsca_auth, plus jakékoli možnosti příkazového řádku (v tomto případě /etc/squid/passwd), pokud je to nutné.
  2. Soubor /etc/squid/passwd je vytvořen pomocí htpasswd, nástroje pro správu základní autentizace prostřednictvím souborů. Umožní nám to přidat seznam uživatelských jmen (a jim odpovídajících hesel), kterým bude povoleno používat Squid.
  3. credentialsttl 30 minutes bude vyžadovat zadání vašeho uživatelského jména a hesla každých 30 minut (tento časový interval můžete zadat také v hodinách).
  4. Rozlišovat malá a velká písmena zapnuto znamená, že uživatelská jména a hesla rozlišují malá a velká písmena.
  5. realm představuje text autentizačního dialogu, který bude použit k ověření chobotnice.
  6. A konečně, přístup je udělen pouze v případě úspěšného ověření proxy (proxy_auth REQUIRED).

Spuštěním následujícího příkazu vytvořte soubor a přidejte přihlašovací údaje pro uživatele gacanepa (pokud soubor již existuje, vynechejte příznak -c).

htpasswd -c /etc/squid/passwd gacanepa

Otevřete webový prohlížeč v klientském počítači a pokuste se přejít na libovolnou danou stránku.

Pokud je ověření úspěšné, je požadovanému zdroji udělen přístup. V opačném případě bude přístup odepřen.

Použití mezipaměti ke zrychlení přenosu dat

Jednou z charakteristických vlastností Squidu je možnost ukládání zdrojů požadovaných z webu na disk, aby se urychlily budoucí požadavky na tyto objekty buď stejným klientem, nebo jinými.

Přidejte následující direktivy do svého souboru squid.conf.

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

Několik vysvětlení k výše uvedeným směrnicím.

  1. ufs je formát úložiště Squid.
  2. /var/cache/squid je adresář nejvyšší úrovně, kde budou uloženy soubory mezipaměti. Tento adresář musí existovat a musí do něj Squid zapisovat (Squid za vás tento adresář NEBUDE vytvářet).
  3. 1000 je množství (v MB), které se má použít v tomto adresáři.
  4. 16 je počet podadresářů 1. úrovně, zatímco 256 je počet podadresářů 2. úrovně v rámci /var/spool/squid.
  5. Direktiva maximum_object_size určuje maximální velikost povolených objektů v mezipaměti.
  6. refresh_pattern říká Squidu, jak zacházet s konkrétními typy souborů (v tomto případě .mp4 a .iso) a jak dlouho má uchovávat požadované soubory objektů v mezipaměti (2880 minut=2 dny).

Prvních a druhých 2880 jsou dolní a horní limity, v tomto pořadí, pro to, jak dlouho budou objekty bez explicitní doby vypršení platnosti považovány za nedávné, a tedy budou obsluhovány mezipamětí, zatímco 0 % je procento stáří objektů (čas od poslední úpravy), kdy bude každý objekt bez explicitního času vypršení platnosti považován za poslední.

Případová studie: stažení souboru .mp4 ze 2 různých klientů a testování mezipaměti

První klient (IP 192.168.0.104) stáhne 71 MB .mp4 soubor za 2 minuty a 52 sekund.

Druhý klient (IP 192.168.0.17) stáhne stejný soubor za 1,4 sekundy!

Je to proto, že soubor byl obsluhován z Squid cache (označené TCP_HIT/200) ve druhém případě, na rozdíl od prvního případu, kdy byl stažen přímo z internet (zastoupený TCP_MISS/200).

Klíčová slova HIT a MISS spolu s kódem odpovědi 200 http znamenají, že soubor byl v obou případech úspěšně doručen, ale mezipaměť byla HIT a Zmeškané. Když z nějakého důvodu mezipaměť nemůže obsloužit požadavek, Squid se jej pokusí obsloužit z internetu.

Závěr

V tomto článku jsme diskutovali o tom, jak nastavit web proxy pro ukládání do mezipaměti Squid. Proxy server můžete použít k filtrování obsahu podle zvolených kritérií a také ke snížení latence (protože identické příchozí požadavky jsou obsluhovány z mezipaměti, která je blíže klientovi než webový server, který obsah skutečně obsluhuje, což vede k rychlejšímu datové přenosy) a také síťový provoz (snížení množství použité šířky pásma, což vám ušetří peníze, pokud platíte za provoz).

Můžete se podívat na webovou stránku Squid pro další dokumentaci (nezapomeňte se také podívat na wiki), ale pokud máte nějaké dotazy nebo připomínky, neváhejte nás kontaktovat. Budeme více než rádi, když se nám ozvete!