schlachter
Goto Top

squid ldap auth an WIndows 2003 Domain

Hallo Leute,
ich steh vor dem Problem, dass ich versuche, eine squid Proxy einzurichten, an dem sich die User authentifizieren sollen. möglichst ganz transparent. Jetzt habe ich da was mit Ldap gesucht, und gefunden, dass es mit squid_ldap_auth gehen soll. Aber das geht doch nicht ganz so einfach, wie ch mir das vorgestellt hatte. Hat jemand von euch das schon mal hinbekommen. Wenn ja, dann bitte wie, oder wenn ihr es auch versucht habt, dann schreibt doch bitte, wie weit ihr gekommen seid. Auch wärs mal schön bissel mehr über das LDAP Verhalten von W2K3 zu erfahren. Ich glaub nicht, dass das rfc konform ist. Ich wollte direkt in den LDAP Einstellungen (Suse) auf die Users zugreifen, aber das ginge nicht mit ou=Users. Ich konnte aber direkt im AD eine neue ou User erstellen. WEiß da jemand bescheid?

Content-Key: 12897

Url: https://administrator.de/contentid/12897

Printed on: April 19, 2024 at 13:04 o'clock

Member: STAR71
STAR71 Sep 23, 2005 at 19:50:25 (UTC)
Goto Top
Schlachter wrote:

ich steh vor dem Problem, dass ich versuche,
eine squid Proxy einzurichten, an dem sich
die User authentifizieren sollen.
möglichst ganz transparent. Jetzt habe
ich da was mit Ldap gesucht, und gefunden,
dass es mit squid_ldap_auth gehen soll. Aber
das geht doch nicht ganz so einfach, wie ch
mir das vorgestellt hatte. Hat jemand von
euch das schon mal hinbekommen. Wenn ja,
dann bitte wie, oder wenn ihr es auch
versucht habt, dann schreibt doch bitte, wie
weit ihr gekommen seid.


Rein grundsätzlich vorweg:
Squid _darf_ nicht im "transparent mode" laufen, wenn
Authentizierung verwendet werden soll; sprich es _muss_
auf den Clients der Proxy korrekt eingetragen werden und
Squid muss entsprechend konfiguriert sein (kein http_accel_*)


Ich habe es gestern nach einigem Testen hinbekommen,
IPcop mit Squid und Marco Sondermann's ADVproxy
mit Authentizierung gegen eine W2K3 Domain (sowohl
mit LDAP als auch mit NTLM) zum Laufen zu bringen.


Vorteil von NTLM (via ntlm_auth) ist, dass die Authentizierung
völlig transparent ist (wenn vom Browser unterstützt) und kein
eigenes Fenster zur Authentizierung auf geht, dafür hat man
keinerlei weitere Kontrolle über den Zugriff - wenn ein User
sich ans AD angemeldet hat oder gültige Credentials übergibt,
ist er authentiziert und kann surfen.

Achja, der Domain Controller, gegen den man authentiziert,
muss NBT (NetBIOS over TCP) enabled haben, sonst geht
die Authentizierung nicht. Das merkt man daran, dass das
Browser-Fenster ewig versucht, die Seite zu öffnen und erst
irgendwann eine Fehlermeldung kommt. Die macht aber
keinen Sinn, weil sie impliziert, dass es einen DNS-Fehler gibt.


Die Vorteile von squid_ldap_auth sind, dass es gegen jegliches
Directory authentizieren kann, nicht nur gegen ein AD, und dass
zB. auch auf eine (oder mehrere) Gruppenmitgliedschaften
geprüft werden kann.

Nachteil ist die relativ komplexe Syntax von LDAP-Queries und
DNs (Distinguished Names) und dass man ein W2K3-Directory
nicht mehr anonym browsen kann und daher einen User braucht,
der entsprechende Rechte hat (in der Fachsprache heisst dieser
Vorgang "bind to the directory").

