Es war einmal ein wunderschöner warmer virtueller Dschungel in Südamerika, und dort lebte ein Tintenfisch-Server. Hier ist ein wahrnehmbares Bild des Netzwerks:
<the Internet>
|
|
A | B
Users <---------> [squid-Server] <---> [LDAP-Server]
Wenn die Users
Anfrage Zugriff auf das Internet, squid
fragen Sie ihren Namen und Reisepass, authentifizieren Sie sie durch LDAP
und wenn LDAP sie genehmigt, dann gewährt er ihnen.
Alle waren glücklich, bis ein paar Schnüffler den Pass zwischen Benutzern und Tintenfisch gestohlen hatten [Pfad A]. Diese Katastrophe geschah, weil Tintenfisch Basic-Authentication
Methode verwendet.
Die Leute aus dem Dschungel versammelten sich, um das Problem zu lösen. Einige Hasen boten NTLM
Methoden an. Schlangen bevorzugt, Digest-Authentication
während Kerberos
von Bäumen empfohlen.
Immerhin waren viele Lösungsvorschläge von Leuten aus dem Dschungel und alles verwirrt! Der Löwe beschloss, die Situation zu beenden. Er rief die Regeln für Lösungen:
- Soll die Lösung sicher sein!
- Funktioniert die Lösung für die meisten Browser und Software (z. B. Software herunterladen)?
- Soll die Lösung einfach sein und kein anderes riesiges Subsystem (wie Samba-Server) benötigen?
- Sollte die Methode nicht von einer bestimmten Domain abhängen. (zB Active Directory)
Dann eine sehr vernünftige, umfassende und clevere Lösung, die von einem Affen angeboten wird und ihn zum neuen König des Dschungels macht!
Kannst du raten, was die Lösung war?
Tipp:
Der Weg zwischen squid
und LDAP
ist durch den Löwen geschützt, daher muss die Lösung diesen nicht sichern.
Hinweis: Tut mir leid, wenn die Geschichte langweilig und chaotisch ist, aber das meiste davon ist echt! =)
/~\/~\/~\ /\~/~\/~\/~\/~\ ((/~\/~\/~\/~\/~\)) (/~\/~\/~\/~\/~\/~\/~\) (//// ~ ~ \\\\) (\\\\( (0) (0) )////) (\\\\( __\-/__ )////) (\\\( /-\ )///) (\\\( (""""") )///) (\\\( \^^^/ )///) (\\\( )///) (\/~\/~\/~\/) ** (\/~\/~\/) *####* | | **** /| | | |\ \\ _/ | | | | \_ _________// Thanks! (,,)(,,)_(,,)(,,)--------'
Aktualisieren:
Massimo erklärte, dass die Authentifizierungsmethode zwischen Users
- squid
und squid
- LDAP
nicht identisch sein muss. Wir können eine beliebige Methode verwenden, um Authentifizierungsinformationen von Benutzern abzurufen, und eine beliebige Methode, um erfasste Daten zu authentifizieren.
Es gibt jedoch ein Problem: Die Eingabe / Ausgabe aller Arten von Authentifikatoren ist nicht identisch. Beispielsweise:
- Ein
Basic
Authentifizierer sollte das "Benutzername Passwort" -Paar in einer Zeile lesen und antworten,OK
wenn der Benutzerpass korrekt ist oderERR
- Ein
Digest
Authentifikator sollte a lesenusername:realm
und einen hexadezimalen Code vonHA(A1)
oder a beantwortenERR
.
Obwohl es keine direkte Beziehung zwischen der Client-Squid-Methode und der Squid-LDAP-Methode gibt, müssen die vom Client erfassten Daten mit der im Squid-LDAP-Teil verwendeten Methode kompatibel sein. Wenn wir also die Authentifizierungsmethode auf der Benutzerseite ändern, sollten wir möglicherweise auch unseren Authentifikator ändern.
Das Problem vereinfacht sich also zu:
In der ersten Ebene suche ich (der Affe!) Nach einer guten Authentifizierungsmethode auf Benutzerseite. Welche Methode empfehlen Sie, welche ist sicher und wird von den meisten Browsern unterstützt ? ich bin in verwirrt zwischen
NTLM
,Kerberos
undDigest
.Wo finde ich einen Authentifikator, der Anmeldeinformationen der ausgewählten Methode unterstützt und über LDAP authentifiziert.
Antworten:
Kerberos ist keine Option für die HTTP-Authentifizierung. NTLM wird in keinem anderen Browser als dem IE gut unterstützt. Basic ist nur dann sicher, wenn Sie es hinter HTTPS stellen, was AFAIK Squid nicht kann. Sie bleiben also bei Digest.
quelle
digest_ldap_auth
(kommt mit Squid) gegen den LDAP-Server implementiert wird .Negotiate
Mechanismus; Ich habe es erfolgreich mit Apache und Squid verwendet. SSL ist auch eine Option für Squid, nur Debian aktiviert es aufgrund von Lizenzproblemen nicht.Eine interessante Funktion, die Ihnen dabei helfen könnte, ist, dass die Methode, mit der Squid den Client-Browser nach Authentifizierung fragt (Pfad A), in keiner Weise mit der Methode verknüpft sein muss, mit der die vom Benutzer angegebenen Anmeldeinformationen überprüft werden (Pfad B) ). Dies bedeutet zB, dass Sie Squid dazu bringen können, mit Client-Browsern über NTLM zu "sprechen", aber dann können Benutzer sehr gut anhand der internen Linux-Benutzerdatenbank (/ etc / passwd) überprüft werden. Es ist nicht erforderlich, dass Anmeldeinformationen, die mit NTLM (auf Pfad A) erworben wurden, tatsächlich für eine Windows-Domäne (auf Pfad B) validiert werden. Gleiches gilt für jede mögliche Kombination von clientseitigen und serverseitigen Authentifizierungsmethoden.
Dies bedeutet in Ihrem Fall, dass Sie Squid sicher so konfigurieren können, dass die NTLM-Authentifizierung von Client-Browsern anstelle der Standardauthentifizierung angefordert wird, und dass Sie in keiner Weise Samba / WinBind / AD / whatever verwenden müssen.
Sie können also die von Ihnen gewünschte Methode für die clientseitige Authentifizierung auswählen und die Überprüfung der Benutzer anhand eines LDAP-Servers fortsetzen, nachdem sie ihre Anmeldeinformationen mit der von Ihnen ausgewählten Methode angegeben haben.
Die Magie geschieht natürlich in
squid.conf
:Jede
auth_param
Direktive ermöglicht eine spezifische Authentifizierung für Client-Browser (Pfad A), während der "Programm" -Teil festlegt, was Squid tatsächlich verwendet, um die von Benutzern bereitgestellten Anmeldeinformationen zu validieren. Sie können hier ein beliebiges Authentifizierungsprogramm verwenden (auch ein benutzerdefiniertes), sofern es eine Benutzer-ID und ein Kennwort erhalten und mit "Ja" oder "Nein" antworten kann.Sie müssen nur den Authentifikator verwenden, den Sie für Ihre LDAP-Abfrage verwenden, und ihn in die Anweisungen "auth_param ntlm" oder "auth_param digest" einfügen, anstatt in die Anweisung "auth_param basic", in der er sich jetzt befindet.
Aktualisieren:
Sie sollten auf jeden Fall squid_ldap_auth als Ihren Authentifikator verwenden, aber ich kann Ihnen nicht genau sagen, wie, ohne Einzelheiten über den von Ihnen verwendeten LDAP-Server.
In Bezug auf die clientseitige Authentifizierung sollte jeder gut sein. Ich bin ziemlich zufrieden mit NTLM und die meisten Browser unterstützen es heutzutage.
Eine solche Konfiguration würde in squid.conf so aussehen:
Hierbei werden Benutzeranmeldeinformationen (Pfad A) unter Verwendung von NTLM abgefragt und anschließend anhand eines LDAP-Servers (Pfad B) überprüft. Diese "Parameter" hängen jedoch streng von Ihrer LDAP-Implementierung und -Konfiguration ab.
Dies könnte auch helfen: http://www.cyberciti.biz/tips/howto-configure-squid-ldap-authentication.html .
quelle
NTLM
?Kerberos
? Welcher von ihnen wird von den meisten Browsern unterstützt und verfügt bereits über einen Authentifikator, der LDAP unterstützt?auth_param ntlm program /usr/lib/squid/squid_ldap_auth <parameters>
bei mir nicht funktioniert, stürzt Squid ab und wird jedes Mal neu gestartet, wenn ein Benutzer versucht, sich zu authentifizieren. Vielleicht, weilparameters
ich das Falsche benutze , aber ich benutze die gleichen Parameter mitbasic
und funktioniert in Ordnung. Irgendwelche Ideen?