Squid

Fra Wikipedia, den frie encyklopedi.

Squid er en mellomtjener (engelsk: «proxy server») for HTTP og FTP. Med den kan du ha en tjener som mellomlagrer data som lastes ned fra nettet, slik at du sparer båndbredde og gir brukerne en raskere «surfeopplevelse». Hvis du for eksempel har 100 klienter, som ikke bruker noen mellomtjener, i nettverket og alle skal inn på www.linuxguiden.no, må alle 100 klientene laste ned siden hver for seg. Hvis du bruker en mellomtjener, lastes siden ned kun den første gangen, og de 99 resterende klientene får siden lynraskt fra mellomtjeneren.

Innholdsfortegnelse

Installasjon

Mange distribusjoner har pakker av squid. Bruk pakkesystemet til å installere squid.

Konfigurasjon

Konfigurasjonsfila til squid utgjør faktisk en stor del av dokumentasjonen – hver konfigurasjonvariabel er dokumentert og fila inneholder mange eksempler. Den er som regel plassert i /etc/squid.conf eller i /etc/squid/squid.conf.

De fleste konfigurasjonsvariabler har brukbare standardverdier, men du må tilpasse «ACL»-listene – tilgangskontrollister.

Med et standardoppsett, vil squid lytte til port 3128, og kun tillatte tilkoblinger fra localhost.

Tilgangskontroll

En feilkonfigurert mellomtjener kan misbrukes av ondsinnede utenforstående, så det er viktig at du passer på å konfigurere tilgangslistene korrekt.

Det er som oftest hensiktsmessig å gi flere enn localhost tilgang til å bruke mellomtjenerne. For å gjøre dette, spesifiserer du hvordan squid skal gjenkjenne en klient – med kommandoen acl – og hva klienten skal ha lov til – med kommandoen http_access.

Det er svært mange måter å identifisere en klient med acl, for eksempel:

  • Hvilken IP-adresse eller hvilket nettverk klienten kommer fra eller skal til.
  • Hvilken port klienten kommer fra eller skal til.
  • Hvilken protokoll som brukes.
  • Ukedag og tid.
  • Kilde- og mottakerdomene.
  • Ident – brukernavnet til klienten.
  • Regulært uttrykk i URL-en.
  • Nettleser, m.m.

De to førstnevnte er mest relevante, men vi gir også noen eksempler på mer avansert bruk.

Hvis du har et lokalnett 10.0.0.0/24, vil følgende acl-kommando identifisere alle klienter i nettverket:

acl lokalnett src 10.0.0.0/24

Du kan så bruke http_access-kommandoen for å gi den tilgang til å bruke tjeneren:

http_access allow lokalnett
Rekkefølgen til de ulike http_access-linjene er viktig. Først gir du tilgang til de som skal ha tilgang, og så sperrer du alt annet.

squid.conf vil sannsynligvis ha en rekke standard http_access-linjer og så følgende:

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
http_access allow localhost
http_access allow lokalnett
# And finally deny all other access to this proxy
http_access deny all

Siste linje er svært viktig å få med – uten denne, risikerer du at boksen din blir en åpen proxy.

Forskjellige scenarioer

Gjennomsiktig mellomtjener

En gjennomsiktig mellomtjener (engelsk: transparent proxy) er en mellomtjener, som alle klientene går gjennom uten at klienten må konfigureres til å bruke mellomtjeneren. Et slikt oppsett er kjekt når du ikke har mulighet til – eller det er veldig tungvint – å konfigurere klientene til å bruke mellomtjeneren, eller når du vil tvinge klientene til å bruke den.

Teknikken går ut på å skrive om all trafikk til port 80 og sende den til mellomtjeneren din.

Først må du konfigurere mellomtjeneren så den kan brukes «gjennomsiktig». Finn og sett følgende verdier:

httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on


Du må fortsatt ha gyldige acl- og http_access-verdier.

Så til slutt, må du bruke følgende regel i brannmuren:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Den røde verdien må tilpasses. Les «Netfilter»-artikkelen for mer informasjon.

Blokker Internet Explorer

Internet Explorer har en ganske omdiskutert sikkerhetshistorie. Hvis du vil tvinge brukerne dine til å benytte seg av alternativer, kan du sette opp en gjennomsiktig mellomtjener som kun lar de benytte Internet Explorer til Windows Update.

Tilpass følgende eksempelkonfigurasjon:

useragent_log /var/log/squid/useragent.log # log browser id
referer_log /var/log/squid/referer.log
acl lokalnett src 10.0.0.0/24
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443 563     # https, snews
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
acl ie_browser browser ^Mozilla/4\.0 .compatible; MSIE #Nei takk.
acl bad_browser browser ^Gator # Spyware
acl windowsupdate dstdomain .windowsupdate.com # Må man, så må man...
acl windowsupdate dstdomain .windowsupdate.microsoft.com 
#Legg til slike for hver side som krever iexplore:
acl ie_exceptions dstdomain .nettbank.no # For dårlige sider
acl ie_exceptions2 dst 172.16.0.0/255.255.0.0 #Ditto
http_access deny bad_browser
http_access allow windowsupdate
http_access allow ie_exceptions
http_access allow ie_exceptions2
http_access deny ie_browser
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
http_access allow localhost
http_access allow lokalnett
http_access deny all
#Gjennomsiktig
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
deny_info ERR_IEBROWSER ie_browser #Informer hvorfor vi sperrer
ie_refresh on

Lag ei nettside som informerer brukeren om hvorfor Internet Explorer ikke kan brukes, med informasjon om hvor vedkommende kan få tak i en alternativ nettleser, og legg den i mappa der Squid oppbevarer informasjonssidene sine, stort sett /usr/share/squid/errors/English

Eksterne ressurser



Personal tools