Ein weiterer Nachteil ist, dass LDAP-Authentizierung niemals
völlig transparent funktioniert, sondern immer ein Fenster
zur Eingabe der Benutzer-Credentials auffordert. Solange man
das Browser-Fenster offen lässt, kommt die Abfrage auch nicht
wieder, erst wenn ein neues Browserfenster (technisch korrekt:
eine neue Instanz des Browsers) geöffnet wird, wird erneut
abgefragt.

Weiters muss man aufpassen, ob der Directory-Server (im Falle
von W2K3 ein Domain Controller) ein Global Catalog Server ist
oder nicht. Ist er es, dann verwendet man nicht den Port 389
(wie für LDAP üblich), sondern den Port 3268 (Global Catalog),
sonst gibt es Brösel.

Hat man keinen GC zur Authentizierung zur Verfügung, dann
funktioniert die Authentizierung zwar grundsätzlich, aber es
gibt dann weitere Einschränkungen, aber das würde den
Rahmen hier sprengen (Details bei Bedarf per Mail von mir).

Zum Testen von LDAP-Queries gegen einen W2K3-DC/GC gibt
es von Microsoft sogar ein eigenes Tool, das mit Windows
(allerdings nur W2K3 Server) ausgeliefert wird -- LDP.
Dieses bekommt man, wenn man die Support Tools, die sich
auf der Server-CD befinden (suptools.msi) installiert.

Das Tool ist nicht ganz einfach zu bedienen und man muss schon
einiges an Ahnung davon haben, wie LDAP grundsätzlich geht
(was die BaseDN ist, was eine OU, ein CN, ein DN usw. ist),
sonst wird's mühsam.


Hier zwei Beispiele für funktionierende squid.conf-Einträge:


a) via ntlm_auth
(NetBIOS-Name der Domain: MYDOMAIN, NetBIOS-Name des DC: MYDC)

auth_param ntlm program /usr/lib/squid/ntlm_auth MYDOMAIN/MYDC
auth_param ntlm children 4
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 60 minutes

Der letzte Parameter gibt an, wielange die Authentizierungs-Information
von Squid gecached wird; sprich wie oft die User- und Passwort-Daten
gegen das AD gecheckt werden.


b) via squid_ldap_auth
(Domain-Name: ads.local, Domain-Controller-IP: 192.168.0.1,
Bind-User: LDAPquery im Folder "Users", Passwort: password,
der Domain Controller ist gleichzeitig Global Catalog Server)

auth_param basic program /usr/lib/squid/squid_ldap_auth -b "DC=ads,DC=local" -D "CN=LDAPquery,CN=Users,DC=ads,DC=local" -w password -f "(&(objectClass=person)(sAMAccountName=%s))" -u sAMAccountName -P 192.168.0.1:3268
auth_param basic children 4
auth_param basic realm Internet
auth_param basic credentialsttl 60 minutes

Auch hier gibt der letzte Parameter an, wielange Squid die Authentizierungs-
Information zwischenspeichert; sprich wie oft die User- und Passwort-Daten
gegen das AD gecheckt werden.

Bei LDAP-Authentizierung kann zusätzlich auch geprüft werden, ob der
jeweilige User Mitglied in einer speziellen Gruppe ist, die zB. den Zugriff
zum Internet regelt. In diesem Fall schaut der Query-String anders aus
und die Credentials-TTL muss niedriger gesetzt werden, damit Squid
zeitnah auf Änderungen in der Gruppenmitgliedschaft reagieren kann.


Auch wärs mal schön bissel mehr über das LDAP
Verhalten von W2K3 zu erfahren. Ich glaub
nicht, dass das rfc konform ist.

Stimmt, es hat einen Bug. Es kommt ein Fehler, wenn man über
den LDAP-Port 389 versucht, einen LDAP-Query mittels Search
zu machen und als BaseDN die oberste Ebene des Directories,
also den Domain-Namen selbst (zB. DC=ads,DC=local) angibt.
Dann kommt die Fehlermeldung:
squid_ldap_auth: WARNING, LDAP search error 'Operations error'

