39.3Squid-Konfiguration als transparenter Proxy-Cache
Bis jetzt erfolgt die Benutzung des Proxy-Caches auf freiwilliger Basis. Nur wenn die Clients die Proxy-Einstellungen ihres Systems oder zumindest ihres Browsers anpassen, kommt Squid tatsächlich zur Anwendung. Ohne die Veränderung der Proxy-Einstellungen surfen die Anwender aber am Cache vorbei.
Diese Situation ist aus zwei Gründen unbefriedigend: Viele Endanwender sind ganz einfach damit überfordert, die Proxy-Einstellung selbst zu ändern. Außerdem wird Squid als Filter wirkungslos bleiben, solange die Anwender nur die Proxy-Einstellung zurücksetzen müssen, um Squid zu umgehen.
Um dem abzuhelfen, kann der Linux-Kernel so eingerichtet werden, dass der gesamte HTTP-Verkehr, der üblicherweise über den IP-Port 80 läuft, automatisch zum Proxy-Cache umgeleitet wird. Der Cache wird dann als »transparent« bezeichnet. Das bedeutet, dass der Cache ohne irgendwelchen Konfigurationsaufwand durch den Anwender automatisch bei jedem HTTP-Zugriff verwendet wird.
Es gibt zwei Konfigurationsvarianten, die ich Ihnen in den beiden folgenden Abschnitten näher vorstelle:
-
NAT (IPv4): Diese Variante setzt voraus, dass Squid auf dem Rechner (Server) installiert ist, der im lokalen Netzwerk das Internet-Gateway darstellt. Sie ist einfacher, funktioniert aber nur für IPv4. Wenn Sie das in Abschnitt 39.4 beschriebene Programm DansGuardian verwenden möchten, kommt nur diese Variante infrage.
-
TPROXY (IPv4 und IPv6): Nach NAT stelle ich Ihnen eine zweite Variante vor, deren Konfiguration aufwendiger ist. Dafür funktioniert die TPROXY-Variante gleichermaßen für IPv4 und IPv6. Aus technischer Sicht ist sie zudem die elegantere Variante, weil sie die Manipulation von Paketen vollständig vermeidet.
Einschränkungen
Prinzipbedingt funktioniert ein transparenter Proxy nur für alle Clients im lokalen Netzwerk, nicht aber für den Squid-Host selbst. Um den Proxy auch dort zu nutzen, müssen Sie weiterhin die Proxy-Einstellung des Webbrowsers ändern. Dieser Umstand ist vor allem beim Testen irritierend: Sie können den transparenten Proxy nur auf einem Client im lokalen Netzwerk ausprobieren, nicht aber auf dem Rechner, auf dem Squid läuft!
HTTPS-Seiten können nicht durch einen transparenten Proxy geleitet werden.
NAT-Variante
Bei der NAT-Variante muss in squid.conf nur eine einzige Zeile geändert werden. Bei http_port geben Sie nun im Anschluss an die Port-Nummer auch das Schlüsselwort transparent an und starten Squid dann neu.
Falls es nicht ohnedies schon aufgrund einer Masquerading-Konfiguration der Fall ist, müssen Sie die Forwarding-Funktion des Kernels aktivieren:
Jetzt müssen Sie nur noch die Umleitung von IP-Paketen aktivieren: Alle IP-Pakete, die den Rechner verlassen sollen und an Port 80 adressiert sind, sollen an den IP-Port von Squid geleitet werden. Das Kommando ist hier nur aus Platzgründen auf zwei Zeilen verteilt. eth1 müssen Sie durch den Namen der Schnittstelle ersetzen, die das Gateway mit dem LAN verbindet.
Dieses iptables-Kommando können Sie bei Bedarf auch in ein eigenes Firewall-Script einbauen, das beim Rechnerstart automatisch ausgeführt wird (siehe Abschnitt 38.5, »Firewall mit iptables selbst gebaut«).
Wenn Sie unter CentOS, Fedora oder RHEL arbeiten und die Port-Umleitung innerhalb des FirewallD-Systems einrichten möchten, dann erzeugen bzw. erweitern Sie die Datei /etc/firewalld/direct.xml, die für manuelle Ergänzungen vorgesehen ist. eth1 müssen Sie wiederum durch den Namen der Netzwerkschnittstelle in das lokale Netzwerk ersetzen.
Damit die Einstellungen berücksichtigt werden, müssen Sie die Firewall-Regeln neu laden. Anschließend verifizieren Sie, ob alles geklappt hat:
Wenn alles funktioniert, nutzt nun jeder Client im lokalen Netz ohne Konfiguration automatisch Squid zur Übertragung von Webseiten. Überprüfen Sie, ob beim Webzugriff von einem Client-Rechner tatsächlich neue Einträge in /var/log/squid/access.log auftauchen! Denken Sie daran, im Client-Rechner die Proxy-Konfiguration rückgängig zu machen, die Sie vielleicht bei ersten Tests des damals noch nicht transparenten Proxy-Caches durchgeführt haben.
TPROXY-Variante
Die TPROXY-Variante basiert auf der gleichnamigen Netfilter-Funktion. Die Grundidee besteht darin, dass die durch den Router zu transportierenden HTTP-Datenpakete zuerst markiert und dann über den Squid-Port umgeleitet werden. Die technischen Hintergründe können Sie hier nachlesen:
http://wiki.squid-cache.org/Features/Tproxy4
http://www.mjmwired.net/kernel/Documentation/networking/tproxy.txt
Die Änderungen für Squid fallen abermals minimal aus. Üblicherweise lassen Sie den üblichen Squid-Port 3128 unverändert. Außerdem definieren Sie aber einen zweiten Port mit dem Schlüsselwort tproxy:
Wenn Sie unter Fedora oder RHEL arbeiten, verhindert SELinux nun den Start von Squid. Abhilfe schafft das Setzen des booleschen SELinux-Parameters squid_use_tproxy:
In Ihrem Firewall-Script bauen Sie nun die folgenden Kommandos ein, um IPv4-Verkehr mittels TPROXY auf den Port 3129 umzuleiten. Die iptables-Anweisungen betreffen dabei die Mangle-Tabelle, für die die neue Regel DIVERT definiert wird.
Die für IPv6 verantwortlichen Kommandos sehen ganz ähnlich aus:
Nach dem Neustart von Squid und der Ausführung des Scripts ist der transparente Proxy aktiv. Wie üblich ist es zweckmäßig, in Squid das Logging zumindest vorübergehend zu aktivieren, um die Funktion zu testen.
Wenn Sie den transparenten Proxy wieder abschalten möchten, sind einige Aufräumarbeiten notwendig. Es ist zweckmäßig, die Kommandos in einem eigenen Script zu speichern: