Flower

Posts Tagged ‘apache’

Windows Server 2003 und Apache auth_ldap

Nachdem ich heute auf einen Windows Server 2003 die aktuellen Updates eingespielt hatte, streikte die LDAP-Apache Anmeldung an einer meiner Intranet-Seiten mit folgenden Meldung:

1
auth_ldap authenticate: user carsten authentication failed; URI / [ldap_search_ext_s() for user failed][Operations error]

Zugegeben war der Windows Server 2003 etwas in Vergessenheit geraten und sehr lange schon nicht mit Updates versorgt, ich kann also nicht sagen, welches hier schuld gewesen ist. Begründung und Lösung wird in diesem ebenfalls sehr alten Bug Report beschrieben. Kurz zusammengefasst liegt das Problem möglicherweise daran, dass bei der Abfrage eines Benutzers mehrere Referenzen zurückgeliefert werden. Umgangen werden kann dies, indem man etwas später erst in den Baum einsteigt, z.B. nur in der OU sucht, in der auch die Benutzer liegen:

1
AuthLDAPURL "ldap://mydc.mydomain.local:389/ou=users,dc=mydomain,dc=local?sAMAccountName?sub?(objectClass=*)"

Sollte dies nicht möglich sein, weil man z.B. in mehreren OUs suchen möchte oder muss, so kann man seine » AuthLDAPURL« auf den »Global Catalog« verlegen, hier werden die bösen Referenzen nicht mit zurückgeliefert. Ob der Port 3268 offen ist, verrät ein »nmap«, hier ein Auszug der normalen LDAP-Ports und der des »Global Catalog«:

1
2
3
4
389/tcp  open  ldap
636/tcp  open  ldapssl
3268/tcp open  globalcatLDAP
3269/tcp open  globalcatLDAPssl

Sind Port 3268 und 3269 nicht offen, so wird hier erklärt, wie der »Global Catalog« erstellt wird.

Tauscht man den Port 389 also einfach gegen 3268, so kann man wieder problemlos das gesamte Verzeichnis durchsuchen:

1
AuthLDAPURL "ldap://mydc.mydomain.local:3268/dc=mydomain,dc=local?sAMAccountName?sub?(objectClass=*)"

Für mich funktionieren beiden Lösungen, ich bleibe nun aber bei der Nutzung des »Global Catalog«.

Von mod_proxy zu mod_rewrite

2009-06-11_apache.jpg Ich nutze eigentlich schon recht lange die »ProxyPass«-Direktive im Apache. Oft schon hatte ich mir gewünscht, hier »Regular Expressions« nutzen zu können, um ein paar speziellen Anforderungen gerecht zu werden. Dies klappt in Verbindung mit »ProxyPass« nur leider nicht. Heute nun habe ich versucht, meine »ProxyPass« Zeilen mit einer »RewriteRule« zu kombinieren. Die Erkenntnis aus diesen Versuchen war, dass »mod_proxy« _vor_ »mod_rewrite« ausgeführt wird, unabhängig von der Reihenfolge, wie diese Anweisungen in der Apache-Config auftauchen. Zumindest trifft dies auf den hier verwendeten Apache 2.0.55 (Ubuntu Dapper) zu, wie sich der Apache 2.2 verhält habe ich noch nicht getestet. Recht einfach aber lässt sich das Problem umgehen, indem komplett auf »mod_rewrite« umgestellt wird:

1
2
3
RewriteRule ^/unterordner$ /unterordner/ [R]
RewriteRule ^/unterordner/(.*)$ http://192.168.1.1/unterordner/$1 [P]
ProxyPassReverse  /unterordner/ http://192.168.1.1/unterordner/

Zeile 1 macht einen Redirect, schreibt die URI im Webbrowser direkt um, wenn kein Slash hinter den Aufruf gehängt wird.
In Zeile 2 dann der eigentliche »ProxyPass«-Ersatz, zu erkennen an dem Flag »[P]«. Hier werden alle Aufrufe von »/unterordner« an den zuständigen, internen Webserver weitergeleitet.
Der »ProxyPassReverse« in Zeile 3 kann meiner Erkenntnis nach nicht durch »mod_rewrite« ersetzt werden. Er wird benötigt um den HTTP-Header bei 3xx-Statuscodes entsprechend anzupassen. Dies kommt zwar nur sehr selten vor, ich setze diesen Eintrag der Vollständigkeit halber aber für jede Weiterleitung.