Wenn es trotzdem nicht funktioniert, dann stimmen meistens
die LDAP-Queries oder DNs nicht. Aufpassen muss man vor allem
bei Leerzeichen, die man möglichst vermeiden sollte (vor allem
beim Bind-Usernamen und dessen Passwort)

Ich wollte direkt in den LDAP Einstellungen (Suse) auf
die Users zugreifen, aber das ginge nicht mit ou=Users.
Ich konnte aber direkt im AD eine neue ou User erstellen.
WEiß da jemand bescheid?

Das ist kein Bug, sondern ein Feature! face-wink
Es liegt daran, dass der "Users"-Folder im AD "built-in"
ist und keine OU, sondern ein CN. Du musst also statt
"ou=Users,dc=ads,dc=local" => "cn=Users,dc=ads,dc=local"
verwenden, dann funktioniert es.

LG, HTH, Franz
Member: Schlachter
Schlachter Sep 26, 2005 at 08:56:29 (UTC)
Goto Top
Hi, danke für deine detaillierten Antworten. Ich war in letzter Zeit auch schon bissel weiter gekommen. Also die "normale" Authentifizierung am AD hab ich mittlerweile schon geschafft. Es lag da dran, dass überall dc, ou etc klein geschrieben wurde, das AD dies aber groß braucht. Und dann noch das Problem mit den Anführungszeichen. Die mussten bei mir auch weg. Aber das geht jetzt. Jetzt häng ich an der transparenten Authentifizierung über LDAP. Du sagtest zwar, dass dies nicht ginge, aber da denk ich anders. Mir wurde von 2 Leuten gesagt, dass dies möglich sei. Na mal sehen. Vielleicht schaff ich das ja irgendwann. Bin derzeit an Der suche nach einer Möglichkeit dies mittels Kerberos hinzubekommen. rechne mit dabei die meisten Chance aus.
Member: STAR71
STAR71 Sep 26, 2005 at 19:42:33 (UTC)
Goto Top
Schlachter wrote:

Also die "normale" Authentifizierung am AD hab ich mittlerweile schon geschafft.
Es lag da dran, dass überall dc, ou etc klein geschrieben wurde, das AD dies aber
groß braucht.

Kann ich nicht bestätigen - ich habe es sowohl groß als auch klein ausprobiert -
funktioniert beides.

Und dann noch das Problem mit den Anführungszeichen. Die mussten bei mir
auch weg. Aber das geht jetzt.

Ja, Anführungszeichen sind vor allem beim LDAP Query selber ziemlich heikel.

Jetzt häng ich an der transparenten Authentifizierung über LDAP.
Du sagtest zwar, dass dies nicht ginge, aber da denk ich anders.
Mir wurde von 2 Leuten gesagt, dass dies möglich sei. Na mal sehen.

Ich habe auch von einem Freund gehört, dass es gehen soll, aber scheinbar
nicht mit squid_ldap_auth. Ich werde das noch versuchen zu verifizieren.

Vielleicht schaff ich das ja irgendwann. Bin derzeit an Der suche nach
einer Möglichkeit dies mittels Kerberos hinzubekommen. rechne mit dabei
die meisten Chance aus.

Das wird mir wahrscheinlich nichts nützen, weil ich unbedingt neben der
reinen Authentizierung auch die Abfrage einer Gruppenmitgliedschaft
benötige - und das geht meines Wissens ausschließlich über LDAP.
Aber wenn Du etwas rauskriegst, lass' es mich bitte wissen.

LG, Franz
Member: webharvey
webharvey Sep 13, 2006 at 13:51:23 (UTC)
Goto Top
Hi,

hat es schon jemand geschafft, gegen ein AD auf W2K3 zu authentifizieren?
Ich habe den aktuellen 1.4er IPCOP gerade installiert aber es geht nicht face-sad
Ich brauche es nur, damit nur der surfen kann, der im AD drin ist. Gruppen
etc sind da egal.

