Zoeken op website

Squid Proxy Server configureren met beperkte toegang en clients instellen om Proxy te gebruiken - Deel 5


Een Linux Foundation Certified Engineer is een bekwame professional die de expertise heeft om netwerkservices in Linux-systemen te installeren, beheren en problemen op te lossen, en die verantwoordelijk is voor het ontwerp, de implementatie en het voortdurende onderhoud van het systeem. brede architectuur.

Introductie van het Linux Foundation-certificeringsprogramma.

In Deel 1 van deze serie hebben we laten zien hoe je squid installeert, een proxy-cachingserver voor webclients. Raadpleeg dat bericht (link hieronder) voordat u verdergaat als u squid nog niet op uw systeem hebt geïnstalleerd.

  1. Deel 1 – Netwerkservices installeren en automatisch opstarten bij opstarten configureren

In dit artikel laten we u zien hoe u de Squid-proxyserver configureert om internettoegang te verlenen of te beperken, en hoe u een http-client of webbrowser configureert om die proxyserver te gebruiken.

Mijn testomgeving instellen

Inktvisserver
Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
Clientmachine 1
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
Clientmachine 2
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

Laten we niet vergeten dat, eenvoudig gezegd, een webproxyserver een tussenpersoon is tussen een (of meer) clientcomputers en een bepaalde netwerkbron, waarvan de meest voorkomende toegang tot internet is. Met andere woorden: de proxyserver is aan de ene kant rechtstreeks verbonden met internet (of met een router die met internet is verbonden) en aan de andere kant met een netwerk van clientcomputers die via dit netwerk toegang hebben tot het World Wide Web.

U vraagt zich misschien af: waarom zou ik nog een stukje software aan mijn netwerkinfrastructuur willen toevoegen?

Hier zijn de top 3 redenen:

1. Squid slaat bestanden van eerdere verzoeken op om toekomstige overdrachten te versnellen. Stel bijvoorbeeld dat client1 CentOS-7.0-1406-x86_64-DVD.iso downloadt van internet. Wanneer client2 toegang tot hetzelfde bestand vraagt, kan squid het bestand uit de cache overbrengen in plaats van het opnieuw van internet te downloaden. Zoals u kunt raden, kunt u deze functie gebruiken om de gegevensoverdracht te versnellen in een netwerk van computers die regelmatig updates vereisen.

2. ACL's (Toegangscontrolelijsten) stellen ons in staat de toegang tot websites te beperken en/of de toegang per gebruiker te controleren. U kunt de toegang beperken op basis van bijvoorbeeld de dag van de week, het tijdstip van de dag of het domein.

3. Het omzeilen van webfilters wordt mogelijk gemaakt door het gebruik van een webproxy waaraan verzoeken worden gedaan en die de gevraagde inhoud terugstuurt naar een client, in plaats van dat de client deze rechtstreeks via internet opvraagt.

Stel dat u bent aangemeld bij client1 en toegang wilt krijgen tot www.facebook.com via de router van uw bedrijf. Omdat de site mogelijk wordt geblokkeerd door het beleid van uw bedrijf, kunt u in plaats daarvan verbinding maken met een webproxyserver en deze toegang laten vragen tot www.facebook.com. Externe inhoud wordt vervolgens opnieuw via de webproxyserver naar u teruggestuurd, waarbij het blokkeringsbeleid van de router van uw bedrijf wordt omzeild.

Inktvis configureren – de basis

Het toegangscontroleschema van de Squid-webproxyserver bestaat uit twee verschillende componenten:

  1. De ACL-elementen zijn instructieregels die beginnen met het woord “acl” en vertegenwoordigen typen tests die worden uitgevoerd op elke verzoektransactie.
  2. De toegangslijstregels bestaan uit een actie toestaan of weigeren gevolgd door een aantal ACL-elementen, en worden gebruikt om aan te geven welke actie of beperking voor een bepaald verzoek moet worden afgedwongen. Ze worden in volgorde gecontroleerd en het zoeken naar lijsten wordt beëindigd zodra een van de regels overeenkomt. Als een regel meerdere ACL-elementen heeft, wordt deze geïmplementeerd als een booleaanse AND-bewerking (alle ACL-elementen van de regel moeten overeenkomen om de regel een overeenkomst te laten zijn).

Het belangrijkste configuratiebestand van Squid is /etc/squid/squid.conf, wat ~5000 regels lang is, omdat het zowel configuratierichtlijnen als documentatie bevat. Om die reden zullen we voor ons gemak een nieuw squid.conf-bestand maken met alleen de regels die configuratie-instructies bevatten, waarbij lege regels of regels met commentaar worden weggelaten. Om dit te doen, zullen we de volgende commando's gebruiken.

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

En dan,

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

OR

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

Open nu het nieuw gemaakte squid.conf-bestand en zoek naar (of voeg toe) de volgende ACL-elementen en toegangslijsten.

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

