33.5. Die Konfigurationsdatei /etc/squid/squid.conf

Alle Einstellungen zum Squid Proxyserver sind in der Datei /etc/squid/squid.conf vorzunehmen. Um Squid erstmalig starten zu können, sind darin keine Änderungen erforderlich, der Zugriff von externen Clients ist jedoch zunächst gesperrt. Für localhost ist der Proxy freigegeben und als Port wird standardmäßig 3128 verwendet. Die Optionen sind ausführlich und mit vielen Beispielen in der vorinstallierten /etc/squid/squid.conf dokumentiert. Annähernd alle Einträge sind am Zeilenanfang durch ein #-Zeichen auskommentiert; am Zeilenende befinden sich die relevanten Spezifikationen. Die angegebenen Werte entsprechen fast immer den voreingestellten Werten, so dass das Entfernen des Kommentarzeichens, ohne den Parameter der Option zu ändern, bis auf wenige Ausnahmen keine Wirkung hat. Es empfiehlt sich, das Beispiel stehen zu lassen und die Option mit dem geänderten Parameter in einer Zeile darunter neu einzufügen. So kann man die voreingestellten Werte und Änderungen problemlos nachvollziehen.

[Tip]Konfigurationsdatei nach Update anpassen

Hat man ein Update von einer älteren Squid-Version durchgeführt, ist es unbedingt zu empfehlen, die neue /etc/squid/squid.conf zu verwenden und nur die Änderungen von der ursprünglichen Datei zu übernehmen. Versucht man die alte squid.conf weiter zu verwenden, läuft man Gefahr, dass die Konfiguration nicht mehr funktioniert, da Optionen immer wieder geändert werden und neue hinzukommen.

33.5.1. Allgemeine Konfigurations-Optionen (Auswahl)

http_port 3128

Das ist der Port, auf dem Squid auf Anfragen der Clients lauscht. Voreingestellt ist 3128, gebräuchlich ist auch 8080. Es ist möglich, hier mehrere Portnummern, durch Leerzeichen getrennt, anzugeben.

cache_peer hostname type proxy-port icp-port

Hier kann man einen übergeordneten Proxy als „Parent“ eintragen, zum Beispiel wenn man den des Providers nutzen will. Als hostname trägt man den Namen bzw. die IP-Adresse des zu verwendenden Proxys und als type parent ein. Für proxy-port trägt man die Portnummer ein, die der Betreiber des Parent auch zur Verwendung im Browser angibt, meist 8080. Den icp-port kann man auf 7 oder 0 setzen, wenn man den ICP-Port des Parent nicht kennt und die Benutzung dieses Ports mit dem Provider nicht vereinbart wurde. Zusätzlich sollte man dann noch default und no-query nach den Portnummern angeben, um die Verwendung des ICP-Protokolls ganz zu unterbinden. Squid verhält sich dann gegenüber dem Proxy des Providers wie ein normaler Browser.

cache_mem 8 MB

Dieser Eintrag gibt an, wie viel Arbeitsspeicher von Squid für das Cachen maximal verwendet wird. Voreingestellt sind 8 MB.

cache_dir ufs /var/cache/squid 100 16 256

Der Eintrag cache_dir gibt das Verzeichnis an, in dem alle Objekte auf Platte abgelegt werden. Die Zahlen dahinter geben den maximal zu verwendenden Plattenplatz in „MB“ und die Anzahl der Verzeichnisse in erster und zweiter Ebene an. Den Parameter ufs sollte man unverändert lassen. Voreingestellt sind „100 MB“ Plattenplatz im Verzeichnis /var/cache/squid zu belegen und darin 16 Unterverzeichnisse anzulegen, die jeweils wiederum 256 Verzeichnisse enthalten. Bei Angabe des zu verwendenden Plattenplatzes sollte man genügend Reserven lassen, sinnvoll sind Werte zwischen 50 und maximal 80 Prozent des verfügbaren Platzes. Die beiden letzten Zahlen für die Anzahl der Verzeichnisse sollte man nur mit Vorsicht vergrößern, da zu viele Verzeichnisse auch wieder auf Kosten der Performance gehen können. Hat man mehrere Platten, auf die der Cache verteilt werden soll, kann man entsprechend viele cache_dir-Zeilen eintragen.

cache_access_log /var/log/squid/access.log

Pfadangabe für Protokoll-Dateien.

cache_log /var/log/squid/cache.log

