Squid Caching Proxy, Installation und Konfiguration

Squid ist ein Caching-Proxy für das Web, der HTTP, HTTPS, FTP und mehr unterstützt. Es reduziert die Bandbreite und verbessert die Antwortzeiten durch Zwischenspeicherung und Wiederverwendung häufig angeforderter Webseiten. Squid verfügt über umfassende Zugriffskontrollen und eignet sich hervorragend als Serverbeschleuniger. Es läuft auf den meisten verfügbaren Betriebssystemen.

Es wird angenommen, dass ein DC, DNS und DHCP sich im Netz befinden. Außerdem existiert ein Fileserver der als Mitglied der Domäne ist. Den Proxy installieren wir auf dem Fileserver mit dem Namen: FS1

Netzdaten
           Netz: 172.16.0.0/22
           FS1: 172.16.0.5
           Gateway: 172.16.0.1
           DNS: 172.16.0.10
           Domain: mono.plan

Die Firewall muss so eingestellt sein, dass die Ports 80 und 443 nur für den Proxyserver geöffnet sind. Für alle Clients sollten gesperrt sein, damit die Clients nicht direkt ins Internet gehen könnten. Selbstverständlich, wenn nötig ist, kann man hier Ausnahmen machen.

Punkt
Squid Installation auf einem Linux Debian 12

 

# apt install squid
Punkt
Die Squid Konfigurationsdatei /etc/squid/squid.conf müssen wir anpassen. Wir werden die Konfigurationsdatei so anpassen, dass jeder Client den Proxy nutzen darf. ohne Begrenzungen

 

# nano /etc/squid/squid.conf

 

Wir suchen zuerst die Einträge

#http_access allow localnet
http_access allow localhost


danach wird die zweite Zeile angepasst.

 

# http_access allow localnet
http_access allow all

 

Am Ende dieser Datei können wir noch mit dem folgenden Eintrag den Cache Pfad und die Größe des Caches anpassen.

 

cache_dir ufs /var/cache/squid/ 5000 16 256

 

Der Cache Ordner wird erstellt, die Rechte des Ordners werden angepasst und der Dienst neu gestartet.

 

# mkdir /var/cache/squid
# chown proxy:proxy /var/cache/squid
# systemctl restart squid.service
Punkt
Damit das auch alles funktioniert, müssen wir auf dem Proxyserver die Weiterleitung in System einschalten. Unter Debian 12 machen wir das in der Datei /etc/sysctl.conf.
Die zwei Zeilen in dieser Datei müssen auskommentiert sein. Danach die entsprechenden Dienste neu starten.

 

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

 

Das war ziemlich einfache Konfiguration des Squid Dienstes. Wir können das selbstverständlich verfeinern.

Squid Konfiguration verfeinen.

Wir haben die Möglichkeit, den Squid-Dienst zu verfeinern und unseren Bedürfnissen anzupassen. Die Änderungen machen wir in der /etc/squid.conf Datei. Es wird vor allem der ACL Bereich genutzt. Ist eine ACL definiert, können wir bestimmte Regeln setzen.

Punkt
Wir können unsere gesetzte Regel verfeinern, so z.B. haben wir definiert, dass alle Benutzer den Proxy nutzen dürfen: http_access allow all. Um das für eigenes Netzwerk zu begrenzen, setzen wir zuerst eine acl und dann definieren wir die Regel. Die acl muss vor der Regeln definiert sein. Das könnte z.B. so aussehen,
satt http_access allow all

 

acl myNetzwerk src 172.16.0.0/22
http_access allow myNetzwerk
Punkt
In Squid kann man verschieden Regeln setzen. Als Beispiel nehmen wir hier 3 verschiedene Regeln
  • whitelist für Domains. Squid blockiert niemals aufgelistete Internetseiten. Eine Listendatei wird gebraucht.
  • blacklist für Domains. Squid blockiert die aufgelistete Internetseiten. Eine Listendatei wird gebraucht.
  • Zeitsteuerung. In bestimmten Zeiten steht Internet nicht zur Verfügung.