De twee regels hierboven geven een basisvoorbeeld weer van het gebruik van ACL-elementen.

  1. Het eerste woord, acl, geeft aan dat dit een ACL-elementrichtlijnregel is.
  2. Het tweede woord, localhost of localnet, specificeert een naam voor de richtlijn.
  3. Het derde woord, in dit geval src, is een ACL-elementtype dat wordt gebruikt om respectievelijk een client-IP-adres of een reeks adressen weer te geven. U kunt een enkele host opgeven op IP (of hostnaam, als u een of andere DNS-resolutie hebt geïmplementeerd) of op netwerkadres.
  4. De vierde parameter is een filterargument dat wordt “gevoed ” aan de richtlijn.

De twee onderstaande regels zijn toegangslijst-regels en vertegenwoordigen een expliciete implementatie van de eerder genoemde ACL-richtlijnen. In enkele woorden geven ze aan dat http-toegang moet worden verleend als het verzoek afkomstig is van het lokale netwerk (localnet), of van localhost. Wat zijn specifiek de toegestane lokale netwerk- of lokale hostadressen? Het antwoord is: die gespecificeerd in de localhost- en localnet-richtlijnen.

http_access allow localnet
http_access allow localhost

Op dit punt kunt u Squid opnieuw opstarten om eventuele openstaande wijzigingen toe te passen.

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

en configureer vervolgens een clientbrowser in het lokale netwerk (192.168.0.104 in ons geval) om via uw proxy toegang te krijgen tot internet, als volgt.

In Firefox

1. Ga naar het menu Bewerken en kies de optie Voorkeuren.

2. Klik op Geavanceerd, vervolgens op het tabblad Netwerk en ten slotte op Instellingen

3. Controleer Handmatige proxyconfiguratie en voer het IP-adres van de proxyserver in en de poort waarnaar deze luistert voor verbindingen.

Opmerking Squid luistert standaard op poort 3128, maar je kunt dit gedrag negeren door de toegangslijst te bewerken > regel die begint met http_port (standaard luidt http_port 3128).

4. Klik op OK om de wijzigingen toe te passen en u bent klaar om te gaan.

Controleren of een client toegang heeft tot internet

U kunt nu als volgt verifiëren dat uw lokale netwerkclient via uw proxy toegang heeft tot internet.

1. Open in uw client een terminal en typ:

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

Met dat commando wordt het huidige IP-adres van uw client weergegeven (192.168.0.104 in de volgende afbeelding).

2. Gebruik in uw client een webbrowser om een bepaalde website te openen (linux-console.net in dit geval).

3. Voer uit op de server.

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

en u krijgt live een beeld van de verzoeken die worden ingediend via Squid.

Toegang door klant beperken

Stel nu dat u expliciet de toegang tot dat specifieke client-IP-adres wilt weigeren, terwijl u toch de toegang voor de rest van het lokale netwerk wilt behouden.

1. Definieer een nieuwe ACL-richtlijn als volgt (ik heb het ubuntuOS genoemd, maar je kunt het elke naam geven die je wilt).

acl ubuntuOS src 192.168.0.104

2. Voeg de ACL-richtlijn toe aan de localnet-toegang-lijst die al aanwezig is, maar laat deze voorafgaan door een uitroepteken. Dit betekent: “Internettoegang toestaan aan clients die overeenkomen met de localnet ACL-richtlijn, behalve degene die overeenkomt met de ubuntuOS-richtlijn”.

http_access allow localnet !ubuntuOS

3. Nu moeten we Squid opnieuw opstarten om de wijzigingen door te voeren. Als we vervolgens naar een site proberen te bladeren, zullen we merken dat de toegang nu wordt geweigerd.

Inktvis configureren – fijnafstemming

Toegang beperken per domein en/of per tijdstip/dag van de week

Om de toegang tot Squid per domein te beperken, gebruiken we het trefwoord dstdomain in een ACL-instructie, als volgt.

acl forbidden dstdomain "/etc/squid/forbidden_domains"

Waarbij verboden_domeinen een tekstbestand is dat de domeinen bevat waartoe we de toegang willen weigeren.

Ten slotte moeten we toegang verlenen tot Squid voor verzoeken die niet voldoen aan de bovenstaande richtlijn.

http_access allow localnet !forbidden

Of misschien willen we alleen toegang tot die sites toestaan gedurende een bepaalde tijd van de dag (10:00 tot 11:00 uur), alleen op maandag (M), woensdag (W) en vrijdag (F).

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

Anders wordt de toegang tot die domeinen geblokkeerd.

Toegang beperken door gebruikersauthenticatie

Squid ondersteunt verschillende authenticatiemechanismen (Basic, NTLM, Digest, SPNEGO en Oauth) en helpers (SQL-database, LDAP, NIS, NCSA, om er maar een paar te noemen). In deze tutorial gebruiken we basisauthenticatie met NCSA.

Voeg de volgende regels toe aan uw /etc/squid/squid.conf bestand.

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

Opmerking: in CentOS 7 is de NCSA-plug-in voor inktvis te vinden in /usr/lib64/squid/basic_nsca_auth, dus verander dienovereenkomstig in de bovenstaande regel.

