Nach unendlich langer Zeit ist der bekannte und beliebte Proxy Squid in der Version 3.0 erschienen. Die Entwicklung hat fast acht Jahre gedauert. Ich hatte eigentlich auch schon nicht mehr daran geglaubt, dass es jemals eine Version 3.0 geben würde. Wie man den Release Notes entnehmen kann, hat sich einiges geändert. So wurde Squid jetzt in C++ statt C entwickelt und kann das Internet Content Adaptation Protocol (ICAP). Grund genug für mich, mir die neue Version mal etwas näher anzusehen und in der Praxis zu testen. Deshalb habe ich mich für einen Squid 3.0 entschieden, als ich einen kleineren Proxy für ca. 30 Benutzer benötigte.
Aufgabenstellung
Es wird ein HTTP-Proxy für ca. 30 Benutzer benötigt. Die Benutzer sollen sich für Internetzugriffe authentifizieren und teilweise nur zugriff auf bestimmte Internetseiten bekommen. Die Anmeldenamen und Passwörter dafür sind in einem Active Directory hinterlegt. Bei jedem Zugriff soll der Squid also bei einem Windows Domain Controller nachfragen, ob der Benutzer existiert und ob er Internetseiten sehen darf.
Installation
Als Server habe ich einen IBM HS21 Blade mit einer 2 GHz Xeon Dual Core CPU, 1 GB Hauptspeicher und einem Debian Linux 4.0 (64 Bit) verwendet. Er hatte bereits einige andere Aufgaben, die ihn aber kaum auslasteten.
Bei Squid habe ich die PRE5-Version verwendet. Diese kann man bei Debian 4.0 mit dem Befehlt aptitude install squid3
installieren. Das STABLE2-Paket gibt es nur für den „testing-Zweig“ von Debian und es ist wegen einigen Abhängigkeiten nicht so einfach zu installieren. Alle aktuellen Debian-Pakete von Squid 3.0 sind unter http://packages.debian.org/squid3 zu finden.
Konfiguration der Authentifizierung
Um die Anmeldenamen und Passwörter abzufragen, habe ich im Active Directory einen Benutzer SquidAuth
und die Gruppe InternetZugang
angelegt. Der Benutzer sollte aus Sicherheitsgründen keine vollen Admin-Rechte bekommen. Für das abfragen der Gruppenmitgliedschaft reicht es, wenn er Mitglied in der Gruppe RAS- IAS-Server
ist. Falls man die Mitgliedschaften von Gruppen nicht braucht und nur den Benutzernamen und das Passwort gegen den Windows Domain Controller Authentifizieren möchte, reichen sogar normale Benutzerrechte!
Danach habe ich die Konfigurationsdatei des Squid (/etc/squid3/squid.conf) entsprechend erweitert. Wenn der befragte Windows Domain Controller ein Global Catalog Server
ist, sollte der Port 3268
anstelle von Port 389
(wie eigentlich bei LDAP üblich) verwendet werden.
Falls sich ein Windows Domain Controller (der auch Global Catalog Server ist) mit der IP-Adresse 192.168.140.11
für die Domäne DOMAIN.local
verantwortlich fühlt und das LAN den IP-Bereich 192.168.140.0/24
hat, könnte die Erweiterung etwa wie folgt aussehen:
# Authentifizierung an Active Directory
auth_param basic program /usr/lib/squid3/squid_ldap_auth -R -b "dc=DOMAIN,dc=local" -D "cn=SquidAuth,cn=Users,dc=DOMAIN,dc=local" -w "password" -f sAMAccountName=%s -h 192.168.140.11:3268
auth_param basic children 5
auth_param basic realm "Proxy Authentifizierung. Bitte geben Sie Ihren Benutzername und Ihr Passwort ein!"
auth_param credentialsttl 2 hours
external_acl_type InetGroup %LOGIN /usr/lib/squid3/squid_ldap_group -R -b "dc=DOMAIN,dc=local" -D "cn=SquidAuth,cn=Users,dc=DOMAIN,dc=local" -w "password" -f "(&(objectclass=person)(sAMAccountName=%v) (memberof=cn=%a,cn=Users,dc=DOMAIN,dc=local))" -h 192.168.140.11:3268
acl localnet proxy_auth REQUIRED
acl InetAccess external InetGroup InternetZugang
http_access allow InetAccess
Danach fragt Squid beim Aufruf einer Webseite nach einem Benutzernamen und Passwort. Des weiteren erhalten nur noch die Mitglieder der Gruppe InternetZugang
Internetzugriff.
Fazit
Der Squid läuft jetzt seit 14 Tagen ohne Probleme. Bis jetzt habe ich keine Probleme mit Webseiten festgestellt. Sogar das Microsoft Windows Update läuft jetzt. Bei den alten Versionen von Squid funktionierte es meist nicht richtig.
Schreibe einen Kommentar