Pfadangabe für Protokoll-Dateien.

cache_store_log /var/log/squid/store.log

Pfadangabe für Protokoll-Dateien. Diese drei Einträge geben den Pfad zur Protokolldatei von Squid an. Normalerweise wird man daran nichts ändern. Wird der Squid stark beansprucht, kann es sinnvoll sein, den Cache und die Protokoll-Dateien auf verschiedene Platten zu legen.

emulate_httpd_log off

Ändert man diesen Eintrag auf on, erhält man lesbare Protokoll-Dateien. Allerdings kommen manche Auswerteprogramme damit nicht zurecht.

client_netmask 255.255.255.255

Mit diesem Eintrag kann man die protokollierten IP-Adressen in den Protokoll-Dateien maskieren, um die Identität der Clients zu verbergen. Trägt man hier 255.255.255.0 ein, wird die letzte Stelle der IP-Adresse auf Null gesetzt.

ftp_user Squid@

Hiermit kann man das Passwort setzen, welches Squid für den anonymen FTP-Login verwenden soll. Es kann aber sinnvoll sein, hier eine gültige E-Mail-Adresse in der eigenen Domain anzugeben, da einige FTP-Server diese auf Gültigkeit überprüfen.

cache_mgr webmaster

Eine E-Mail-Adresse, an die Squid eine Nachricht schickt, wenn er unerwartet abstürzt. Voreingestellt ist webmaster.

logfile_rotate 0

Squid ist in der Lage, die gesicherten Protokoll-Dateien zu rotieren, wenn man squid -k rotate aufruft. Die Dateien werden dabei, entsprechend der angegebenen Anzahl, durchnummeriert, und nach Erreichen des angegebenen Wertes wird die jeweils älteste Datei wieder überschrieben. Dieser Wert steht standardmäßig auf 0, weil das Archivieren und Löschen der Protokoll-Dateien bei SUSE LINUX von einem eigenen Cronjob durchgeführt wird, dessen Konfiguration man in der Datei /etc/logrotate/squid findet.

append_domain <domain>

Mit append_domain kann man angeben, welche Domain automatisch angehängt wird, wenn keine angegeben wurde. Meist wird man hier die eigene Domain eintragen, dann genügt es, im Browser www einzugeben, um auf den eigenen Webserver zu gelangen.

forwarded_for on

Setzt man diesen Eintrag auf off, entfernt Squid die IP-Adresse bzw. den Systemnamen des Clients aus den HTTP-Anfragen.

negative_ttl 5 minutes; negative_dns_ttl 5 minutes

Normalerweise braucht man diese Werte nicht zu verändern. Hat man aber eine Wählleitung, kann es vorkommen, dass das Internet zeitweilig nicht erreichbar ist. Squid merkt sich dann die erfolglosen Anfragen und weigert sich, diese neu anzufragen, obwohl die Verbindung in das Internet wieder steht. Für diesen Fall sollte man die minutes in seconds ändern, dann führt auch ein Reload im Browser, wenige Sekunden nach der Einwahl, wieder zum Erfolg.

never_direct allow acl_name

Will man verhindern, dass Squid Anfragen direkt aus dem Internet fordert, kann man hiermit die Verwendung eines anderen Proxys erzwingen. Diesen muss man zuvor unter cache_peer eingetragen haben. Gibt man als acl_name all an, erzwingt man, dass sämtliche Anfragen direkt an den parent weitergegeben werden. Das kann zum Beispiel nötig sein, wenn man einen Provider verwendet, der die Verwendung seines Proxys zwingend vorschreibt oder die Firewall keinen direkten Zugriff auf das Internet durchlässt.

33.5.2. Optionen zur Zugriffskontrolle

Squid bietet ein detailliertes System, um den Zugriff auf den Proxy zu steuern. Durch die Verwendung von ACLs ist es einfach und vielseitig konfigurierbar. Dabei handelt es sich um Listen mit Regeln, die der Reihe nach abgearbeitet werden. ACLs müssen zuerst definiert werden, bevor sie verwendet werden können. Einige Standard-ACLs wie all und localhost sind bereits vorhanden. Das Festlegen einer ACL an sich bewirkt aber noch gar nichts. Erst wenn sie tatsächlich eingesetzt wird, zum Beispiel in Verbindung mit http_access, werden die definierten Regeln abgearbeitet.

acl <acl_name> <type> <data>