Thx
Marc
Member: STAR71
STAR71 Sep 13, 2006 at 14:21:01 (UTC)
Goto Top
webharvey wrote:

hat es schon jemand geschafft, gegen ein AD auf W2K3 zu authentifizieren?
Ich habe den aktuellen 1.4er IPCOP gerade installiert aber es geht nicht face-sad
Ich brauche es nur, damit nur der surfen kann, der im AD drin ist. Gruppen
etc sind da egal.

Siehe weiter oben in diesem Thread (erste Antwort von mir):
Du willst ntlm_auth.

Kurz gesagt: Installier' Dir auf Deiner IPcop-Kiste zusätzlich ADVproxy von
Marco Sondermann (=> http://www.advproxy.net/) und konfiguriere die
Authentizierung wie auf seinen Seiten beschrieben, unter Berücksichtigung
meiner Hinweise weiter oben im Thread.

LG, Franz
Member: webharvey
webharvey Sep 13, 2006 at 14:24:47 (UTC)
Goto Top
Hi Franz,

hab ich auch so gemacht, aber es geht leider nicht. Wobei ich mir nicht sicher bin,
ob ich den "BaseDN" richtig gemacht habe. Unsere Domain ist "bhnord.intern"
ich habe dann daraus "DC=bhnord,DC=intern" gemacht. (per ldap Tools von W2K3
mit dem DC connected und dann abgeschrieben)

Marc

Nachtrag: wie enabled man NTB??
Member: STAR71
STAR71 Sep 13, 2006 at 14:59:31 (UTC)
Goto Top
Hallo Marc!

hab ich auch so gemacht, aber es geht leider nicht.
Wobei ich mir nicht sicher bin, ob ich den "BaseDN"
richtig gemacht habe. Unsere Domain ist "bhnord.intern"
ich habe dann daraus "DC=bhnord,DC=intern" gemacht.

Das stimmt soweit auch.

Aber ich dachte, Du willst transparent authentizieren?
Weil dann brauchst Du nämlich ntlm_auth und nicht
squid_ldap_auth und auch keine LDAP-Strings, sondern
NetBIOS-Namen in der squid.conf (siehe auch Beispiel "a"
in meiner ersten Antwort im Thread)

Dh. sollte der NetBIOS-Name eurer Domain "BHNORD" sein
(das nehme ich mal an) und der Domain Controller heißt "DC1",
würde die entsprechende Zeile in der squid.conf so ausschauen:
auth_param ntlm program /usr/lib/squid/ntlm_auth BHNORD/DC1

Überprüfe auf jedem Fall am IPcop, ob es /usr/lib/squid/ntlm_auth
tatsächlich gibt!

Achte bitte darauf, dass transparente Authentizierung über
NTLM nur mit dem MSIE funktioniert und dort auch eingeschaltet
sein muss: Menü "Extras"/"Internetoptionen" => Register "Erweitert"
=> Abschnitt "Sicherheit" => "Integrierte Windows-Authentizierung
aktivieren (erfordert Neustart)". Nachher MSIE beenden und neu starten.

Nachtrag: wie enabled man NTB??
NBT = NetBIOS over TCP/IP

Das enabled man wie folgt (ist NUR am Domain Controller nötig,
gegen den man authentizieren möchte; nicht auf den Clients!)

Rechte Maustaste auf "Netzwerkverbindungen" => "Eigenschaften"
Rechte Maustaste auf die zu ändernde Netzwerkverbindung
(standardmäßig: "LAN-Verbindung") => "Eigenschaften"
"Internet-Protokoll (TCP/IP)" => "Eigenschaften" => "Erweitert"
Register "WINS" - im unteren Bereich bei den "NetBIOS Einstellungen"
muss "NetBIOS über TCP/IP aktivieren" ausgewählt sein!

Optimal wäre es, wenn ihr einen WINS-Server im Netzwerk habt,
aber das ist nicht unbedingt notwendig.

LG, HTH, Franz

PS: Ich verwende englische Server und habe daher die deutschen
Übersetzungen "geraten". Kann sein, dass die jeweilige Einstellung
ein bisschen anders heißt.
Member: webharvey
webharvey Sep 14, 2006 at 11:26:08 (UTC)
Goto Top
So,

ich hab das mal auf unserem IPCOP Test gemacht.
Aber leider kommt noch die Abfrage nach Username face-sad
Wenn ich bei dem AdvProxy in der Config als WebInter-
face nachgucke, ist dort noch LDAP aktiviert, aber den
Eintrag habe ich im /var/ipcop/proxy/squid.conf händisch
erstellt.

NTB: aha, TCP/IP den Begriff NTB kann ich noch nicht ;)