In dem Ordner /etc/squid werden zwei Testdateien erstellt, mit dem Namen whitelist und blacklist

 

acl domain-access dstdomain "/etc/squid/whitelist"
http_access allow domain-access

acl domain-deny dstdomain "/etc/squid/blacklist"
http_access deny domain-deny

acl sperrzeit2 time MTWHFAS 14:00-15:00
http_access deny sperrzeit2

acl myNetzwerk src 172.16.0.0/22
http_access allow myNetzwerk

 

In der Datei /etc/squid/whitelist werden Damians aufgelistet, bei den der Zugriff erlaubt ist. So ähnlich würde die Datei aussehen.

.subdomain1.irgendeineDomain.de
.subdomain2.irgendeineDomain.de

 

In der Datei /etc/squid/blacklist werden Damians aufgelistet, bei den der Zugriff NICHT erlaubt ist. So ähnlich würde die Datei aussehen.

.irgendeineDomain.de
.andereDomain.de
.weiterDomain.com

 

Wenn wir die Regel setzen, können wir WEB-Seiten der Domain: irgendeineDomain.de nicht aufrufen, aber zwei Subdomain der Domain: irgendeineDomain.de befinden sich in der whitelist, deshalb kann man die aufrufen.
Die nächste Regel begrenzt den Internetzugriff. Zwischen 14:00 und 15:00 Uhr steht Internet nicht zur Verfügung.

Punkt
Nach der Änderung bzw. Anpassung der /etc/squid/squid.conf Datei, können wir die Einstellungen mit folgendem Befehl neu laden.

 

# squid -k reconfigure

Active Directory. Squid Konfiguration, wenn Clients in der Domäne

Wenn sich die Clients in der Domäne befinden, können wir Squid so konfigurieren, dass Authentifizierung gebraucht wird. Auf dieser Weise haben wir mehr Kontrolle und können Benutzerabhängig, bzw. Gruppenabhängig Regeln setzen.

Die Voraussetzungen
          - wir haben einen Domänen-Controller im Netz
          - wir haben einen Fileserver auf Debian Basis der als Mitglied der Domäne ist
          - wir haben den Squid-Dienst auf dem Fileserver installiert.
          - die Clients befinden sich in der Domäne. 

Punkt
Der Samba Dienst auf dem Fileserver (oder auf einem anderen Server) ist als Mitglied der Domäne (ADS) konfiguriert. In dem Artikel Fileserver-fs1 wird genau beschrieben, wie man so einen Server auf Debian Basis aufsetzt.
Der Abschnitt [global] in der /etc/samba/smb.conf sollte ungefähr so aussehen.

 

[global]
   workgroup = MONO
   realm = MONO.PLAN
   netbios name = FS1
   server string = Fileserver
   security = ADS
   idmap config * : backend = tdb
   idmap config * : range = 3000-7999
   idmap config MONO : backend = rid
   idmap config MONO : range = 10000-999999
   idmap config MONO : schema_mode = rfc2307
   idmap config MONO : unix_nss_info = yes
   template shell = /bin/bash
   domain master = no
   winbind nss info = rfc2307
   winbind use default domain = Yes   # wichtig
Punkt
Wir testen Winbindd-Funktionalität wbinfo -t

 

# wbinfo -t

 

So ähnliches sollte erscheinen.

 

checking the trust secret for domain MONO via RPC calls succeeded
Punkt
Wir testen die winbindd-Benutzerauthentifizierung wbinfo -a mydomain\\myuser%mypasswd. Es wird die Domäne und ein existierender Benutzername mit Passwort verwendet.
Mit wbinfo -u werden alle Benutzer der Domäne aufgelistet und mit wbinfo -g alle Gruppen der Domäne. Winbind wird eingesetzt, auf dieser Weise wird NTLM-Authentifizierung verwendet.

 

# wbinfo -a MONO\\manfred%mypasswd

 

So ähnliches sollte erscheinen.

 

plaintext password authentication succeeded
challenge/response password authentication succeeded
Punkt
Passwort des Maschinenaccounts wird täglich geändert. Das kann man mit folgendem Befehl realisieren.

 

