[[Vorlage(Getestet, jammy)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis(1)]] [[Bild(./squid-logo.png, 100, align=left)]] [http://www.squid-cache.org/ Squid] {en} 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. Aus der [wikipedia:Squid:Wikipedia]: ''"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."'' Im WWW hat HTTPS HTTP fast vollständig abgelöst, was das Caching erschwert. Es ist zwar möglich, eine solche Verschlüsselung aufzubrechen, davon wird aber aus Datenschutzgründen abgeraten. = Installation = {{{#!vorlage Paketinstallation squid }}} = Dienst steuern = Squid wird beim Systemstart automatisch gestartet und kann wie folgt gesteuert werden: {{{#!vorlage Befehl # Allgemein sudo service squid BEFEHL }}} wobei `BEFEHL` `start`, `stop` oder `--full-restart` sein kann. = 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 [3] 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 7959 Zeilen lang. Allerdings besteht der größte Teil aus Kommentaren. == 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. Squid lauscht dann auf allen IPv4- und IPv6-Adressen. Man kann Squid an bestimmte IP-Adressen/Ports binden. Dafür setzt man der Port-Angabe einfach die IP-Adresse und einen Doppelpunkt voran (IPv6 zusätzlich in eckigen Klammern): {{{ http_port 192.168.0.1:3128 http_port [fd00:abcd::123]:3128 http_port [2001:db8::9999]:8080 }}} == Größe des Caches im Arbeitsspeicher == Je nachdem, wie viel RAM der Rechner zur Verfügung hat, kann man den Wert für das System anpassen. Zu beachten ist, dass 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 256 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 20480 KB. Je nach Bedarf kann dieser Wert variiert werden. {{{# TAG: maximum_object_size (bytes) maximum_object_size 4 MB }}} == 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. Gleichzeitig wird jedoch die Menge an Dateien, die im RAM vorgehalten werden können, reduziert. {{{# TAG: maximum_object_size_in_memory (bytes) maximum_object_size_in_memory 512 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 drei Strategien: * `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. Man kann Strategien auch mischen. Es bietet sich an, für Objekte im Ram `heap GDSF` zu verwenden und für Objekte im Festplatten-Cache `heap LFUDA`. So wird ein ausgewogener Kompromiss zwischen schnellen Reaktionszeiten und Traffic-Sparen erreicht: {{{# TAG: cache_replacement_policy cache_replacement_policy heap LFUDA # TAG: memory_replacement_policy memory_replacement_policy heap GDSF }}} == Genereller Speicherort von Cache-Dateien == Bei Bedarf kann man noch definieren, wo Squid die gecachten Daten ablegen soll. Standard ist 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 Standard Speichersystem von Squid. Unter Linux sollte `aufs` verwendet werden, da es hier Schreibzugriffe beschleunigt. * `/var/spool/squid` - ist das gewählte Verzeichnis für den Squidcache * `2000` - gibt die Cache-Größe in MB an. Default-Wert sind 100 MB. 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 40 GB machen, weil man ausreichend Festplattenplatz hat. Auch sollte man auf einer Partition mindestens 20% Platz frei lassen. * `16` - gibt an, wie viele Unterordner für Level1-Domains erstellt werden sollen. Wenn man diesen Wert verändert, muss der Cache gelöscht werden. * `256` - gibt an, wie viele Unterordner für Level2-Domains erstellt werden sollen. Auch bei diesem Wert muss der Cache gelöscht werden. {{{#!vorlage Hinweis Squid benutzt zusätzlich zur `cache_mem`-Variable noch ca. 10-20 MB an Arbeitsspeicher pro GB belegtem Festplattenplatz. D.h. bei einer Cachegröße von 20 GB werden ca. 200 - 400 MB zusätzlicher Arbeitsspeicher belegt. Hat man bei der Variable `cache_mem` bereits 512 MB angegeben, so erhöht sich der gesamte Arbeitsspeicherbedarf bereits auf 712 - 912 MB. Es kann daher sehr schnell passieren, dass Squid Daten auf die SWAP-Partition auslagern muss. Somit wird der Proxy dementsprechend langsam, da er die Daten nicht mehr aus dem schnellen Arbeitsspeicher liest, sondern von der sehr langsamen Festplatte! Das gesamte System wird dadurch sehr träge, sodass der Cache niemals das System zu Swappen bringen sollte. }}} === Angabe eines expliziten Speicherorts für Log-Dateien === Man kann den Speicherort der Logs auch explizit angeben. Für die '''access.log''' sieht dann wie folgt aus, unter Angabe des Standardverzeichnisses. {{{# TAG: cache_access_log cache_access_log /var/log/squid/access.log }}} Für die '''cache.log''' so: {{{# TAG: cache_log cache_log /var/log/squid3/cache.log }}} == 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 gestartet werden. {{{#!vorlage Befehl sudo service squid stop sudo rm -r /pfad/zum/cachedir/* sudo squid -z sudo service quid start }}} Die Dateien im Cache können bedenkenlos gelöscht werden, bei Bedarf werden Sie wieder vom eigentlichen Server angefordert, was nur Bandbreite und Zeit kostet. == 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 zugeordnet werden. 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. Die Option ist aktuell nur für IPv4 spezifiziert. {{{# TAG: client_netmask client_netmask 255.255.255.0 }}} == IP Adresse verbergen == In den Voreinstellungen von Squid wird die echte 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 }}} Selbstverständlich kann Squid seine eigene IP-Adresse nicht vor dem Ziel verbergen, so dass man nicht komplett anonym im Netz ist. Die Gegenstelle sieht immer die IP des Proxyservers. Es wird jedoch standardmäßig auch die IP-Adresse des Rechner mitgeschickt, der den Proxy anspricht (forwarded_dor). == Squid VIA Header ausschalten == Normalerweise sendet Squid im Header '''HTTP_VIA''' seinen Versions-String mit, wie es in RFC2616 vorgeschrieben ist. Dies kann man mit folgenden Eintrag unterdrücken: {{{# TAG: via via off }}} == Authentifizierung == {{{#!vorlage Hinweis 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 verschiedene 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/basic_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/basic_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. Dann muss die Datei '''/etc/pam.d/squid''' mit folgenden Inhalt angelegt werden: {{{ auth sufficient pam_unix.so account sufficient pam_unix.so }}} Zudem muss der Benutzer ''proxy'' der Gruppe ''shadow'' hinzugefügt werden, damit die Authentifizierung per PAM funktioniert. {{{sudo usermod -aG shadow proxy}}} Testen kann man dies mit {{{ sudo -u proxy pamtester squid authenticate }}} Danach können Benutzer sich mit ihren Daten einloggen, die sie nutzen um sich lokal am Rechner anzumelden. =Authentifikation mittels htpasswd= Zuerst muss [https://httpd.apache.org/docs/current/programs/htpasswd.html htpasswd] {en} über das Paket '''apache2-utils''' installiert werden. Dann kann mit {{{sudo htpasswd -c /etc/squid/squid.passwd }}} Die Passwortdatei erstellt werden. Weitere Benutzer hinzufügen bzw. Kennwort eines vorhandenen ändern: {{{sudo htpasswd /etc/squid/squid.passwd <(neuer) Benutzer>}}} Zusätzlich muss folgendes in der squid.conf stehen: {{{ auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/squid.passwd auth_param basic children 5 auth_param basic realm Mein-Proxy auth_param basic credentialsttl 3 hours auth_param basic casesensitive off acl users proxy_auth REQUIRED acl sectionx proxy_auth REQUIRED http_access allow users }}} == 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 }}} {{{#!vorlage Hinweis Die __Reihenfolge__ der Freigaben ist entscheidend! Wurde zuerst ein ``http_access deny all`` gesetzt, kann man darunter keinen Zugriff mehr einrichten. Daher sollten Freigaben möglichst am Anfang der '''squid.conf''' stehen. }}} In den Beispielen müssen die verwendeten 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.10.0/24` Zugang zum Internet erlauben würde. Ebenso wird der Proxy-Zugriff für das IPv6-Netz 2001:db8::/64 erlaubt. {{{ # Beispiel 1: acl freigegeben1 src 192.168.10.0/24 acl freigegeben1 src 2001:db8::/64 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 acl testpc src 2001:db8:1234::6 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`; [wikipedia:FQDN#Fully_Qualified_Domain_Name_.28FQDN.29:FQDN]), 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 cache_peer [fd00:abcd::123] parent 3128 7 no-query default #Beispiel mit IPv6-Adresse }}} Hierbei ist `localhost` durch den Hostnamen des Proxyservers zu ersetzen, `8118` durch den entsprechenden Port. 7 ist der ICP-Port, siehe [http://www.squid-cache.org/Doc/config/cache_peer/ Doku] {en}. 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 == {{{#!vorlage Experten 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 [:iptables: iptables-Regeln] ist dies nicht für Anfänger geeignet. }}} Ein transparenten Proxy ist ein Proxyserver, der vollkommen autark im Hintergrund arbeitet und der automatisch über eine [:iptables2:iptables]-Regel alle Internetpakete, die über Port `80` (also `http`) ins Internet geschickt werden, filtert. Das bedeutet, dass Benutzer im lokalen Netzwerk 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 === Um Squid als transparenten Proxy zu konfigurieren, muss nur ein zusätzlicher Parameter an die Option `http_port` angehängt werden. Hier muss der Wert `transparent` hinzugefügt werden. {{{# Squid normally listens to port 3128 http_port 3128 transparent }}} === Iptables-Regel === Die dazu passende [:iptables:]-Regel muss noch in das vorhandene Firewall-Skript eingefügt werden, damit die normalen HTTP-Anfragen auch auf den Squid umgeleitet werden. {{{#!vorlage Befehl iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128 }}} == Delay Pools == {{{#!vorlage Experten 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 75 kb/s ab einer Dateigröße von 32 kb 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. = Debug Modus = Sollte der Squid Proxy nicht korrekt starten, kann Squid im Debug Modus gestartet werden. {{{ debug_options ALL,1 33,2 28,9 }}} Im Protokoll steht, welche Regel bei welchem Request angewandt wurde und warum es zum Scheitern/Erfolg gekommen ist. = Überwachen = {{{#!vorlage Warnung 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 - zu finden unter '''/var/log/squid/''' - über den Netzwerkverkehr schreiben, der über ihn weitergeleitet wird. So gibt 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. [[Bild(./squidview.png, 200, right)]] == squidview == [http://www.rillion.net/squidview/ squidview] {en} ist ein Echtzeitmonitor für das Squid-'''access.log'''. Das Programm läuft mit einer [wikipedia:ncurses:]-basierenden Textoberfläche. Es ist in den offiziellen Paketquellen enthalten und kann über das Paket {{{#!vorlage Paketinstallation 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 [2] mit dem Befehl: {{{#!vorlage Befehl sudo squidview }}} aufgerufen. Des Weiteren skann man sich der Gruppe `proxy` hinzufügen, damit man ohne root-Rechte die Logdateien lesen darf. {{{#!vorlage Befehl sudo adduser $USER proxy }}} [[Bild(./sarg.png, 200, right)]] == SARG == [sourceforge:sarg:] {en} ('''S'''quid '''A'''nalysis '''R'''eport '''G'''enerator) ist ein weiteres Analysierprogramm für die Logfiles. Man kann ausführliche Reports in Form von HTML-Dokumenten erstellen, die genaue Angaben enthalten, wer wann wohin wieviele Daten über den Proxy überträgt machen. Das Programm kann über die Paketverwaltung {{{#!vorlage Paketinstallation sarg, universe }}} installiert [1] werden und wird dann über ein Terminal mit dem Befehl {{{#!vorlage Befehl sudo sarg -g e -o }}} ausgeführt werden. Gibt man keinen Pfad an, so wird die Ausgabe direkt nach '''/var/lib/sarg''' geleitet, wo man sie auch direkt über einen lokal installierten Webserver betrachten kann, wenn auf dem Rechner auch ein [:Apache:Webserver] installiert ist. SARG wird über die Datei '''/etc/sarg/sarg.conf''' konfiguriert. Hier lassen sich zahlreiche Details wie die Sprache der Reports und das Aussehen umfassend ändern. Dort kann auch der Standardpfad angegeben werden. = Links = * [http://www.squid-cache.org/ Homepage des Squid-Projekts] {en} * [http://www.squid-handbuch.de/hb/ Das Squid-Handbuch] {de} - Online-Ausgabe des ''"Administrationshandbuch zum Proxyserver"'' von Dirk Dithardt von 2003, behandelt alte Versionen, ggf. nicht mehr aktuell * [http://www.selflinux.de/selflinux/html/squid.html Der Web-Proxy Squid] {de} auf Selflinux.de # tag: Internet, Netzwerk, Server