Ciao
Marc
Member: STAR71
STAR71 Sep 14, 2006 at 14:28:48 (UTC)
Goto Top
Hallo Marc,

ich hab das mal auf unserem IPCOP Test gemacht.
Aber leider kommt noch die Abfrage nach Username face-sad

Hast Du im IE nachgeschaut, ob die "integrierte Windows-
Authentizierung", wie weiter oben von mir beschrieben,
aktiviert ist?

Ausserdem: Prüfe bitte, ob euer Domain Controller von
der IPcop-Kiste aus erreichbar ist (ping oder ähnliches).

Wenn ich bei dem AdvProxy in der Config als WebInter-
face nachgucke, ist dort noch LDAP aktiviert, aber den
Eintrag habe ich im /var/ipcop/proxy/squid.conf händisch
erstellt.

Das ist das Problem. Das Web-Interface bekommt händische
Änderungen an der Config (also direkt in den Konfigurations-
Dateien) nicht mit. Das macht aber für die Funktion nichts aus.
Nach der Änderung musst Du aber auf jeden Fall den Squid
beenden und neu starten (oder den IPcop-Rechner rebooten):

squid -k shutdown
[...ca. 15 Sekunden warten...]
restartsquid

NTB: aha, TCP/IP den Begriff NTB kann ich noch nicht ;)

1.) NBT, nicht NTB; manchmal auch "NetBT" bezeichnet
2.) es ist nicht TCP/IP, sondern NetBIOS over TCP/IP

