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 im Firmennetz ein DC vorhanden ist und die Dienste DNS und DHCP aktiv sind. Außerdem existiert ein Fileserver als Mitglied der Domäne. 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.
Wir suchen zuerst die Einträge
http_access allow localhost
danach wird die zweite Zeile angepasst.
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.
Der Cache Ordner wird erstellt, die Rechte des Ordners werden angepasst und der Dienst neu gestartet.
# chown proxy:proxy /var/cache/squid
# systemctl restart squid.service
Die zwei Zeilen in dieser Datei müssen auskommentiert sein. Danach die entsprechenden Dienste neu starten.
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.
satt http_access allow all
http_access allow myNetzwerk
- 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.
.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.
.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.
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.
Der Abschnitt [global] in der /etc/samba/smb.conf sollte ungefähr so aussehen.
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
So ähnliches sollte erscheinen.
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.
So ähnliches sollte erscheinen.
challenge/response password authentication succeeded
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.
manfred mypasswd
OK
Squid.conf-Einstellungen
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 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
.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.
den Port 3128. Der zweite Proxyserver ohne Authentifizierung hat nedn Namen: proxy.firma.lan und nutzt
den Port 80
cache_peer proxy.firma.lan parent 80 0 no-query default
never_direct deny local-servers
never_direct allow all