Een paar verduidelijkingen:

  1. We moeten Squid vertellen welk authenticatiehulpprogramma we moeten gebruiken met de auth_param richtlijn door de naam van het programma op te geven (hoogstwaarschijnlijk /usr/lib/squid/ncsa_auth of /usr/lib64/squid/basic_nsca_auth), plus eventuele opdrachtregelopties (/etc/squid/passwd in dit geval) indien nodig.
  2. Het bestand /etc/squid/passwd wordt gemaakt via htpasswd, een hulpmiddel om basisauthenticatie via bestanden te beheren. Hiermee kunnen we een lijst met gebruikersnamen (en de bijbehorende wachtwoorden) toevoegen die Squid mogen gebruiken.
  3. credentialsttl 30 minuten vereist dat u uw gebruikersnaam en wachtwoord elke 30 minuten invoert (u kunt dit tijdsinterval ook in uren opgeven).
  4. hoofdlettergevoelig aan geeft aan dat gebruikersnamen en wachtwoorden hoofdlettergevoelig zijn.
  5. realm vertegenwoordigt de tekst van het authenticatiedialoogvenster dat zal worden gebruikt om te authenticeren bij inktvis.
  6. Ten slotte wordt er alleen toegang verleend als proxy-authenticatie (proxy_auth REQUIRED) slaagt.

Voer de volgende opdracht uit om het bestand te maken en om inloggegevens voor gebruiker gacanepa toe te voegen (laat de vlag -c weg als het bestand al bestaat).

htpasswd -c /etc/squid/passwd gacanepa

Open een webbrowser op de clientcomputer en probeer naar een bepaalde site te bladeren.

Als de authenticatie slaagt, wordt toegang verleend tot de aangevraagde bron. Anders wordt de toegang geweigerd.

Cache gebruiken om de gegevensoverdracht te versnellen

Een van de onderscheidende kenmerken van Squid is de mogelijkheid om bronnen die van internet worden opgevraagd op schijf te cachen om toekomstige verzoeken van die objecten door dezelfde client of anderen te versnellen.

Voeg de volgende richtlijnen toe aan uw squid.conf-bestand.

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

Een paar verduidelijkingen van de bovenstaande richtlijnen.

  1. ufs is het Squid-opslagformaat.
  2. /var/cache/squid is een map op het hoogste niveau waar cachebestanden worden opgeslagen. Deze directory moet bestaan en beschrijfbaar zijn door Squid (Squid zal deze directory NIET voor je aanmaken).
  3. 1000 is het aantal (in MB) dat in deze map moet worden gebruikt.
  4. 16 is het aantal submappen op het eerste niveau, terwijl 256 het aantal submappen op het tweede niveau is binnen /var/spool/squid.
  5. De maximum_object_size richtlijn specificeert de maximale grootte van toegestane objecten in de cache.
  6. refresh_pattern vertelt Squid hoe om te gaan met specifieke bestandstypen (.mp4 en .iso in dit geval) en hoe lang de gevraagde bestanden moeten worden bewaard objecten in cache (2880 minuten=2 dagen).

De eerste en tweede 2880 zijn respectievelijk de onder- en bovengrens voor hoe lang objecten zonder expliciete vervaltijd als recent worden beschouwd en dus door de cache worden bediend, terwijl 0% is het percentage van de ouderdom van het object (de tijd sinds de laatste wijziging) waarbij elk object zonder expliciete vervaltijd als recent wordt beschouwd.

Casestudy: een .mp4-bestand downloaden van 2 verschillende clients en de cache testen

De eerste client (IP 192.168.0.104) downloadt een 71 MB .mp4-bestand in 2 minuten en 52 seconden.

Tweede client (IP 192.168.0.17) downloadt hetzelfde bestand in 1,4 seconden!

Dat komt omdat het bestand in het tweede geval werd aangeboden vanuit de Squid-cache (aangegeven met TCP_HIT/200), in tegenstelling tot het eerste exemplaar, toen het rechtstreeks werd gedownload van internet (vertegenwoordigd door TCP_MISS/200).

De trefwoorden HIT en MISS, samen met de responscode 200 http, geven aan dat het bestand beide keren succesvol is weergegeven, maar dat de cache HIT is en gemist respectievelijk. Wanneer een verzoek om de een of andere reden niet door de cache kan worden afgehandeld, probeert Squid het verzoek vanaf internet te verwerken.

Conclusie

In dit artikel hebben we besproken hoe u een Squid-webcachingproxy instelt. U kunt de proxyserver gebruiken om inhoud te filteren met behulp van gekozen criteria, en ook om de latentie te verminderen (aangezien identieke binnenkomende verzoeken worden geserveerd vanuit de cache, die dichter bij de client staat dan de webserver die de inhoud daadwerkelijk aanbiedt, wat resulteert in snellere gegevensoverdracht) en netwerkverkeer (waardoor de hoeveelheid gebruikte bandbreedte wordt verminderd, waardoor u geld bespaart als u voor verkeer betaalt).

Misschien wilt u de Squid-website raadplegen voor verdere documentatie (controleer ook de wiki), maar aarzel niet om contact met ons op te nemen als u vragen of opmerkingen heeft. We zullen meer dan blij zijn om van u te horen!