=> http://www.ehsco.com/reading/19960915ncw1.html
=> RFC 1001 (http://www.faqs.org/rfcs/rfc1001.html)
=> RFC 1002 (http://www.faqs.org/rfcs/rfc1002.html)

LG, Franz
Member: Kamenz
Kamenz Aug 17, 2007 at 07:05:18 (UTC)
Goto Top
Moin!
Also wir betreiben 20 Squid's in einem Cluster das sich über LDAP an Windows 2003 Domänen authentifiziert. Bisher die schnellste Auth-Methode die ich gesehen habe. Mit Transparent meinst du Passthrough? Das ist so nicht möglich, jedenfalls nach meinem Wissensstand, dies kannst du mit Microsofts Proxy Server machen. Squid kann entweder transparent laufen das ihn der User nicht bemerkt oder normal und dann mit oder ohne Auth. Mir ist es wichtig das ein Login-Fenster vorgeblendet wird das bestätigt werden muss da du so einen sehr guten Schutz vor Viren und anderem "Zeugs" hast. Bitte bedenke das du mit einem Transparenten oder einem PassThrough-Proxy keinen Schutz mehr hast. Das heißt von innen kann jeder eine Verbindung nach aussen Aufbauen und dann auch andersherum ausser ist sind sehr große ACL's im Spiel die aber keinen Sinn machen da es sehr viel Komfortabler ist über einen GC den Usern per Gruppe o. ä. Internetzugang zugewähren.

Hier nochmal eine Konfiguration eines Kunden-Rechnezentrums,
allerdings ist hier die Abfrage nicht an Gruppen sondern eine OU gebunden:

#Angabe des Auth-Progs für Benutzer LDAP-Abfragen an xxxx.xxx
#
auth_param basic program D:/server/squid/libexec/squid_ldap_auth.exe -b "OU=squid,OU=benutzer,DC=xxxxxxs,DC=xxxx" -D "CN=LDAPquery,CN=Users,DC=xxxx,DC=xxx" -w querypass -f "(&(objectClass=Person)(sAMAccountName=%s))" -u sAMAccountName -P 10.45.176.230:3268
auth_param basic children 5
auth_param basic realm gG@net Webproxy Authentication
auth_param basic credentialsttl 5 seconds


  1. Aktivieren der Anmeldung für Internetnutzer
#
acl password proxy_auth REQUIRED


  1. Angabe des Auth-Progs für Gruppen LDAP-Abfragen an xxxx.xxx
#
external_acl_type ldap_group ttl=5 %LOGIN D:/server/squid/libexec/squid_ldap_group.exe -h 10.45.176.230:3268 -b "ou=squid,ou=benutzer,dc=xxxxx,dc=xxxx" -B "ou=benutzer,ou=squid,ou=benutzer,dc=xxxxx,dc=xxxxx" -f "(&(cn=%g)(member=%u))" -F "sAMAccountName=%s" -D "cn=LDAPquery,cn=users,dc=xxxx,dc=xxx" -w "querypass"
Member: uxmax
uxmax Feb 22, 2008 at 17:46:22 (UTC)
Goto Top
hi
kurze frage:

auth_param basic program D:/server/squid/libexec/squid_ldap_auth.exe -b "OU=squid,OU=benutzer,DC=xxxxxxs,DC=xxxx" -D "CN=LDAPquery,CN=Users,DC=xxxx,DC=xxx" -w querypass -f "(&(objectClass=Person)(sAMAccountName=%s))" -u sAMAccountName -P 10.45.176.230:3268

beudet es hier der user ldap quersy muss in der squid ou sein ? wo genau befindet sich der user ?

danke
gruss
uxmax
Member: uxmax
uxmax Feb 22, 2008 at 17:53:13 (UTC)
Goto Top
ok ich habs nun ... leider bekomm ich nur ein ERR

kann man das irgenwie debuggen..wo das problem liegt?

ich teste diue query direkt in der konsole.. geht das überhaupt ? in evwntlogs des gc seh ich nix

hm
Member: uxmax
uxmax Feb 22, 2008 at 18:17:19 (UTC)
Goto Top
so der squid startet und paresed alle ldap lines ohne fehler
über konsole mit squid -X

ich habe den internet user in ads nach OU-Squid-Users verschoben
"-u sAMAccountName " ist korrekt oder komm dort noch der queryuser rein?

bei der ldap group komm ich nicht mehr mit
--- Squid OU
User OU
dann kommt mit -B users squid users ?


auth_param basic program C:/squid/libexec/squid_ldap_auth.exe -b "OU=Squid,OU=Users,dc=internal,dc=domain,dc=de" -D "CN=tu,CN=Users,dc=internal,dc=domain,dc=de" -w pass -f "(&(objectClass=Person)(sAMAccountName=%s))" -u sAMAccountName -P 192.168.*.*:3268
auth_param basic children 5
auth_param basic realm Webproxy Authentication
auth_param basic credentialsttl 5 seconds


external_acl_type ldap_group ttl=5 %LOGIN C:/squid/libexec/squid_ldap_auth.exe -h 192.168.*.*:3268 -b "ou=Squid,ou=Users,dc=internal,dc=domain,dc=de" -B "ou=Users,ou=Squid,ou=Users,dc=internal,dc=domain,dc=de" -f "(&(cn=%g)(member=%u))" -F "sAMAccountName=%s" -D "cn=queryuser,cn=users,dc=internal,dc=domain,dc=de" -w "pass"