====== SQUID ====== {{:server:squid-logo.png|squid-logo}} [[http://www.squid-cache.org/|Squid]] ist ein Open-Source Proxyserver. Das heißt Daten, die aus dem Internet angefordert werden, speichert Squid lokal in einem Cache und lädt diese bei Bedarf aus dem Zwischenspeicher nach. Dadurch ist der Datentransfer effizienter, weil weniger Netzbelastung durch große Datenmengen erzeugt wird. Aber man kann durch den Einsatz von Filtern auch die Sicherheit des Netzes erhöhen. Squid zeichnet sich vor allem durch seine gute Skalierbarkeit aus. Squid unterstützt die Netzwerkprotokolle HTTP/HTTPS, FTP über HTTP und Gopher. Er kann sowohl für sehr kleine Netze (5-10 User), als auch für sehr große Proxyverbünde in Weitverkehrsnetzen mit mehreren hunderttausend Benutzern eingesetzt werden (aus der [[wpde>Squid|Wikipedia]]). ===== Features ===== * mehrere Cache-Partitionen * Webverwaltung über cgi-Skript * ... ===== Installation ===== Squid kann direkt aus den Paketquellen von Ubuntu über das Paket * **squid** installiert werden. Nach der Installation ist Squid wahrscheinlich noch nicht lauffähig. Hat man Squid über ein Terminal installiert, so werden beim Versuch Squid zu starten gleich Fehlermeldungen wie * Restarting Squid HTTP proxy squid * Creating squid spool directory structure FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname' ausgegeben. Das ist normal, denn Squid muss erst konfiguriert werden. ===== Konfiguration ===== Wie schon in der Einleitung geschrieben ist Squid nicht nur ein Programm für kleine Netze Zuhause oder in der Firma. Squid kann so gut wie alle Einsatzzwecke abdecken. Dies hat leider zur Folge, dass die Konfiguration nicht sehr einfach ist. Allerdings sind die Grundfunktionen leicht zu konfigurieren, wenn man weiß wo man ansetzen muss. Sämtliche Konfigurationen werden in der Datei **/etc/squid/squid.conf** vorgenommen. Die Datei kann mit einem beliebigen Editor bearbeitet werden. Allerdings benötigt man dazu wie bei allen Systemdateien Root-Rechte. Auch hier zeigt sich wieder die Bandbreite von Squid. Die Datei ist über 3500 Zeilen lang. Allerdings besteht der größte Teil aus Kommentaren. ===== Blacklisten über Squidguard ===== * [[http://www.squidguard.org/Doc/configure.html|Basic Configuration of squidGuard]] * [[http://www.squidguard.org/blacklists.html|squidGuard - Blacklists]] ==== Netzwerkport ==== Üblicherweise wartet Squid auf dem Port 3128 auf Anfragen. Bei Bedarf lässt sich der Port über die Option # TAG: http_port http_port 3128 frei setzen. ==== Größe des Caches im Arbeitsspeicher ==== Je nachdem wie viel RAM der Rechner zur Verfügung hat, kann man den Wert auf sein System anpassen. Zu beachten ist, das Squid bei hoher Auslastung auch über diesen Wert hinaus geht. Dient der Rechner als reiner http-Proxy, so kann man bis zu 20% des vorhanden Speichers angeben. # TAG: cache_mem (bytes) cache_mem 32 MB ==== Max. Größe gecachter Dateien ==== Ein relativ kleiner Wert führt zu höheren Objekt-Hitraten und damit in der Regel zu etwas besserer Geschwindigkeit. Ein höherer Wert führt zu einer höheren Byte-Hitrate und reduziert die nötige Bandbreite. Der Standardwert sind 4096 KB. Je nach Bedarf kann dieser Wert variiert werden. # TAG: maximum_object_size (bytes) maximum_object_size 10000 KB ==== Max. Größe gecachter Dateien im RAM ==== Da RAM meistens die begehrteste Ressource ist, gibt man an, bis zu welcher Größe Dateien im RAM gehalten werden dürfen. Ein größerer Wert verbessert natürlich die Performance des Cache, wenn immer wieder die selben Daten angefordert werden. Reduziert jedoch die Menge an Dateien, die im RAM vorgehalten werden können. # TAG: maximum_object_size_in_memory (bytes) maximum_object_size_in_memory 32 KB ==== Verfahren um Speicherplatz freizugeben ==== Wenn der Cache voll ist, muss entschieden werden, welche Daten gelöscht werden sollen und welche nicht. Dafür gibt es 3 Verfahren: * **LRU** behält die zuletzt angefragten Objekte im Cache, unabhängig von Größe und Alter der Objekte. (Wird als Standard verwendet, wenn man nichts angibt) * **heap GDSF** optimiert die Objekt-Hitrate. Kleine, häufig angefragte Objekte werden auf Kosten großer, weniger häufig angefragter Objekte im Cache gehalten. Damit wird die Wahrscheinlichkeit eines Objekt-Hit gesteigert. * **heap LFUDA** optimiert die Byte-Hitrate. Häufig angefragte Objekte werden im Cache gehalten, selten angefragte werden freigegeben, unabhängig von deren Größe. Damit wird ein häufiger angefragtes, großes Objekt ggf. auf Kosten vieler kleiner Objekte im Cache gehalten. Damit steigt die Byte-Hitrate auf Kosten der Objekt-Hitrate. Für kleinere Netzwerke ist //"heap LFUDA"// meist optimal: # TAG: cache_replacement_policy cache_replacement_policy heap LFUDA # TAG: memory_replacement_policy memory_replacement_policy heap LFUDA ==== Speicherort des Caches ==== Bei Bedarf kann man noch definieren wo Squid die gecachten Daten ablegen soll. Standard ist dies das Verzeichnis **/var/spool/squid**. Falls man hier anderes Verzeichnis benutzen will, so muss man darauf achten, dass der Benutzer //"proxy"//, unter dem Squid läuft, auf dieses Verzeichnis Schreib- und Leserechte hat. Das Verzeichnis lässt sich über die Option # TAG: cache_dir cache_dir ufs /var/spool/squid 2000 16 256 bestimmen * **ufs** - Ist Das Speichersystem von squid * **/var/spool/squid** - Ist das gewählte Verzeichnis für den Squidcache * **2000** - Gibt die Cache-Größe in MB an. Dabei sollte man beachten, dass man diesen Eintrag nicht beliebig hoch setzen darf. Um so größer der Cache ist, um so mehr RAM braucht Squid. Also nicht einfach einen Cache von 40GB machen, weil man ausreichend Festplattenplatz hat. * **16** - Gibt an, wie viele Unterordner für Level1 Domains erstellt werden sollen * **256** - Gibt an, wie viele Unterordner für Level2 Domains erstellt werden sollen ==== Cache löschen ==== Sollte aus irgendeinem Grund der Cache von Squid gelöscht werden, muss dafür Squid angehalten, der Löschbefehl abgesetzt und anschließend wieder der Start erfolgen: /etc/init.d/squid stop squid -z /etc/init.d/squid start Die ersten Seitenaufrufe gehen dann langsam, da der Cache erst wieder aufgebaut wird. Wenn man das vermeiden möchte ruft man lokal schon einmal oft benutzte Seite ab. Dazu kann wget benutzt werden. wget --cache=off -r http://meineSeite.de Anschließend können die lokal übertragenen Dateien gelöscht werden. ==== Datenschutz ==== Wenn die Privatsphäre der Clients bewahrt werden soll oder muss (z.B. Datenschutz in Unternehmen), kann hier eine Netzwerk-Maske definiert werden, die dazu führt, dass die einzelnen Logfile-Einträge nicht mehr einem Rechner zuordbar sind. Eine Netzwerk-Maske von 255.255.255.0 würde dazu führen, dass bei allen IP-Adressen in den Logfiles und der cachemgr Ausgabe die letzte Stelle als "0" dargestellt wird. Beim Standardwert 255.255.255.255 wird die komplette Adresse angezeigt. # TAG: client_netmask client_netmask 255.255.255.0 ==== IP Adresse verbergen ==== Nach den Voreinstellungen von Squid, wird die wahre IP-Adresse des eigenen Rechners hinter dem Proxy-Server in den Header Daten mitgesendet. Dieses kann man unterdrücken, wenn man folgende Einstellung vornimmt: # TAG: forwarded_for forwarded_for off Diese Einstellung bewirkt nicht dass man komplett anonym im Netz ist. Es wird lediglich die lokale IP Adresse hinter einem NAT-Router nicht mehr mitgesendet. Die eigentliche Internet-IP-Adresse sieht der Webserver nach wie vor. ==== Squid VIA Header ausschalten ==== Normalerweise sendet Squid im Header **HTTP_VIA** seinen Versions-String mit. Dies kann man mit folgenden Eintrag unterdrücken: via off ==== Authentifizierung ==== Die Authentifizierung funktioniert nur mit einem Proxy, der normal angesprochen wird. Richtet man Squid als transparenten Proxy ein, so ist eine Authentifizierung nicht möglich, da der Proxy ja nicht direkt vom Client aus angesprochen wird. Eventuell möchte man, dass sich Benutzer am Squid Proxy anmelden müssen, bevor sie über den Proxy auf das Internet zugreifen können. Dies ist sinnvoll, wenn z.B. unterschiedliche Nutzer verscheidene Rechte bekommen sollen. So ist es z.B. möglich, dass einzelne Benutzer über Blacklist definierte Webseiten nicht aufrufen können. Am einfachsten ist es, die vorhandenen Benutzer im System zur Authentifizierung am Squid-Proxy heranzuziehen. Dazu müssen die Zeilen # TAG: auth_param auth_param basic program /usr/lib/squid/pam_auth auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off aktiviert und **/usr/lib/squid/pam_auth** als Programm eingetragen werden. Als Zugriffsregel (s.u.) wäre dann # TAG: http_access acl checkpw proxy_auth REQUIRED http_access allow checkpw all nötig. Danach können Benutzer sich mit ihren Daten einloggen, die sie nutzen um sich lokal am Rechner anzumelden. ==== Zugriffslisten und -regeln (ACLs) ==== Aus Sicherheitsgründen ist die Voreinstellung von Squid so, dass niemand Anfragen über den Proxy in das Internet schicken darf. Deshalb muss jeder Rechner bzw. jedes Netz explizit freigegeben werden (siehe Beispiele) indem man Zugriffsrechte erteilt. Für die Rechtevergabe muss zunächst die Zugriffs-Kontroll-Liste (Access Control List, ACL) definiert werden. Anschließend wird über den Namen dieser ACL das Recht mit dem Schlüsselwort http_access zugewiesen. Die Syntax einer ACL sieht allgemein so aus. acl Hinweis: Die Reihenfolge der Freigaben ist entscheidend! Wurde zuerst ein http_access deny all gesetzt, kann man darunter keinen Zugriff mehr einrichten. Der Einfachheit halber kannst du am besten deine Freigabe Regeln in der config Datei ganz oben einfügen. Bei den Beispielen müssen natürlich die IP-Adressen an die eigenen Verhältnisse angepasst werden. === Beispiele === Als **Beispiel 1** wird hier die ACL-Regel "freigegeben1" definiert, die allen Benutzern und Rechnern aus dem Netz "192.168.20.*" Zugang zum Internet erlauben würde. # Beispiel 1: acl freigegeben1 src 192.168.10.0/255.255.255.0 http_access allow freigegeben1 Möglich ist auch die Angabe einer Teilmenge von Rechnern aus einem Netz: Hier als **Beispiel 2** die ACL "freigegeben2", die allen Rechner mit den IPs 192.168.20.1 bis 192.168.20.99 den Zugriff gestatten würde. # Beispiel 2: acl freigegeben2 src 192.168.20.1-192.168.20.99 http_access allow freigegeben2 **Beispiel 3**: Lediglich einzelne Rechner freigeben: Eine einfache Erlaubnis-Regel für die IP 192.168.30.1 (Name ist hier "testpc"). # Beispiel 3: acl testpc src 192.168.30.1 http_access allow testpc ==== Hostname ==== Besitzt der Rechner auf dem man Squid aufsetzt keinen ordentlichen Namen inklusive Domäne (also z.b. rechner.foo.bar), so kann man hier # TAG: visible_hostname visible_hostname meinproxy einen Namen einsetzen. Diese Option ist besonders wichtig, wenn wie oben genannt, Squid aufgrund eines //"not fully qualified hostname"// nicht starten möchte. ==== Traffic über weiteren Proxy leiten ==== Um den gesamten Traffic von Squid zu einem anderen Proxy, beispielsweise Privoxy oder Tor, zu leiten reicht folgender Eintrag: # TAG: cache_peer cache_peer localhost parent 8118 7 no-query default Hierbei ist localhost durch den Hostnamen des Proxyservers zu ersetzen, 8118 durch den entsprechenden Port. Zusätzlich muss noch dieser Eintrag gemacht werden: # TAG: never_direct never_direct allow all Um wirklich den gesamten Traffic weiterzuleiten. Somit könnte folgendes Szenario entstehen: Browser des Benutzers -> Squid (Cache) -> Privoxy (Werbefilter) -> Tor (Anonymisierer) -> WWW. Aber dies bleibt natürlich jedem selber überlassen. ==== Transparenter Proxy ==== Diese Konfiguration ist optional. Sie ist nur nötig, wenn der gesamte http-Netzwerkverkehr über den Proxy geleitet werden soll, selbst wenn die Clients keinen Proxy eintragen. Aufgrund der nötigen Kenntnisse bezüglich [[http://wiki.ubuntuusers.de/iptables|iptables-Regeln]] ist dies nicht für Anfänger geeignet. Ein transparenten Proxy ist ein Proxyserver der vollkommen im Hintergrund arbeitet und der automatisch über eine iptables Regel alle Internetpakete, die über Port 80 (also http) ins Internet geschickt werden, filtert. Das bedeutet, dass Benutzer im Lan auf ihren Rechnern die Benutzung des Proxyserver nicht erst aktivieren müssen. Jeder Browser, jedes Programm benutzt dadurch zwangsläufig den Proxyserver. Dazu müssen noch folgende Einstellungen in der **squid.conf** vorgenommen werden. === Konfiguration] === == Ab Ubuntu Edgy Eft 6.10 == Ab Ubuntu Edgy Eft 6.10 wird Squid als transparenter Proxy über die eine zusätzlichen Paramter an der Option //"http_port"// aktiviert. Hier muss der Wert //"transparent"// hinzugefügt werden. # Squid normally listens to port 3128 http_port 3128 transparent == Bis Ubuntu Dapper Drake 6.06 == Bis Ubuntu Dapper Drake 6.06 müssen diese Optionen aktiviert werden. # HTTPD-ACCELERATOR OPTIONS ... # TAG: httpd_accel_host # TAG: httpd_accel_port httpd_accel_host virtual httpd_accel_port 80 ... # TAG: httpd_accel_with_proxy on|off httpd_accel_with_proxy on ... # TAG: httpd_accel_uses_host_header on|off httpd_accel_uses_host_header on === Iptables-Regel === Die dazu passende [[http://wiki.ubuntuusers.de/iptables|iptables]]-Regel muss noch in das vorhandene Firewallscript eingefügt werden. iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 ==== Delay Pools ==== Delay Pools sind ein sehr komplexes Thema. Die Aufteilung in Klassen und die Arbeit mit regulären Ausdrücken überfordert sicherlich Einsteiger. Anfragen können in verschiedene Klassen unterteilt, über Filter sortiert und schließlich priorisiert werden. So ist es Möglich gewissen IPs mehr Bandbreite zur Verfügung zu stellen, als anderen oder die Datenrate von Downloads z.B. komplett zu limitieren. Als sehr einfaches Beispiel sei ein Delay Pool vorgegeben, der den kompletten Durchsatz auf 75kb/s ab einer Dateigröße von 32kb limitiert. # DELAY POOL PARAMETERS delay_pools 1 delay_class 1 1 delay_parameters 1 32000/75000 delay_access 1 allow All Weitere Funktionen bedürfen individuellen Anpassungen und meist ein ausführliches Studium der Squid Dokumentationen. ===== Dienst steuern ===== Squid lässt sich wie jeder andere Dienst auch über die init-Skripte steuern. In einem Terminal kann man über # Allgemein sudo /etc/init.d/squid {start|stop|reload|force-reload|restart} # Beispiel sudo /etc/init.d/squid restart den Dienst steuern. Mehr zu dem Thema Dienste findet man im Wiki [[http://wiki.ubuntuusers.de/Dienste|hier]]. ===== Überwachen ===== :!: In Betrieben existieren normalerweise Datenschutzbestimmungen. So dürfen z.B. oftmals keine personenbezogenen Informationen aus Proxy-Logdateien gewonnen werden. Diese Datenschutzbestimmungen gelten auch für einen kleineren Rahmen. Setzt man zuhause für die Familie, für die Mitbewohner oder die Mitarbeiter einen Proxy auf, so hat man diese über die Logs zu informieren, es sei denn man deaktiviert die Logfunktionen. Squid kann umfangreiche Logdaten - in **/var/log/squid/** - über den Netzwerkverkehr schreiben, der über ihn geleitet ist. So steht in der **access.log** für jeden HTTP Transfer einen Eintrag. Diese Datei kann bei entsprechender Konfiguration personenbezogene Daten enthalten (z.B. IP Adresse, Benutzername, Cookie Informationen). Diese Informationen können mit verschiedenen Werkzeugen ausgewertet werden. [[http://wiki.ubuntuusers.de/_image?target=Squid%2Fsquidview.png|{{http://wiki.ubuntuusers.de/_image?width=200&target=Squid%2Fsquidview.png|squidview.png}}]] ==== squidview ==== [[http://www.rillion.net/squidview/|squidview]] ist ein Echtzeitmonitor für das Squid //"access.log"//. Das Programm läuft mit einer ncurses-basierenden Oberfläche in der Konsole. Es ist in den Ubuntu-Quellen enthalten und kann über das Paket * **squidview** (//universe//) installiert werden. Über Filter und Suchoptionen kann effektiv nach Informationen im Squidlog gesucht werden. Ebenso ist es möglich Berichte zu exportieren. Das Programm wird nach der Installation in einem Terminal mit dem Befehl sudo squidview aufgerufen. [[http://wiki.ubuntuusers.de/_image?target=Squid%2Fsarg.png|{{http://wiki.ubuntuusers.de/_image?width=200&target=Squid%2Fsarg.png|sarg.png}}]] ==== sarg ==== [[http://sarg.sourceforge.net/sarg.php|sarg]] ist ein Logfile Analysierprogramm. Man kann mit sarg ausführliche Reports in Form von html-Dokumenten erstellen, die genaue Angaben über wer wan wohin wieviele Daten über den Proxy überträgt machen. Das Programm kann über die Paketverwaltung * **sarg** (//universe//) installiert werden und wird dann über ein Terminal mit dem Befehl # Allgemein sudo sarg -g e -o ausgeführt werden. Gibt man keinen Pfad an, so wird die Ausgabe direkt nach **/var/www/squid-reports** geleitet. Wo man sie auch direkt über einen lokal installierten Webserver betrachten kann, insofern auf dem Rechner auch ein [[http://wiki.ubuntuusers.de/Apache|Webserver]] installiert ist. sarg wird über die Datei **/etc/squid/sarg.conf** konfiguriert. Hier lassen sich zahlreiche Details wird die Sprache der Reports und das Aussehen umfassend ändern. [[http://wiki.ubuntuusers.de/_image?target=Squid%2Fsrg.png|{{http://wiki.ubuntuusers.de/_image?width=200&target=Squid%2Fsrg.png|srg.png}}]] ==== SRG ==== [[http://www.crc.net.nz/software/srg.php|SRG]] ist sehr ähnlich zu Sarg. Auch dieses Programm analysiert das //"access.log"// von Squid und gibt den Bericht als html-Dateien aus. Allerdings läuft das Programm über einen Eintrag in [[http://wiki.ubuntuusers.de/Cron|cron.daily]] täglich automatisch ab und erzeugt den passenden Bericht des letzten Tages. Das Programm kann über die Paketverwaltung mit dem Paket * **srg** (//universe//) installiert werden. Möchte man noch Konfigurationen vornehmen, so kann man dies in der **/etc/srg/srg.conf** Datei machen. Die Berichte werden automatisch nach **/var/www/srg_reports** geschrieben. Ist ein [[http://wiki.ubuntuusers.de/Apache|Webserver]] installiert, so können über diesen die Berichte über einen Browser betrachtet werden. ===== Links ===== * [[http://www.squid-cache.org|Squid Homepage]] * [[http://www.deckle.co.za/squid-users-guide/Main_Page|Squid User's guide site]] * [[http://www.squid-cache.org/Doc/FAQ/FAQ-3.html|Squid FAQ]] * [[http://www.linux.com/article.pl?sid=07/02/06/1752220|Using squidGuard for content filtering]] * [[http://www.tecchannel.de/server/linux/401751/|Squid: Proxy-Server unter Linux]] * [[http://www.it-secure-x.de/index.php?option=content&task=view&id=43|Sicherer Aufbau eines Squid-Proxies]] * http://www.lukas-world.de/squid.htm * [[http://www.articledesktop.com/linux/how-to-use-squid-proxy-as-transparent-mode/24|how to use squid proxy as transparent mode]] * [[http://www.squidportal.de|Deutschsprachiges Web-Portal zu Squid]] * [[http://www.squid-handbuch.de/hb/|Das Squid-Handbuch]] * [[http://www.selflinux.org/selflinux/html/squid.html|Der Web-Proxy Squid auf selflinux.org]] * [[http://www.proesdorf.de/linux/squid_conf.php|Squid Proxy konfigurieren]] ==== Links für den Proxy-test ==== Um zu überprüfen, ob der Proxy Server wie gewünscht funktioniert, hier ein paar Links die online tests durchführen: * [[http://checker.samair.ru/|Proxy Checker]] * [[http://stayinvisible.com|stayinvisible.com]] ===== Fehlerbehebung ===== ==== Debug Modus ==== Sollte der Squid Proxy nicht korrekt starten, kann Squid im Debug Modus gestartet werden. Fehlermeldungen werden so auf dem Terminal ausgegeben. squid -NCd1 Alternativ erteilt Squid mit der Konfigurationseinstellung debug_options ALL,1 33,2 28,9 eine detaillierte Fehlerauskunft. Im Protokoll steht welche Regel bei welchem Request angewandt wurde und warum es zum Scheitern/Erfolg gekommen ist. ==== FATAL: Could not determine fully qualified hostname ==== Wenn man den Dienst startet bekommt man manchmal eine Fehlermeldung, dass ''visible_hostname'' nicht gesetzt wäre: FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname' d.h. er kann seinen Hostnamen nicht bestimmen (Befehl ''hostname''). Also gibt man ihn vor: visible_hostname NAME NAME muss natürlich durch den richtigen Namen ersetzt sein. Wenn der [[netzwerke:DNS]]-Server des Providers hinter dem Proxy steht muss man einen [[netzwerke:DNS|DNS]]-Server installieren, am einfachsten ist bind9, der in der Standardeinstellung als caching-[[netzwerke:DNS]]-Server arbeitet.