door D.S. Oberoi <ds_oberoi(at)yahoo.com>
Over de auteur:
D.S. Oberoi woont in Jammu, India en heeft op dit moment wat problemen met
zijn internet verbinding door de politieke inrust in het gebied.
Vertaald naar het Nederlands door:
Hendrik-Jan Heins <hjh(at)passys.nl>
Inhoud:
|
Een Squid-Proxy Server opzetten
Kort:
Linux is synoniem voor Netwerken. Het wordt zowel in kantoren
al thuis gebruikt als bestands-, print- e-mail- en applicatie server
daarnaast wordt het ook steeds vaker gebruikt als proxy server.
Een proxy-server biedt internet toegang aan meerdere gebruikers tegelijk
door het delen van een enkele internet verbinding. Een goede proxy server
biedt ook de mogelijkheid om aanvragen te cachen, hierdoor wordt de
verbinding minder belast doordat bij een tweede aanvraag eerst de lokale
data wordt doorgegeven. Squid is een software pakket dat zowel proxy,
HTTP caching, ftp, gopher enz. ondersteunt. Bovendien ondersteunt het
SSL, toegangs controles, cachen van DNS en onderhoudt het een log bestand
waarin alle aanvragen worden bewaard. Squid is ook beschikbaar voor Windows-NT,
op Logi Sense.
Dit artikel is gericht op de basisprincipes van het opzetten van een proxy server
en de mogelijkheid om gebruikers een gecontroleerde webtoegang te bieden.
_________________ _________________ _________________
Is Squid geïnstalleerd ?
Squid's rpm pakket wordt meegeleverd bij RedHat 7.1 en wordt automatisch
geïnstalleerd als u kiest voor de "Network OS Installation" optie.
U kunt met het volgende commando controleren of het wel geïnstalleerd is:
rpm -q squid
De nieuwste versie van Squid kn altijd worden gevonden op de Squid Homepage
en andere mirror sites.
Squid kan met het volgende rpm commando worden geïnstalleerd op een systeem:
rpm -ivh squid-2.3.STABLE4-10.i386.rpm
Squid Configureren
De werking en het gedrag van Squid worden aangegeven door de instellingen in
het configuratie bestand, hier is dat "squid.conf".
Dit bestand kan meestal worden gevonden in de directory /etc/squid.
Het configuratie bestand van Squid is een nogal lang verhaal, het is
vele pagina's lang, maar het positieve hieraan is wel dat alle opties
duidelijk worden aangegeven en verklaard.
Het eerste dat moet worden ingesteld is de http_port, deze geeft aan
op welk socket adres Squid aanvragen van client systemen moet aannemen;
standaard staat dit op 3128, maar het mag door de gebruiker in een andere
waarde worden veranderd. Naast een poort waarde kan ook het IP adres van de
machine waar Squid op draait worden aangegeven:
http_port 192.168.0.1:8080
Met de bovenstaande invulling, zit Squid op IP adres 192.168.0.1 en op
poort adres 8080. Hier kan ieder ander poort adres worden opgegeven,
maar zorg er wel voor dat er geen andere applicatie op dat poortadres zit.
Met ongeveer glijkwaardige configuratie regels kunnen ook de poorten voor
andere services worden opgegeven.
Toegangscontrole
Door middel van toegangscontrole mechanismen, kan de toegang tot
internet worden gecontroleerd, vooral met betrekking tot tijdsduur,
tijdstip, cachen, toegang tot populaire websites of website groepen, enz.
De Squid toegangscontrole bestaat uit twee onderdelen, ACL elementen en
een toegangslijst. Een toegangslijst maakt toegang tot de service mogelijk
of juist onmogelijk.
Enkele belangrijke soorten ACL elementen worden hieronder genoemd
- src : Source (bron), ofwel het IP adres van clients
- dst : Destination(doel), ofwel de IP adressen van de betreffende server(s)
- srcdomain : Source, ofwel de domeinnaam van de client
- dstdomain : Destination, ofwel de domeinnaam van de server
- time : Tijd, dag, week, datum...
- url_regex : URL standaard uitdrukkingspatroon koppeling
- urlpath_regex: URL-path standaard uitdrukkingspatroon koppeling,
zonder protocol en naam van de gastheer
- proxy_auth : Gebruikers authorisatie met behulp van externe
processen
- maxconn : Maximum aantal verbindingen vanaf een enkel client IP
adres
Om deze controles te activeren, moet eerst een ACL worden gedefinieerd, en
daarna kan deze worden toegepast. Het format voor een ACL statement is:
acl acl_element_name type_of_acl_element
values_to_acl
Opmerking:
- acl_element_name kan een door de gebruiker gedefinieerde naam zijn die gegeven
is aan een ACL element.
- Geen twee ACL elementen mogen dezelfde naam hebben.
- Iedere ACL bestaat uit een lijst met waarden. Wanneer je op zoek bent naar een
overeenkomst, wordt voor meerdere waarden gebruik gemaakt van de "OR"-logica.
Met andere woorden: een ACL element wordt gezien als overeenkomstig zodra een van de
opgegeven waarden overeenkomt.
- Niet alle ACL elementen kunnen worden gebruikt in combinatie met alle soorten
toegangslijsten.
- Verschillende ACL elementen worden aangegeven op verschillende regels
en Squid combineerd deze en maakt er een lijst van.
Er zijn een aantal verschillende toegangslijsten beschikbaar. Degene die we hier gaan
gebruiken, zijn hieronder te vinden:
- http_access: Laat HTTP clients een verbinding maken via
de HTTP poort. Dit is de primaire toegangscontrole lijst.
- no_cache: Definieert het cachen van antwoorden op aanvragen.
Een toegangslijst regel bestaat uit "keywords" zoals "allow" of "deny" die
toegang tot een bepaald ACL element voor de service of een aantal services
regelt.
Opmerking:
- De regels worden gecontroleerd in de volgorde waarop ze zijn opgegeven en
de controle stopt zodra er een overeenkomst is gevonden.
- Een toegangslijst kan bestaan uit meerdere regels.
- Zodra geen van de regels overeenkomt, is de standaard actie het omgekeerde van
de laatste regel in de lijst; het is dus verstandig om duidelijk te zijn over
de standaard actie.
- Alle elementen van een toegangsregel zijn samengevoegd met "AND" en worden op
de volgende manier uitgevoerd:
http_access Action statement1 AND statement2 AND statement
OR.
http_access Action statement3
Multiple http_access statements worden gekoppeld via "OR" terwijl elementen
van een toegangsregel met "AND" worden gekoppeld
- Denk eraan dat regels altijd van boven naar beneden worden gelezen.
Terug naar de Configuratie
Standaard zal Squid geen toegang geven aan clients, om dit mogelijk
te maken moeten de toegangscontrole lijsten worden aangepast.
Je moet je eigen regels opstellen voor toegang. Bekijk het bestand
squid.conf en voeg de volgende regels toe boven "http_access deny all"
acl mynetwork 192.168.0.1/255.255.255.0
http_access allow mynetwork
mynetwork is de naam van de ACL en de volgende regel is de regel die
toe moet worden gepast op een bepaalde ACL, geheten "mynetwork".
192.168.0.1 is een referentie naar het netwerkadres met het
netmask 255.255.255.0.
mynetwork is in feite niets meer dan een naam voor een groep machines
in het netwerk en de volgende regel geeft de clients toegang.
De bovenstaande veranderingen samen met "http_port" is al voldoende
om Squid aan het werk te zetten. Na de veranderingen kan Squid met het
volgende commando worden gestart:
service squid start
Opmerking:
Squid kan ook automatisch worden gestart bij het opstarten door het aan te
zetten in ntsysv of setup (System Service Menu). Na iedere verandering
in het configuratie bestand, moet het draaiende Squid proces worden gestopt
om de nieuwe instellingen te activeren bij een herstart.
Deze twee stappen kunnen met de volgende commando's worden uitgevoerd:
- service squid restart of
- /etc/rc.d/init.d/squid restart
Client Machine Configuratie
Aangezien de client aanvraag vanaf een bepaalde poort van de proxy
server moet komen, moet de client zo worden ingesteld dat hij een aanvraag
doet op de juiste poort. Er wordt nu vanuit gegaan dat de machines al aangesloten
zijn op het lokale netwerk (LAN) (en al geldige IP adressen hebben) en de Linux server
kunnen pingen.
Voor Internet Explorer
- Ga naar "Tools" -> "Internet Options"
- Kies het "Connection" Tab-blad en klik op "LAN Setting"
- Vink de "Proxy Server" box aan en geef het IP adres van de proxy server
en het poortadres op (http_port address).
Voor Netscape Navigator
- Ga naar "Edit" -> "Preference" -> "Advanced" ->
"Proxies".
- Kies de "Manual Proxy Configuration" knop.
- Klik op de "View" knop &
- Geef het IP adres en de poort van de proxy server op (http_port address).
Toegangs Controle Gebruiken
Meervoudige toegangscontrole en regels bieden een zeer goede en flexibele
manier om de client toegang tot internet te beheren.
Voorbeelden van de meest voorkomende controles worden hieronder gegeven;
dit betekent echter niet dat dit de enige mogelijke toegangs controle is.
-
Laat alleen bepaalde machines het internet op
acl allowed_clients src 192.168.0.10
192.168.0.20 192.168.0.30
http_access allow allowed_clients
http_access deny !allowed_clients
Dit laat alleen machines met de volgende IP adressen op internet:
192.168.0.10, 192.168.0.20 en 192.168.0.30
De andere IP adressen (niet aangegeven) kunnen internet niet op.
-
Beperk de toegang tot bepaalde uren en voor bepaalde tijd
acl allowed_clients src
192.168.0.1/255.255.255.0
acl regular_days time MTWHF 10:00-16:00
http_access allow allowed_clients regular_days
http_access deny allowed_clients
Hiermee mogen de clients in netwerk 192.168.0.1
van maandag tot vrijdag van 10:00 uur tot 16:00 uur het internet op.
-
Meervoudige toegang voor verschillende clients
acl hosts1 src192.168.0.10
acl hosts2 src 192.168.0.20
acl hosts3 src 192.168.0.30
acl morning time 10:00-13:00
acl lunch time 13:30-14:30
acl evening time 15:00-18:00
http_access allow host1 morning
http_access allow host1 evening
http_access allow host2 lunch
http_access allow host3 evening
http_access deny all
De bovenstaande regel laat host1 zowel gedurende de ochtend als de
avonduren toe; terwijl host2 en host3 alleen tijdens de
lunch en 's avonds toegang hebben.
Opmerking:
Alle elementen van een toegangsregel worden met "AND" gekoppeld en
op de volgende manier uitgevoerd:
http_access Action statement1 AND staement2
AND statement OR.
Meervoudige http_access statements worden met "OR" gekoppeld, terwijl
elementen van een toegangs regel met "AND" worden gekoppeld; hierdoor kan
http_access allow host1 morning evening
nooit werken als ochtend en avond statement (morning AND evening),
aangezien dat nooit waar zou zijn en er daardoor geen actie zou worden
ondernomen.
-
Sites Blokkeren
Squid kan de toegang tot een bepaalde site of meerdere sites
die een bepaald woord bevatten, verbieden. Dit kan op de volgende manier
worden gedaan:
acl allowed_clients src
192.168.0.1/255.255.255.0
acl banned_sites url_regex abc.com *()(*.com
http_access deny banned_sites
http_access allow allowed_clients
Ditzelfde mechanisme kan ook worden gebruikt om toegang tot sites
die een bepaald woord bevatten, bijvoorbeeld "dummy" , "fake"...
acl allowed_clients src
192.168.0.1/255.255.255.0
acl banned_sites url_regex dummy fake
http_access deny banned_sites
http_access allow allowed_machines
Het is niet handig om alle woorden en site namen op te geven in het
configuratie bestand. Dit kan ook in een ander bestand worden ondergebracht
(bijvoorbeeld banned.list in de /etc directory) en ACL kan de gegevens
uit dit bestand halen en hiermee de toegang tot sites ontzeggen.
acl allowed_clients src
192.168.0.1/255.255.255.0
acl banned_sites url_regex "/etc/banned.list"
http_access deny banned_sites
http_access allow allowed_clients
-
Om het gebruik te optimaliseren
kan Squid het aantal verbindingen dat client machines mogen maken,
beperken met behulp van het "maxconn" element. Om gebruik te kunnen
maken van deze optie, moet "client_db feature" eerst worden ingeschakeld.
acl mynetwork 192.168.0.1/255.255.255.0
acl numconn maxconn 5
http_access deny mynetwork numconn
Opmerking:
maxconn ACL maakt gebruik van een "minder dan"-vergelijking. Deze ACL
wordt bereikt zodra het aantal verbindingen groter is dan de aangegeven
waarde. Dit is de belangrijkste reden waarom deze ACL niet wordt gebruikt
in samenwerking met de "http_access allow" regel.
-
De gegevens Cachen
Antwoord op de aanvragen wordt meteen gecached, dit is handig voor de
statistische gegevens. Het is niet nodig om cgi-bin of Servlet te cachen en
dit kan worden voorkomen door gebruik te maken van het "no_cache" ACL
element.
acl cache_prevent1 url_regex cgi-bin /?
acl cache_prevent2 url_regex Servlet
no_cache deny cache_prevent1
no_cache deny cache_prevent2
-
Maak je eigen Foutmeldingen
Het is mogelijk om je eigen foutmeldingen te maken met behulp van een
"deny"-regel, het gaat hier om de "deny_info" optie.
Standaard staan alle foutmeldingen van Squid in de directory
/etc/squid/errors. De foutmeldings directory kan worden ingesteld
met behulp van de "error_directory" optie. Je kunt zelfs de bestaande
foutmeldingen aanpassen.
acl allowed_clients src 192.168.0.1/255.255.255.0
acl banned_sites url_regex abc.com *()(*.com
http_access deny banned_sites
deny_info ERR_BANNED_SITE banned_sites
http_access allow allowed_clients
In het bovenstaande voorbeeld wordt er een speciaal bericht weergegeven
wanneer een gebruiker probeert een website te bereiken die niet getoond
mag worden. De bestandsnaam achter de optie "ERR_BANNED_SITE"
moet wel bestaan in de bovenstaande foutmeldingsdirectory.
Het foutmeldings bestand moet opgemaakt zijn in HTML format.
De hierboven genoemde voorbeelden zijn slechts enkele van de mogelijkheden,
en capaciteiten van ACL. Je kunt meer hierover vinden in de
FAQ sectie op de
Squid Home Pagina. Er is hier ook meer uitleg over breder gebruik te vinden en
een uitleg van andere ACL elementen en toegangselementen.
Log Bestanden
Alle log bestanden van Squid staan in de directory
/var/log/squid; hierin staan de cache log, toegangs (access) logs en
het store.log. Het bestand access.log bevat informatie over de aanvragen
van clients, activiteit en het beheert de opgave voor iedere HTTP
& ICP query die ontvangen wordt door de proxy server, het IP adres van
de clients, de aanvraag methode, het aangevraagde URL, enz... De gegevens
in dit bestand kunnen worden gebruikt om de toegangs aanvragen te
analyseren. Er zijn veel programma's als sarg,
calamaris en
Squid-Log-Analyzer
beschikbaar die de gegevens kunnen analyseren en rapporten kunnen genereren
(in HTML format). Er kunnen rapporten worden gegenereerd over gebruikers,
IP adressen, bezochte sites enz...
De locatie van deze bestanden kan ook worden veranderd met behulp van de
volgende opties:
cache_access_log For access.log
cache_log For cache.log
cache_store_log For store.log (Store manager)
pid_filename Squid process ID file name
Autorisatie Methoden
Squid kan met de standaard instelling gebruikers toelaten zonder authorisatie.
Om gebruikers te kunnen authoriseren (en wel of niet toe te laten), om
gebruik te maken van internet, biedt Squid de mogelijkheid van een authorisatie, maar
dan wel via een extern programma, waar een gebruikersnaam en wachtwoord voor vereist is.
Hiervoor moet er gebruik worden gemaakt van de "proxy_auth" ACL en van
"authenticate_program"; dit zorgt ervoor dat een gebruiker zich moet
authoriseren met gebruikersnaam en wachtwoord, voordat hij gebruik kan maken
van de verbinding. Er zijn verscheidene authorisatie programma's
beschikbaar die werken met Squid, dit zijn:
- LDAP : Gebruikt het Linux Lightweight Directory Access
Protocol
- NCSA : Gebruikt een NCSA-achtig gebruikersnaam en wachtwoordbestand
- SMB : Gebruikt een SMB server zoals SAMBA of Windows NT
- MSNT : Gebruikt het Windows NT authentication domain
- PAM : Gebruikt Linux Pluggable Authentication Modules
- getpwam : Gebruikt het Linux wachtwoord bestand.
Je moet aangeven welk authorisatie programma je wilt gebruiken en
dat kan via de optie "authenticate_program".
Zorg ervoor dat het het authorisatie programma dat je hier wilt gebruiken
al is geïnstalleerd en werkt.
De veranderingen in het squid.conf bestand moeten ook terug te vinden zijn in
"authenticate_program", /usr/local/bin/pam_auth.
acl pass proxy_auth REQUIRED
acl mynetwork src 192.168.0.1/255.255.255.0
http_access deny !mynetwork
http_access allow pass
http_access deny all
Hier wordt gebruik gemaakt van de PAM authorisatie module en alle gebruikers
moeten zich identificeren voordat ze toegang krijgen tot internet.
Opties als "authenticate_ttl" en "authenticate_ip_ttl" kunnen ook worden
gebruikt om het authorisatie gedrag aan te passen, en wel door na bepaalde
tijd opnieuw om een naam en wachtwoord te vragen.
Bronnen
Dit artikel is slechts het topje van de Squid-ijsberg; kijk voor meer
informatie op de volgende websites:
Talkback voor dit artikel
Elk artikel heeft zijn eigen talkback pagina. Daar kan je commentaar geven of commentaar van anderen lezen:
2003-09-29, generated by lfparser version 2.31