Eine ACL benötigt zur Definition mindestens drei Angaben. Der Name <acl_name> kann frei gewählt werden. Für <type> kann man aus einer Vielzahl unterschiedlicher Möglichkeiten auswählen, die man im Abschnitt ACCESS CONTROLS in der /etc/squid/squid.conf nachlesen kann. Was für <data> anzugeben ist, hängt vom jeweiligen Typ der ACL ab und kann auch aus einer Datei, zum Beispiel mit Rechnernamen, IP-Adressen oder URLs eingelesen werden. Im folgenden einige einfache Beispiele:

acl meinesurfer srcdomain .meine-domain.com
acl lehrer src 192.168.1.0/255.255.255.0
acl studenten src 192.168.7.0-192.168.9.0/255.255.255.0
acl mittags time MTWHF 12:00-15:00
http_access allow <acl_name>

Mit http_access wird festgelegt, wer den Proxy verwenden darf und auf was er im Internet zugreifen darf. Dabei sind ACLs anzugeben, localhost und all sind weiter oben bereits definiert, die mit deny oder allow den Zugriff sperren oder freigeben. Man kann hier eine Liste mit vielen http_access-Einträgen erstellen, die von oben nach unten abgearbeitet werden; je nachdem, was zuerst zutrifft, wird der Zugriff auf die angeforderte URL freigegeben oder gesperrt. Als letzter Eintrag sollte immer http_access deny all stehen. Im folgenden Beispiel hat localhost, also der lokale Rechner, freien Zugriff auf alles, während er für alle anderen komplett gesperrt ist:

http_access allow localhost
http_access deny all

Noch ein Beispiel, in dem die zuvor definierten ACLs verwendet werden: Die Gruppe lehrer hat jederzeit Zugriff auf das Internet, während die Gruppe studenten nur Montags bis Freitags, und da nur mittags, surfen darf:

http_access deny localhost
http_access allow lehrer
http_access allow studenten mittags
http_access deny all

Die Liste mit den eigenen http_access-Einträgen sollte man der Übersichtlichkeit halber nur an der dafür vorgesehenen Stelle in der /etc/squid/squid.conf eintragen. Das bedeutet zwischen dem Text

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR 
# CLIENTS

und dem abschließenden

http_access deny all
redirect_program /usr/bin/squidGuard

Mit dieser Option kann man einen „Redirector“ wie squidGuard angeben, der in der Lage ist, unerwünschte URLs zu sperren. In Verbindung mit Proxy-Authentifizierung und den passenden ACLs kann man so den Zugriff auf das Internet für verschiedene Benutzergruppen sehr differenziert steuern. squidGuard ist ein eigenes Paket, das separat zu installieren und konfigurieren ist.

auth_param basic program /usr/sbin/pam_auth

Sollen sich die Benutzer am Proxy authentifizieren müssen, kann man hier ein entsprechendes Programm wie beispielsweise pam_auth angeben. Bei der Verwendung von pam_auth öffnet sich für den Anwender beim ersten Zugriff ein Loginfenster, in dem er Benutzername und Passwort eingeben muss. Zusätzlich ist noch eine ACL erforderlich, damit nur Clients mit gültigem Login surfen können:

acl password proxy_auth REQUIRED
     
http_access allow password
http_access deny all

Das REQUIRED nach proxy_auth kann man auch durch eine Liste von erlaubten Benutzernamen oder einen Pfad zu solch einer Liste ersetzen.

ident_lookup_access allow <acl_name>

Hiermit erreicht man, dass auf alle durch die ACL definierten Clients eine Ident-Anfrage ausgeführt wird, um die Identität des jeweiligen Benutzers zu ermitteln. Setzt man für <acl_name> all ein, erfolgt dies generell für alle Clients. Auf den Clients muss dazu ein Ident-Daemon laufen, bei Linux kann man dafür das Paket pidentd installieren, für Windows gibt es freie Software, die man sich aus dem Internet besorgen kann. Damit nur Clients mit erfolgreichem Ident-Lookup zugelassen werden, ist auch hier wieder eine entsprechende ACL zu definieren:

acl identhosts ident REQUIRED

http_access allow identhosts
http_access deny all

Auch hier kann man das REQUIRED wieder durch eine Liste erlaubter Benutzernamen ersetzen. Die Verwendung von Ident kann den Zugriff merklich verlangsamen, da die Ident-Lookups durchaus für jede Anfrage wiederholt werden.


SUSE LINUX Administrationshandbuch 9.3