# net rpc changetrustpw

 

In unserem Fall wird der Job jeden Tag um 01:30 Uhr ausgeführt.
Den Befehl können wir als Cronjob in /etc/crontab definieren. Der Eintrag würde so ähnlich aussehen.

 

30 1   * * *   root  net rpc changetrustpw
Punkt
Der Benutzer proxy wird zu der Gruppe winbindd_priv zugefügt.

 

# gpasswd -a proxy winbindd_priv
Punkt
Es wird ntlm Authentifizierung in squid getestet. Nach Ausführen des folgenden Befehls sollten wir einen Benutzernamen mit dem Passwort von der Domäne eingeben. Zwischen Benutzernamen und Passwort ist ein Leerzeichen. Hier ein Beispiel. Sollte ein OK herauskommen

 

# /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
manfred mypasswd
OK

Squid.conf-Einstellungen

Punkt
In der /etc/squid/squid.conf Datei suchen wir nach dem auth_param basic Ausdruck. Wir lassen so wie es ist, aber  nach dieser Zeilen fügen wir folgenden Inhalt ein.

 

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30

# warning: basic authentication sends passwords plaintext
# a network sniffer can and will discover passwords
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours


acl AuthorizedUsers proxy_auth REQUIRED
http_access allow all AuthorizedUsers

 

Nach dem Neustart des squid Dienstes müsste unsere squid Server einsatzbereit sein. Nur die Domänen Client können den Proxy nutzen. Sollte sich ein andere Benutzer (nicht Domänen-Benutzer) an einem Client anmelden und Browser mit Proxy Einstellungen nutzen möchte, erscheint ein Fenster für die Eingabe des Benutzernamen und des Passworts.

Internet-Zugriff von Benutzer die sich nicht in der Domäne befinden.

Hier geht es von allem um Dienste auf dem Client die aus irgendeinem Grund auf Server im Internet zugreifen wollen bzw. müssen. Nehmen wir hier z.B. Autodesk Programme.
Nach der Installation sind bestimmte Dienste aktiv, das sind meistens Systemdienste, z.B. Lizenz Manager, also die werden nicht von dem angemeldetem Benutzernamen ausgeführt. Wenn die versuchen sich mit einem Server im Internet zu verbinden, erscheint ein Fenster auf dem Desktop um Benutzernamen und Passwort für den Proxy einzutragen. Wenn wir das vermeiden wollen, müssen wir die /etc/squid/squid.conf anpassen,
Wie können z.B. definieren, dass für bestimmte Internetseiten keine Authentifizierung gebraucht wird. Das machen wir am besten in whitelist
Die angepasste Änderungen würden in unserem Fall so aussehen.

 

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30

# warning: basic authentication sends passwords plaintext
# a network sniffer can and will discover passwords
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

acl domain-access dstdomain "/etc/squid/whitelist"
http_access allow domain-access

acl AuthorizedUsers proxy_auth REQUIRED
http_access allow all AuthorizedUsers

 

In der Datei /etc/squid/whitelist werden die Domains aufgelistet bei denen keine Authentifizierung gebraucht wird. Hier ein kleines Bespiel

 

.autodesk.com
.microsoft.com
.google.de

Squid-Einstellungen bei zwei Proxy-Server (Squid)

In besonderen Fällen in größeren Firmen werden möglicherweise mehrere Proxyserver verwenden. Auch hier mir kleiner Anpassung in /etc/squid/squid.conf kann man den Internetzugang realisieren.

Punkt
In der Datei /etc/squid/squid.conf suchen wir die Zeichenkette cache_peer parent.foo.net Unterhalb dieser Zeilen können wir folgende Zeilen einfügen. Der erste Proxyserver hat den Namen: fs2.mono.plan und nutzt
den Port 3128. Der zweite Proxyserver ohne Authentifizierung  hat nedn Namen: proxy.firma.lan und nutzt
den Port 80

 

        acl local-servers dstdomain .fs2.mono.plan
        cache_peer proxy.firma.lan  parent 80 0 no-query default
        never_direct deny local-servers
        never_direct allow all