deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 1
Internet, Intranet & Webservices
9/5 Proxy-configuratie 9/5.1
Configuratie van de Squid-proxy
Bij de beveiliging van een netwerk spelen twee devices een bijzondere rol. Ten eerste is dat de firewall. Een firewall zorgt ervoor dat pakketjes bekeken worden om te beoordelen of er al dan niet geoorloofde inhoud in staat. Een firewall doet zijn werk simpel en snel, maar is niet in staat te kijken naar meer geavanceerde items, zoals gebruikersnaam en tijd van de dag. Voor dat doel hebt u een proxy nodig. Squid is zo’n proxy.
Drie redenen
9/5.1.1 Introductie Squid is een zeer veelzijdige proxy. Deze software wordt ingezet om drie verschillende redenen: • Standaard proxy-server Als standaard proxy-server wordt Squid gebruikt als proxy-cache. Dit heeft twee doelen: ten eerste om gegevens sneller van internet te laten ophalen en ten tweede voegt het beveiliging toe. Op deze wijze gebruikt, bevindt de proxy zich tussen de eindgebruiker en het internet. De gebruiker stuurt alle HTTPpakketjes naar de proxy en niet direct naar internet. Om dit te kunnen doen hebben de computers van de gebruikers niet eens een directe verbinding naar internet nodig. De proxy handelt vervolgens alle verkeer af en zorgt ervoor dat de door de gebruiker gevraagde gegevens van internet opgehaald worden. Vervolgens worden de gegevens lokaal in het cachegeheugen bewaard. De volgende keer dat een gebruiker dezelfde gegevens nodig heeft, hoeven deze
Novell Netwerkoplossingen, aanvulling 24
9/5.1-1
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 2
Proxy-configuratie
•
•
gegevens niet meer van internet opgehaald worden, maar kunnen ze direct vanuit het geheugen van de proxy aangeboden worden. Dit aspect van de Squidproxy wordt aangeduid als caching. Het voornaamste doel is dat deze manier van gebruik leidt tot een grotere transmissiesnelheid. Application Level Proxy Een gevolg van zijn rol als cache is dat de Squid-proxy kan controleren welke gebruiker wat doet. De Squidproxy kan regels toepassen bij het ophalen van gegevens. Deze regels worden toegepast in zogenaamde Access Control Lists (ACL’s). Voor deze toepassing wordt Squid aangeduid als Application Level Proxy. Web-accellerator Bij gebruik van Squid als web-accelerator – ook wel bekend als reverse proxy – gebeurt juist het omgekeerde. De proxy filtert dan het verkeer dat vanaf internet binnenkomt en naar de webserver van een organisatie toe gaat. Omdat alle inkomende verkeer via de proxy gaat, wordt op deze wijze een snelle cache opgebouwd vanwaaruit de pagina’s aangeboden kunnen worden. De configuratie van een webaccelerator is een verhaal apart en zal in dit hoofdstuk niet behandeld worden.
Naast de drie basismanieren om een proxy in te richten, zoals hier besproken, kan Squid ook in een hiërarchische configuratie opgenomen worden. Dit betekent dat verschillende proxy-servers met elkaar samenwerken om gegevens zo snel mogelijk aan de eindgebruiker beschikbaar te stellen. Een dergelijke configuratie heeft vooral zin als verschillende vestigingen in een bedrijf aan internet verbonden zijn, maar niet elke vestiging ook direct aan internet verbonden is. In dat geval kan op elke locatie een Squidproxy-server neergezet worden. De eindgebruikers commu-
9/5.1-2
Novell Netwerkoplossingen, aanvulling 24
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 3
Internet, Intranet & Webservices
niceren dan met de proxy-server op hun eigen site. Die proxy-server op zijn beurt neemt contact op met de centrale proxy-server, die het contact met internet voor zijn rekening neemt. Eventueel kunnen daar nog extra lagen proxy-servers tussen zitten. Op elk van deze proxy-servers kan een cache aangelegd worden, waardoor gegevens sneller bij de eindgebruiker afgeleverd kunnen worden. Ook de configuratie van een hiërarchische proxy-cache is een complexe taak die hier verder niet besproken wordt. Voordat u vol enthousiasme begint met de configuratie van een Squid-proxy-server is het belangrijk te weten dat Squid werkt in de hogere lagen van het OSI-model. Dit betekent dat Squid overweg moet kunnen met de protocollen die u aanbiedt. De belangrijkste van deze protocollen zijn HTTP en FTP. Andere protocollen kunnen dus niet met Squid overweg: u zult voor deze protocollen een aparte voorziening moeten treffen. 9/5.1.2 Installatie en initiële configuratie Uiteraard moet u de Squid-proxy installeren voordat u ermee aan het werk kunt. Hiervoor kunt u de volgende stappen uitvoeren: 1. Gebruik op Fedora de opdracht yum install squid of op SuSE de opdracht rug install squid om de Squidpackages van hun installatiebron te installeren. 2. Geef na installatie de opdracht chkconfig --list | grep squid om te zien of Squid al automatisch gestart wordt bij het opstarten. Het resultaat van deze opdracht kan er als volgt uit zien: [root@georgia ~]# chkconfig --list | grep squid squid 3:on
Novell Netwerkoplossingen, aanvulling 24
4:on
0:off
1:off
5:on
6:off
2:on
9/5.1-3
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 4
Proxy-configuratie
3.
4.
Als Squid nog niet automatisch gestart werd, gebruikt u de opdracht chkconfig squid on om ervoor te zorgen dat de service de volgende keer wel automatisch gestart wordt. Geef tot slot de opdracht service squid start om de Squid-proxy-server op te starten. U kunt nu overgaan tot de configuratiefase.
Nu de proxy-serversoftware geïnstalleerd is, kunt u beginnen met de configuratie. Dit doet u door het configuratiebestand /etc/squid/squid.conf te bewerken. In dit bestand treft u een behoorlijk aantal opties aan die gelukkig allemaal goed gedocumenteerd zijn. Voor gebruik van Squid als een normale proxy-server hoeft u maar een beperkt aantal instellingen aan te passen. Deze instellingen worden in een Squid-context aangeduid als tags. Deze tags kunnen onderverdeeld worden in verschillende categorieën: 1. network-tags; 2. tags voor de definitie van caching; 3. tags voor specificatie van logbestanden en cachedirectory’s; 4. optimalisatie-tags; 5. tags die time-outwaarden definiëren; 6. administratieve tags. Vergeet niet om ook de firewall voor Squid-verkeer te openen. De Squid-proxy doet normaliter zijn werk op poort 3128. Ad. 1 Network-tags De belangrijkste network-tag is http_port. Hiermee geeft u aan op welke poort de Squid-proxy moet luisteren. De standaardwaarde voor deze tag is poort 3128. Als er meer dan één netwerkkaart in uw server aanwezig is, kunt u Squid vertellen dat hij maar op één netwerkkaart moet
9/5.1-4
Novell Netwerkoplossingen, aanvulling 24
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 5
Internet, Intranet & Webservices
luisteren door bij deze tag ook specificiek het IP-adres van de betreffende netwerkkaart op te geven; bijvoorbeeld 192.168.1.10:3128. In veel gevallen wordt overigens door middel van deze tag de standaardpoort opnieuw ingesteld op poort 8080. Squid als router Het is een slecht idee om Squid in te zetten op een server die ook als router fungeert. Het is veel beter om Squid achter de firewall in de gedemilitariseerde zone neer te zetten. Dit is een deel van het netwerk waarop services voorkomen die voor de buitenwereld bereikbaar zijn, maar deze services staan wel achter de firewall. Daarnaast zijn ze gescheiden van het privénetwerk. Als u Squid op deze wijze inzet, is het ruim voldoende als één netwerkkaart gebruikt wordt. Ad. 2 Cache-instellingen Om op optimale wijze bestanden te kunnen cachen moet u aangeven waar en hoe de cachebestanden aangemaakt worden. Om te begrijpen hoe dit werkt, moet u zich realiseren dat Squid bestanden in het werkgeheugen kan cachen, maar ook op de harde schijf van de server. Werkgeheugen is uiteraard sneller, dus als snelheid van groot belang is, is het zaak om zoveel mogelijk werkgeheugen te reserveren. Daarnaast moet u echter in alle gevallen ook ruimte op de harde schijf van uw computer configureren voor caching, al was het alleen maar omdat u eens door de hoeveelheid beschikbaar werkgeheugen heen kunt raken. In onderstaande tabel vindt u een overzicht van de tags die voor dit doel beschikbaar zijn.
Novell Netwerkoplossingen, aanvulling 24
9/5.1-5
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 6
Proxy-configuratie
Tags cache_mem
cache_swap_low en cache_ swap_high
maximum_ object_size
minimum_ object_size
9/5.1-6
Betekenis Deze tag wordt gebruikt om aan te geven hoeveel werkgeheugen Squid moet reserveren voor de bestandscache. De standaardwaarde staat ingesteld op 8 MB en dit is vrijwel altijd veel te weinig. Op een server die speciaal is ingericht als Squid-proxy-server ligt het voor de hand juist het grootste deel van het werkgeheugen voor dit doel te gebruiken. Specificeer bijvoorbeeld op een server met 1 GB werkgeheugen een cache_mem van 512 MB. Op het moment dat de beschikbare hoeveelheid cachegeheugen bijna op is, kunt u deze tags gebruiken om automatisch bestanden uit de cache op te ruimen. Voor dit doel maakt u gebruik van het ‘least recently used’ algoritme. Dit betekent dat het item dat het langst in het cachegeheugen aanwezig is zonder gebruikt te zijn, als eerste verwijderd zal worden. Met de cache_swap_low tag (standaard ingesteld op 90%) wordt aangegeven wanneer begonnen moet worden met het opruimen van bestanden. Met de cache_swap_high tag wordt aangegeven wanneer dit opruimen wat nadrukkelijker moet gebeuren. Hiermee geeft u aan wat de maximale grootte is van objecten die in cache bewaard worden. De standaardinstelling is 4.096 KB. Met deze instelling kan bijvoorbeeld een ISO-bestand dat u gedownload hebt nooit in cache bewaard worden. Als u veel ruimte ter beschikking hebt, is het de moeite waard deze waarde veel hoger in te stellen. Hiermee stelt u de minimale grootte in voor een object dat in cache bewaard kan worden. De standaardinstelling is 0 bytes. Dit is een goede instelling omdat u er zo voor zorgt dat ook (heel) kleine bestanden toch in cache bewaard kunnen worden.
Novell Netwerkoplossingen, aanvulling 24
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 7
Internet, Intranet & Webservices
Tags Betekenis maximum_object_ Hiermee geeft u aan wat de maximale grootte is van een size_in_memory bestand dat in het werkgeheugen van uw server bewaard wordt. De standaardinstelling staat op 8 MB. Dit is een redelijke instelling als u inderdaad maar 8 MB geheugencache hebt. Als u 1 GB hebt, kunt u ook deze instelling veel hoger zetten. Ad. 3 Specificatie van logbestanden en cachedirectory’s Sommige tags worden gebruikt om aan te geven waar caching standaard plaats moet vinden. Ook kunt u aangeven hoe uw harddisk gebruikt moet worden om caching zo efficiënt mogelijk plaats te laten vinden. Hiervoor wordt een subdirectorystructuur aangemaakt die als een index gebruikt wordt. De standaardinstellingen zijn voor gemiddelde systemen; op een server die speciaal als cacheserver ingericht is, moet u overwegen de standaardinstellingen veel hoger te zetten. In onderstaande tabel vindt u een overzicht van de belangrijkste instellingen die betrekking hebben op logbestanden en cachedirectory’s. Tag cache_dir
Betekenis Deze tag, die heel veel opties kan hebben, wordt gebruikt om te bepalen waar en hoe cachebestanden in het bestandssysteem opgeslagen worden. Deze tag heeft de volgende opties: storage-format: hiermee wordt aangegeven welk bestandssysteem voor caching gebruikt moet worden. Squid heeft voor dit doel een aantal eigen bestandssystemen. Standaard vindt caching plaats in het UFS-formaat en dat voldoet in de meeste omstandigheden uitstekend. Als alternatief kunt u gebruikmaken van het AUFS-formaat. AUFS is ontworpen als verbetering op UFS, maar wordt nog niet breedschalig ingezet.
Novell Netwerkoplossingen, aanvulling 24
9/5.1-7
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 8
Proxy-configuratie
Tag
Betekenis dir: Hiermee specificeert u de directory waarin gecachet moet worden. Standaard wordt hiervoor gebruikgemaakt van /var/cache/squid. Als u intensief gebruik van de Squidser-vice verwacht, is het aan te raden voor dit doel een afzonderlijke directory aan te maken op een aparte partitie of misschien zelfs een aparte disk. size: met deze parameter geeft u de grootte aan van de cachedirectory. Standaard is die 100 MB – behoorlijk beperkt voor modern gebruik. L1-dir: Squid maakt altijd twee niveaus subdirectory’s aan in de cachedirectory. Het doel is om caching zo snel mogelijk te maken. Met L1-dir specificeert u het aantal subdirectory’s op het eerste niveau. De standaardinstelling is 16. Wij raden u aan deze standaardinstelling niet te wijzigen. L2-dir: hiermee wordt aangegeven hoeveel subdirectory’s op het tweede niveau aangemaakt worden. De standaardwaarde is 256 en dat voldoet goed in de meeste gevallen. Met al deze opties komt de tag cache_dir er bijvoorbeeld als volgt uit te zien: cache_dir ufs /var/log/squid 100 16 256. cache_access_log Elke keer dat een gebruiker via Squid een server op internet benadert, zal Squid hier een bericht over wegschrijven in het logbestand /var/log/squid/access.log. Dit is een vrij arbeidsintensief proces. Als uw server niet optimaal presteert, kunt u overwegen deze parameter de waarde none te geven om logging uit te zetten. Ook hier geldt dat als u veel logverkeer verwacht, het de moeite waard kan zijn om naar een aparte partitie te loggen. cache_log In dit logbestand wordt alle activiteit die niet direct op eindgebruikers betrekking heeft gelogd. De standaardlocatie hiervoor is het bestand /var/log/squid/cache.log.
9/5.1-8
Novell Netwerkoplossingen, aanvulling 24
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 9
Internet, Intranet & Webservices
Tag cache_store_log
Betekenis In dit gedetailleerde logbestand vindt u informatie over welke bestanden in cache zijn opgeslagen en hoelang ze daarin gezeten hebben. Dit logbestand is nuttig als u de prestaties van uw server wilt analyseren en optimaliseren. Wij raden u vanwege de negatieve impact op de prestaties aan deze parameter standaard uit te laten en alleen aan te zetten als u hem ook echt nodig hebt.
In de cache access log ziet u precies wie wanneer wat gedaan hebt.
Ad. 4 Optimalisatie van performance In sommige gevallen heeft Squid behoorlijk veel werk te doen. Daarom is het belangrijk om parameters te gebruiken die ervoor zorgen dat dit werk zo efficiënt mogelijk verzet wordt. De onderstaande tabel geeft een overzicht van tags die voor dit doel beschikbaar zijn.
Novell Netwerkoplossingen, aanvulling 24
9/5.1-9
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 10
Proxy-configuratie
Tag request_header _max_size
Betekenis Hiermee wordt aangegeven wat de maximale grootte is van een HTTP-header die Squid zal accepteren. Omdat HTTPheaders sowieso nooit groter mogen worden dan 10 KB, raden wij u aan de standaardwaarde 10 KB niet te veranderen. request_body_ Met deze enigszins gevaarlijke tag stelt u de maximale max_size grootte voor de payload (inhoud) van een HTTP-pakketje in. Omdat sommige pakketjes een grote inhoud kunnen hebben (denk maar aan een download van een bestand) voldoet de standaardwaarde 0 in de meeste gevallen uitstekend. quick_abort_min, Met deze drie tags geeft u aan wat er moet gebeuren als quic_abort_max, een file-transfer onderbroken wordt. U kunt deze tags quick_abort_pct gebruiken om aan te geven dat een download door moet gaan, zelfs als deze door de gebruiker afgebroken is. Vooral voor eindgebruikers kan dit een heel nuttige optie zijn. Als u de juiste instellingen geeft, kan een gebruiker bijvoorbeeld een download van een groot ISO-bestand opstarten en even laten lopen. Vervolgens breekt de gebruiker de download af, maar gaat de proxy-server er wel gewoon mee door. De volgende keer dat de gebruiker de download opnieuw start, kan deze direct vanuit het werkgeheugen van de proxy-server gehonoreerd worden. In dat geval moet de maximum_object_size tag wel staan ingesteld zodat het grote bestand volledig gecachet kan worden! De standaardwaarden voor deze abort-tags staan te hoog: wij raden u aan ze veel lager in te stellen om ze op bovenstaande wijze te kunnen gebruiken. Denk bijvoorbeeld aan een quick_abort_pct van 2%.
9/5.1-10
Novell Netwerkoplossingen, aanvulling 24
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 11
Internet, Intranet & Webservices
Tag negative_ttl
positive_dns_ttl negative_dns_ttl
Betekenis Hiermee bepaalt u hoelang een HTTP 404 Not Found-foutmelding gecachet moet worden. De standaardinstelling is 5 minuten. Houd er rekening mee dat deze foutmelding heel vaak gegenereerd wordt omdat er een paar pakketjes niet overgekomen zijn. De volgende keer dat de gebruiker het opnieuw zou proberen, komt het vaak alsnog goed. Daarom raden wij u aan deze tag de waarde 0 te geven zodat deze feature helemaal uitgezet wordt. Hiermee geeft u aan hoelang DNS-entries in cache bewaard worden. Standaard is dat zes uur. Geeft aan hoelang onsuccesvolle pogingen om DNSnamen te achterhalen gecachet moeten worden. De standaardwaarde is 1 minuut en dat voldoet in de meeste gevallen prima. Ad. 5 Time-outinstellingen Een drukke server kan maar een beperkt aantal actieve verbindingen tegelijk aan. Als u de beschikbare verbindingen niet wilt verspillen, is het aan te raden om een beperking in te stellen die ervoor zorgt dat niet-gebruikte verbindingen vanzelf verbroken worden. In onderstaande tabel vindt u een overzicht van de tags die voor dit doel beschikbaar zijn.
Tag connect_timeout
request_timeout
Betekenis Hiermee wordt aangegeven hoelang het duurt voordat een verbinding verbroken wordt. De standaardinstelling is 2 minuten. Deze tag geeft aan hoelang Squid blijft wachten op HTTPverkeer nadat een verbinding met succes is opgebouwd. De standaardwaarde is 5 minuten; dit zou in de meeste gevallen voldoende moeten zijn. Als echter de proxy-server heel zwaar belast wordt, zou u moeten overwegen deze instelling lager te zetten zodat beschikbare bandbreedte niet verspeeld wordt.
Novell Netwerkoplossingen, aanvulling 24
9/5.1-11
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 12
Proxy-configuratie
Tag shutdown_ lifetime
Betekenis Gebruik deze tag om aan te geven hoelang het duurt voordat Squid reageert op een SIGTERM- of SIGHUP-signaal. De standaardwaarde staat ingesteld op 30 seconden. Dit betekent dat Squid er maximaal 30 seconden over zal doen om volledig afgesloten te worden. Ad. 6 Algemene instellingen Tot slot van dit overzicht van tags volgen nu nog twee algemene instellingen die regelmatig gebruikt worden:
Tag cache_mgr
cache_effective _user
Betekenis Hiermee geeft u het e-mailadres van de beheerder van de Squid-server. Gebruikers zien dankzij deze tag hoe ze de beheerder van de Squid-server kunnen vinden in het geval zich een serieus probleem voordoet. Om zijn werk te kunnen doen heeft Squid permissies nodig. Daarvoor maakt de Squid-server gebruik van een gebruikersaccount. Met deze instelling geeft u aan welk gebruikersaccount voor dit doel gebruikt wordt; meestal is dat de gebruiker Squid. Zorg er in elk geval voor dat u nooit Squid als root gebruikt! 9/5.1.3 Squid beveiligen met ACL’s Op basis van de hiervoor besproken tags moet u in staat zijn een werkende Squid-proxy-server in te richten. Aan één aspect is echter nog geen aandacht besteed: beveiliging. Squid biedt geavanceerde mogelijkheden voor beveiliging. U kunt bijvoorbeeld verbindingen toestaan of tegenhouden op basis van de tijd van de dag, het adres van de afzender, het adres van de uiteindelijke bestemming, de gebruiker die de verbinding op wil zetten en meer. Voor al deze opties moet u als beheerder Access Control Lists (ACL’s) definiëren. Dit doet u door twee verschillende tags aan te maken. Om te beginnen is er de ACL-
9/5.1-12
Novell Netwerkoplossingen, aanvulling 24
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 13
Internet, Intranet & Webservices
tag, waarmee u een groep aanmaakt op basis van een bepaald criterium. Vervolgens gebruikt u de http_accesstag om aan te geven wat leden van die ‘groep’ mogen. Hieronder volgt een voorbeeld: acl all src 0.0.0.0/0.0.0.0 acl allowed src 10.0.0.0/24 http_access allow allowed http_access deny all
Tegengehouden
Let erop dat op veel distributies alle verkeer tegengehouden wordt na installatie. Om gebruikers in staat te stellen uw proxy-server te gebruiken, moet u ACL’s aanmaken waarin dit gespecificeerd wordt! In het voorgaande ziet u dat als eerste door middel van de ACL-tag twee groepen gebruikers gedefinieerd worden. Om te beginnen is dat de groep ‘all’. Deze groep wordt herkend op basis van het source-adres 0.0.0.0/0.0.0.0, met andere woorden: alle IP-adressen. Daarna is er een groep met de naam ‘allowed’. Deze wordt gedefinieerd als de IP-adressen in het netwerk 10.0.0.0/24. Vervolgens worden de http_access-tags gebruikt om iets met deze twee groepen te doen. In de eerste regel wordt toegang verleend aan iedereen die tot de groep ‘allowed’ behoort. Vervolgens wordt toegang ontzegd aan alle andere IP-adressen. Let er bij het werken met ACL’s op dat de regels van boven naar beneden doorgenomen worden. Op het moment dat een gebruiker een regel tegenkomt die voor hem van toepassing is, wordt deze regel toegepast en wordt ook niet meer verder gekeken. Om die reden is het aan te raden om ook altijd een policy te definiëren. Deze policy geeft aan wat er moet gebeuren voor alle gebruikers waarvoor niet een specifieke regel bestaat.
Novell Netwerkoplossingen, aanvulling 24
9/5.1-13
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 14
Proxy-configuratie
Criteria in ACL
In het voorgaande voorbeeld hebt u gezien dat de ACL gebaseerd was op het source-IP-adres. Er kunnen echter veel meer criteria in de ACL gebruikt worden: • src: wordt gebruikt om te verwijzen naar het sourceadres van een node. U kunt verwijzen naar een afzonderlijk IP-adres, een reeks IP-adressen of een compleet subnet. Een voorbeeld van een reeks is 192.168.1.10-192.168.1.20/32. Let op de toevoeging van het subnetmasker met /32: dit zorgt ervoor dat adressen buiten de reeks sowieso uitgesloten worden. • dst: dit is het adres van de bestemming. Bij gebruik op internet is dit niet echt een nuttige tag: IP-adressen zijn immers aan verandering onderhevig. Als u echter voor gebruikers in een privénetwerk toegang wilt ontzeggen aan een host in de DMZ, is dit een nuttige tag. Hieronder ziet u een voorbeeld:
alc protected_host dst 10.0.0.10/32 acl private_network src 10.0.10.0/24 http_access deny protected_host !private_network
• •
•
9/5.1-14
srcdomain: wordt gebruikt om te verwijzen naar een afzender op basis van een DNS-domeinnaam. dstdomain: wordt gebruikt om te verwijzen naar een bestemming op basis van een DNS-domeinnaam. In tegenstelling tot de dst-tag is deze tag wel heel nuttig. time: gebruik deze tag om te verwijzen naar een dag en tijdstip. U kunt een dag van de week specificeren, een reeks dagen, of de specificatie van de dag van de week gewoon weglaten. Hieronder ziet u een paar voorbeelden:
Novell Netwerkoplossingen, aanvulling 24
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 15
Internet, Intranet & Webservices
acl toolate time 20:00-6:00 acl weekend time A-S 0:01-24:00 acl notondriday time F 16:00-24:00
Bij een verwijzing naar de dag van de week worden de volgende afkortingen gebruikt: - maandag: M - dinsdag: T - woensdag: W - donderdag: H - vrijdag: F - zaterdag: A - zondag: S •
• • •
url_regexp: gebruik dit type om te kijken naar een tekenreeks (een zogenaamde reguliere expressie) in een RUL. Gebruik bijvoorbeeld acl sec url_regex “sex” om iets te doen met alle sites waarin het woord sex ergens in de URL voorkomt. Dit type ACL’s is echter niet bepaald feilloos en kan leiden tot onverwacht gedrag. Wat denkt u bijvoorbeeld van de gebruiker die naar de website van de Friese gemeente Sexbierum wil gaan op http://www.sexbierum.nl. (Het wordt natuurlijk helemaal catastrofaal voor onze Friese vrienden als u daarnaast ook een url_regexptag hebt die filtert op het woord bier.) port: gebruik dit type om toegang op gespecificeerde poorten tegen te houden. proto: hiermee verwijst u naar specifieke protocollen. reg_mime_type: dit type ACL wordt gebruikt om toegang tot specifieke bestanden tegen te houden. U kunt het bestandstype bepalen door te kijken naar het MIME-type. Denk bijvoorbeeld aan een ACL als acl mp3 reg_mime_type “audio/mpeg”.
Novell Netwerkoplossingen, aanvulling 24
9/5.1-15
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 16
Proxy-configuratie
Nadat u de ACL’s gedefinieerd hebt, is het tijd om de http_access-tags te specificeren die gebruikmaken van een ACL. U kunt in een http_access-tag naar één enkele ACL verwijzen, maar het is ook mogelijk gelijktijdig naar meerdere ACL’s te verwijzen. U hebt hiervan reeds een voorbeeld gezien in http_access deny protected_host !private_network, waarmee u ervoor zorgde dat toegang tot protected_host tegengehouden werd voor alle hosts die niet voorkomen in private_network. Tot besluit van het onderwerp ACL’s willen we nogmaals melden dat hoe complex een lijst van ACL’s en http_accesstags ook mag zijn, u altijd moet besluiten met een standaardpolicy. Deze policy bepaalt immers wat er moet gebeuren als er geen match gevonden is voor een specifiek pakketje. Om die reden raden wij u aan om de lijst met http_access-tags altijd te besluiten met http_access deny all. Vergeet echter niet dat hiervoor wel een ACL nodig is met de naam all!
Drie manieren
9/5.1-16
9/5.1.4 Configuratie van gebruikersauthenticatie Naast de mogelijkheid om het pakketje zelf te bekijken op wie het verstuurd heeft en waar het naartoe gaat, is het ook mogelijk gebruikersauthenticatie te doen met Squid. Het enige wat hiervoor nodig is, is een browser die ondersteuning biedt voor authenticatie en tegenwoordig kan iedere browser hiermee overweg. In een Squid-omgeving zijn er drie manieren waarop proxy en browser gegevens met elkaar uit kunnen wisselen: • Basic: de gebruikersnaam en het bijbehorende wachtwoord worden in clear-text naar de proxy verstuurd. • Digest: wachtwoorden worden in dit geval niet in clear-text verstuurd, maar er wordt een digest verstuurd. Dit is een geheim ‘getal’ dat afgeleid is van
Novell Netwerkoplossingen, aanvulling 24
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 17
Internet, Intranet & Webservices
•
het wachtwoord. Momenteel wordt deze methode nog niet goed door Squid ondersteund. NTLM: deze methode werkt met NTLM hashes die ook in een Windows-omgeving gebruikt worden. Het probleem hiermee echter is dat de methode niet door het HTTP-protocol ondersteund wordt: u kunt ook hier dus maar beter geen gebruik van maken.
Zoals u ziet is er in de huidige versie van Squid dus maar één methode die echt werkt en dat is Basic-authenticatie. Om die reden bespreken we hier verder hoe deze methode in elkaar zit.
PAM
Als authenticatie ingesteld wordt op de Squid-proxy, is het niet de proxy zelf die de authenticatie afhandelt, maar een extern programma. U kunt bijvoorbeeld gebruikmaken van PAM om authenticatie af te handelen. Het voordeel hiervan is dat PAM heel flexibel is en gebruikt kan worden om te authenticeren tegen elke authenticatiebron die mogelijk is. Standaard zal in /etc/passwd en /etc/shadow gekeken worden naar gebruikersgegevens, maar u kunt PAM bijvoorbeeld ook instrueren dat gebruikgemaakt moet worden van een OpenLDAP-server. Bij de configuratie van authenticatie in Squid moet u zich één ding goed realiseren: de communicatie zal namelijk in plain-text plaatsvinden. Dit is niet echt belangrijk als de proxy-server en de authenticatiebron op dezelfde server voorkomen. Plaats bijvoorbeeld een replica van de OpenLDAP-server die u voor authenticatie gebruikt op de server waar Squid ook gebruikt wordt. Als gegevens wel over het netwerk verstuurd worden, moet u gebruikmaken van digest_pw_auth om op basis van digests aan te melden. Het nadeel van deze methode is dat u op de Squidserver zelf een bestand aan moet maken waarin zowel
Novell Netwerkoplossingen, aanvulling 24
9/5.1-17
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 18
Proxy-configuratie
gebruikersnamen als wachtwoorden in leesbare vorm vermeld staan. De beste methode om het probleem van onveilige authenticatie op te lossen is door gebruik te maken van een SSH- of SSL-tunnel. Om Squid te laten authenticeren op basis van PAM, zijn drie tags nodig: • auth_param: gebruik deze tag om te verwijzen naar het programma dat voor de authenticatie gebruikt wordt. • acl: maakt een ACL om groepen en gebruikers te definiëren. • http_access: gebruik deze tag om aan te geven hoe geauthenticeerde gebruikers toegang hebben. Om te beginnen hebt u dus de auth_param-tags nodig. De vier regels hieronder zorgen ervoor dat authenticatie plaats kan vinden op basis van een PAM-configuratie: auth_param basic program /usr/sbin/pam_auth auth_param basic children 5 auth_param basic realm Squid Proxy-caching web server auth_param basic credentialsttl 4 hours
In de eerste regel wordt het PAM-programma aangewezen als het programma dat authenticatie af moet handelen. Vervolgens ziet u een specificatie van het maximaal aantal authenticatieprocessen dat gelijktijdig gestart mag worden. Alleen op zeer zwaar belaste Squid-servers zijn hiervoor meer dan vijf gelijktijdige processen nodig; overweeg deze parameter op te hogen als gebruikers beginnen te klagen dat het erg lang duurt om aan te melden. Vervolgens wordt op de derde regel het authentication realm gedefinieerd. Dit is een specificatie van wat er precies beschermd moet worden door middel van authentica-
9/5.1-18
Novell Netwerkoplossingen, aanvulling 24
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 19
Internet, Intranet & Webservices
tie. Deze parameter moet altijd de waarde Squid proxycaching webserver hebben. Tot slot bepaalt de vierde regel hoelang de Squid-server credentials moet bewaren. De standaardwaarde is twee uur. Dit betekent dat na verloop van die twee uur de gebruiker weer opnieuw de loginnaam en het wachtwoord in moet voeren. In veel gevallen wordt dit als hinderlijk ervaren; daarom kunt u overwegen deze parameter iets op te hogen door hem zoals in het voorbeeld op vier uur te zetten. Nadat u aangegeven hebt dat PAM gebruikt moet worden als authenticatiemechanisme, moet een PAM-bestand voor Squid aangemaakt worden. Waarschijnlijk bestaat dit PAMbestand overigens al als /etc/pam.d/squid. De volgende twee regels zorgen er in dit bestand voor dat authenticatie afgehandeld wordt op het lokale passwd-bestand op uw server: auth
required
pam_unix2.so
account
required
pam_unix2.so
Als er ook een LDAP-server beschikbaar is voor authenticatie, is het vrij eenvoudig dit PAM-bestand aan te passen. Zeker omdat er in de LDAP-gebruikersaccounts zelf geen extra aanpassingen nodig zijn – als uw LDAP-gebruiker lokaal op Linux aan kan loggen, kan hij ook op Squid aanloggen. In het volgende voorbeeld ziet u hoe het authenticatieproces eerst zal proberen aan te loggen op de LDAPserver en alleen als dat niet lukt, het ook nog eens lokaal op de Linux-machine zal proberen: auth
sufficient
pam_ldap.so
auth
required
pam_unix2.so
account
sufficient
pam_ldap.so
account
required
pam_unix2.so
Novell Netwerkoplossingen, aanvulling 24
9/5.1-19
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 20
Proxy-configuratie
Nu u het authenticatiemechanisme gedefinieerd hebt, moet u ook een ACL aanmaken voor gebruikersnamen. Deze ACL kan er bijvoorbeeld als volgt uit zien: alc allowed_users proxy_auth linda stephanie
In dit voorbeeld worden gebruikers linda en stephanie aangewezen als vertrouwde gebruikers. Dit betekent dat zij welkom zijn op de Squid-server om deze te gebruiken. In veel gevallen is het echter niet nodig om alleen specifieke gebruikers toe te staan en zult u alle gebruikers toe willen laten, als ze maar met succes geauthenticeerd zijn. Dit bewerkstelligt u door gebruik te maken van REQUIRED in plaats van de naam van specifieke gebruikers: acl all_users proxy_auth REQUIRED
Op basis van bovenstaande twee regels kunt u bijvoorbeeld een omgeving definiëren waarin linda en stephanie toegang hebben, terwijl alle andere gebruikers juist geen toegang krijgen: http_access allow allowed_users http_access deny all_users
Zeker als u ook gebruikmaakt van gebruikersauthenticatie, kan het totaal van toegangsregels op uw Squid-proxy behoorlijk complex worden. Dit is speciaal het geval omdat altijd de eerste regel toegepast zal worden en de proxy daarna niet verder meer zal kijken. Om die reden zal bijvoorbeeld de volgende combinatie niet lukken als u ervoor wilt zorgen dat alleen allowed_users die afkomstig zijn van trusted_net toegang krijgen, en alle anderen niet:
9/5.1-20
Novell Netwerkoplossingen, aanvulling 24
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 21
Internet, Intranet & Webservices
http_access allow allowed_users http_access allow trusted_net http_access deny all
Het doel namelijk van deze regels is om alleen gebruikers toegang te geven die van trusted_net afkomstig zijn. In het voorgaande voorbeeld echter zal ook een gebruiker die geen allowed_user is, maar wel op een trusted_net zit, toegang krijgen. Om dit probleem op te lossen moet u meerdere factoren in één http_access-statement combineren. Hieronder ziet u hoe u dit kunt doen: http_access allow allowed_users trusted_net http_access deny all
Black- and whitelists
9/5.1.5 Squid en URL-filtering Een van de nuttigste functies van een proxy is dat deze een URL kan analyseren waar een gebruiker naartoe wil gaan. Om dit op een zinnige manier te doen raden wij u aan gebruik te maken van URL-blacklists en URL-whitelists. Een blacklist is een lijst met sites waarvan de beheerder niet wil dat ze bezocht worden. Een whitelist is een lijst met sites die juist wel toegestaan zijn. Welke van deze twee gebruikt wordt, hangt af van de beveiligingspolicy van het betreffende bedrijf. In een goed beveiligde omgeving wordt toegang tot alles tegengehouden, tenzij het expliciet is toegestaan. In de meeste omgevingen echter is het nuttiger te verwijzen naar sites die niet toegestaan zijn. Dit kan op basis van een blacklist gebeuren. Om naar zo’n blacklist te verwijzen wordt het ACL-type url_regex gebruikt met de optie -i:
acl forbidden url_regex =i “/etc/squid/blacklist”
Novell Netwerkoplossingen, aanvulling 24
9/5.1-21
deel 9_5_1-AV24.qxp:deel 8_2_11-AV20
28-06-2007
11:55
Pagina 22
Proxy-configuratie
Nu kan de beheerder zelf natuurlijk de blacklist gaan definiëren, maar dat is niet echt handig. Om die reden is het nuttiger om te gebruiken blacklists aan te schaffen op sites die hiervoor speciaal in het leven geroepen zijn, zoals www.squidguard.org/blacklist. 9/5.1.6 Tot slot In deze paragraaf hebt u geleerd hoe u Squid kunt gebruiken om uw netwerk extra te beveiligen. Squid kan kijken naar zeer diverse criteria als tijd van de dag, source-adres, bestemming, URL of gebruikersnaam en op basis van die gegevens bepalen of al dan niet toegang verleend wordt. Daarnaast zorgt een goed geconfigureerde Squid-proxy er ook voor dat verkeer sneller afgehandeld wordt.
9/5.1-22
Novell Netwerkoplossingen, aanvulling 24