Squid 3.0 in ein Active Directory von Microsoft integrieren

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.

HTTP-Proxy

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.

This entry was posted in Computer & Technik, Kommunikationstechnik, Linux, Windows and tagged , , , , , . Bookmark the permalink.

32 Responses to Squid 3.0 in ein Active Directory von Microsoft integrieren

  1. Christian says:

    Ich bin genau nach deiner Anleitung vorgegangen, aber es funktioniert trotzdem noch nicht bei mir. Es kommt zwar das Authentifizierungsfenster, aber das poppt immer wieder auf! Egal was ich da eingebe.

  2. kristian says:

    Geht es denn, wenn man den Befehlt squid_ldap_group von Hand ausführt?

    Mann muss dazu natürlich den richtigen Kontext aus dem Active Directory angeben. Es sollte ungefähr so aussehen:

    /usr/lib/squid3/squid_ldap_group -R -b “dc=firma,dc=local” -D “cn=SquidAuth,cn=Users,dc=firma,dc=local” -w “password” -f “(&(sAMAccountName=%u)(memberof=cn=%a,cn=Users,dc=firma,dc=local))” -h 172.30.4.31:3268

    Danach bekommt man ein Prompt in dem man den Benutzernamen und den Gruppennamen nur durch ein Leerzeichen getrennt eingeben kann. Wenn danach Return drückt bekommt man ein OK zurück, wenn der User in der Gruppe ist. Falls der Benutzer dies jedoch nicht ist oder etwas anderes schief geht bekommt man ein ERR.

  3. Christian says:

    Ich gebe meinen Benutzer ein “gfub9001″ und die Gruppe “internet”

    Das kommt raus:

    gfub9001 internet
    squid_ldap_group WARNING, could not bind to binddn ‘Invalid credentials’
    ERR

  4. kristian says:

    Das klingt so als wenn der Benutzer falsch ist oder nicht die nötigen Rechte hat.

  5. Christian says:

    mein squidauth ist in der OU “Users” und in den Gruppen “Domänen-Benutzer” und “RAS- und IAS Server”

    in der OU “Users” habe ich eine Gruppe “internet” angelegt und dort ist der Benutzer “gfub9001″ Mitglied. Die Gruppe “internet” selbst ist Mitglied keiner weiteren Gruppe und als “Sicherheitsgruppe – global” angelegt.

    gpupdate /force auch schon durchgeführt.

  6. kristian says:

    Wenn das eine Standardinstallation von Windows ist, müsste es cn=Users und nicht ou=Users sein. Users ist nämlich keine ou. Könnte das der Fehler sein?

  7. kristian says:

    Ich habe das in meinem Beispiel auch gleich mal auf cn=Users korrigiert. Man sollte sich in solchen Beispielen am besten immer an den Standard halten ;-)

  8. Christian says:

    Ich habe schon beides probiert, gleiches Ergebnis.

    /usr/lib/squid/squid_ldap_group -P -R -b “DC=Fuldabrueck,DC=local” -D “CN=squid,CN=Users,DC=Fuldabrueck,DC=local” -w “hausbauer770″ -f “(&(objectclass=person)(sAMAccountName=%v)(memberof=CN=%a,CN=Users,DC=fuldabrueck,DC=local))” -h 10.177.64.51:3268

    so habe ich das auf der Konsole als root ausgeführt. Dannach habe ich dann folgendes eingegeben.

    gfub9001 internet

    Fehler:

    squid_ldap_group WARNING, could not bind to binddn ‘Invalid credentials’
    ERR

  9. kristian says:

    Bei mir klappt das wenn ich den Benutzernamen und das Passwort anpasse?!? Ich habe es sogar bei zwei AD’s probiert. Allerdings musste ich die Anführungszeichen aus Deinem Beispiel neu schreiben, weil sie nicht mehr ASCI waren. Das hat aber warscheinlich mein Blog verkonvertiert.

    Das Invalid credentials kommt bei mir nur, wenn der Benutzername oder das Passwort falsch sind.

  10. Christian says:

    So, ich habe jetzt mal das Passwort von “squid” zurückgesetzt, da ich schon dachte, dass ich mich evtl verschrieben hatte. Aber es klappt immernoch nicht. So sieht mein Test aus:

    root@sfbkproxy:~# /usr/lib/squid/squid_ldap_group -P -R -b “DC=fuldabrueck,DC=local” -D “CN=squid,CN=Users,DC=fuldabrueck,DC=local” -w “password” -f “(&(objectclass=person)(sAMAccountName=%v)(memberof=CN=%a,CN=Users,DC=fuldabrueck,DC=local))” -h 10.177.64.51:3268
    squid
    ERR
    gfub9001
    ERR
    gfub9001 internet
    squid_ldap_group WARNING, could not bind to binddn ‘Invalid credentials’
    ERR

    Muss ich noch zusätzliche tools/module installieren? Auf dem Proxy-Server ist nur Squid mit SquidGuard drauf. Webmin und Open SSH. Ich habe auch noch meinen AD-Server in der etc/hosts eingetragen, und nslookup ist ok. Mit nmap habe ich auch die ports vom AD-Server gescannt, und da sind beide offen 389, 3268.

  11. kristian says:

    Wenn ich das bei mir etwas angepasst eingebe get es:

    server02:~# /usr/lib/squid3/squid_ldap_group -P -R -b “DC=TESTDOM,DC=local” -D “CN=SquidAuth,CN=Users,DC=TESTDOM,DC=local” -w “password” -f “(&(objectclass=person)(sAMAccountName=%v)(memberof=CN=%a,CN=Users,DC=TESTDOM,DC=local))” -h 172.30.4.31:3268

    testuser1 InternetZugang
    OK
    testuser2 InternetZugang
    ERR

    Der testuser1 ist in der Gruppe der testuser2 nicht. Interessant ist bei Dir, dass der Fehler erst kommt, wenn eine Gruppe mit angegeben wird. Kann es sein, dass der User keine Berechtigungen für die Gruppe hat?

  12. Christian says:

    Folgende neue Erkenntnisse. Wenn ich meinen SquidAuth Benutzer mit dem Administrator ersetze, dann funktioniert es, aber auch nur bedingt, denn jetzt kommt jeder aus dem AD ins Internet. Das mit der Gruppe haut jetzt nur nicht hin.

    Die Gruppe “internet” ist aber vorhanden, und wenn ich in den Eigenschaften gucke, steht da unter Members nur gfub9001, und unter Members of ist nichts eingetragen.

  13. kristian says:

    Der Benutzer mit dem man die Abfrage macht sollte – wie in meinem Blogeintrag beschrieben – in der Gruppe “RAS- IAS-Server” sein. Normale Benutzer dürfen im AD keine Gruppenzugehörigkeiten abfragen.

    Ist die Gruppe den auch unter Users vorhanden? Und steht die Gruppe auch bei dem Benutzer unter “Members Of”?

  14. Christian says:

    Ja, steht unter Users und bei “gfub9001″ ist auch die Gruppe “internet” aufgelistet!

  15. kristian says:

    Dann gehen mir auch langsam die Ideen aus. Bie mir gehts ;-(

    Ich habe das ganze allerdings noch nicht in einem reinen Windows 2003 AD getestet. Ich kann mir allerdings nicht so recht vorstellen, dass sich ein DC hier anders verhält, wenn man den AD auf Windows Server 2003 herauf stuft.

  16. Christian says:

    Du wirst es kaum glauben, aber jetzt geht alles! Ich hatte bei einem cn=Users noch ein ou davor stehen, und ich musste noch 2 Zeilen in meiner squid.conf auskommentieren.

    #acl gfub_lan src 10.177.64.0/24
    #http_access allow gfub_lan

    Dann ging es auf einmal! Vielen Dank für deine Hilfe! Ich hoffe, dass noch viele mit einem ähnlichen Problem noch auf deinen Blog stoßen werden.

  17. kristian says:

    Super, freut mich das ich helfen konnte ;-)

  18. Christian says:

    Noch eine Frage, wie kann ich meine Linux-PCs von der Authentifizierung ausschließen. So das die keine Authentifizierung brauchen?

    kann man hinter

    acl localnet proxy_auth REQUIRED

    einfach !10.177.64.103

    dahinter setzen!?

  19. kristian says:

    Da bin ich mir nicht ganz sicher. Könnten aber klappen. Ansonsten kann man ja verschiedene ACLs definieren. Z.B.:

    acl normal_networks src 10.177.64.128/25
    acl admin_networks src 10.177.64.0/25

  20. Martin says:

    Danke erstmal für die Veröffentlichung.

    dumme Frage: localnet definierst du woanders, oder?

    Gruß Martin

  21. kristian says:

    Hallo Martin!

    Ja, localnet sollte definiert sein. Ich habe der Übersichtlichkeit halber nur die hinzugefügten Zeilen Veröffentlicht. Als Vorlage habe ich die Standard-Konfig von Squid bei Debian genommen. Wenn Du möchtest schicke ich Dir die gesamte Konfig per E-Mail

    Gruß
    Kristian

  22. Martin says:

    Hallo Kristian,

    Da wäre ich dir doch mal mega dankbar :)
    Muss AD-Gruppen mit verschiedenen acls umsetzen können

    Danke schon mal für das file und Grüße aus Ulm
    Martin

  23. kristian says:

    O.K

    Die Konfig ist unterwegs ;-)

  24. Martin says:

    danke Kristian, ist angekommen :)

  25. Eike says:

    Moin!

    ich finde dieses Howto sehr hilfreich. Habe alles zum Laufen bekommen. Habt ihr auch Probleme mit Umlauten oder speziellen Sonderzeichen? Wenn zb. ein Passwort komplex sein soll, funktionieren manche Sonderzeichen nicht.

    Ich weiß soweit, daß es daran liegt das ADS UTF8 spricht und die HTTP Authentifizierung über ASCII läuft, Squid die Userdaten aber einfach nur so weitergibt. Wenn ich zb. den ganzen Kram in der Konsole teste (bei Ubuntu auch UTF8) funktionieren die komplexen Kennwörter ohne weitere Probleme. Mache ichs per Browser “Access Denied”

    Seid ihr auf ähnliche Probleme gestoßen? Es gibt da einen Patch, allerdings habe ich keine Lust Squid komplett from Source zu machen. Bis der Rund läuft und man ja nix vergessen hat. Vergeht ja einige Zeit!

    Anbei die URL zur Diskussion.
    http://www.squid-cache.org/mail-archive/squid-users/200807/0203.html

  26. kristian says:

    Moin Eike!

    Wir haben bis jetzt keine Probleme mit Passwörtern gehabt. Zumindest “!” und “?” funktioniert.

    Gruß
    Kristian

  27. Rainer says:

    Hi,

    Du schreibst:

    “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.” Muss dies in der squid.conf eingetragen werden?

    Kannst Du mir evtl. mal Deine komplette squid.conf zumailen, wäre Klasse, vielleicht noch mit Angabe des genauen Gruppennamens im Active Directory, welche den Zugriff haben sollen. Ich komm hier auf keinen grünen Zweig ;-( Hat sich eigentlich was zum Server 2008 geändert oder sollte das genauso funktionieren?

    Gruß
    TiTux

  28. kristian says:

    Hallo TiTux!

    Habe Dir die Config per Mail geschickt. Für so einen Blog-Eintrag ist sie etwas zu unhandlich. Mit 2008 habe ich es noch nicht versucht. Poste doch mal, um Du es geschafft hast. Demnächst wollte ich auch mal auf 2008R2 updaten. Dann kommt das gleiche auf mich zu.

    Gruß
    Kristian

  29. TiTux says:

    Hi Kristian,

    so, Squid läuft und die Performance ist echt gut. Unter Windows 2008R2 gab es nichts zu beachten, hat sich wohl zwischen 2003 und 2008 nicht viel getan, was den Bereich LDAP Anbindung angeht. Als nächstes stehen zwei Punkte auf dem Programm:

    Logfile Auswertung mit AWStats und Contentfilterung mit DansGuardian.

    Vielen Dank für Deine Hilfe und der super Unterstützung!

    Gruß
    TiTux

  30. Simon says:

    Danke für diese geniale Anleitung, ich habe locker 3h im WWW recherchiert weil ich es nicht hinbekommen habe Squid3 gegen Windows SBS 2008 zu authentifizieren.
    Aber jetzt klappt es :)

    Danke!

  31. Michael says:

    Hallo!!

    Vielen Dank für das hilfreiche How-To.
    Kann man die Passwortabfrage eigentlich auch ausschalten, wenn der PC sich im localnet befindet und das Windowsbenutzer genutzt wird??
    Verstehst du, was ich meine?

    Vielen Dank für die Hilfe.

    Micha

  32. kristian says:

    Hallo Micha!

    Du meinst also, ob man dem Browser beibringen kann automatisch den aktuellen Windowsbenutzer für den Proxy zu verwenden? Da muss ich passen. Das weiß ich jetzt nicht. Das kommt aber auch sicherlich darauf an, welchen Browser man verwendet. Das das Passwort für den Proxy aber in den gängigen Browsern gespeichert werden kann, muss man dieses ja auch nur einmal eingeben und abspeichern.

    Gruß
    Kristian

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*


*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">