Exchange 5.5 LDAP

Seit Exchange 2000 weiß mittlerweile jeder, dass das Active Directory den größten Teil der Informationen über die Exchange Organisation und die Empfänger hält und dass das Active Directory per LDAP erreicht werden kann. Aber auch unter Exchange 5.5 ist es durchaus möglich, per LDAP auf den Exchange 5.5 Verzeichnisdienst (DIR.EDB) zuzugreifen. Hier finden Sie die Einstellungen und ein paar Beispiele

LDAP auf Exchange 5.5 aktivieren

Stellen Sie zuerst sicher, dass der LDAP-Port von Exchange 5.5 überhaupt aktiviert ist. Die Einstellung ist pro Site in den Protokolleinstellungen durchzuführen.

 

Sie können zusätzlich pro Server von Standort abweichende Einstellungen vornehmen. Diese Einstellungen finden Sie unter dem Server unter Protokolle. Normalerweise übernehmen die Server jedoch die Standorteinstellungen.

Wenn Exchange 5.5 auf einem Windows 2000 Domain Controller installiert ist, dann kommen sich das Active Directory und der Exchange Verzeichnisdienst ins Gehege, da Sie beide den Port 389 benutzen wollen. Da das Active Directory in der Regel früher startet (LSASS), gewinnt es und Exchange 5.5 bietet keine LDAP-Dienste an. In diesem  Fall müssen Sie den Port des Exchange 5.5. LDAP-Diensts umstellen. z.B. auf 379. Diesen Port nutzt z.B. auch der Exchange SRS.

Auf den folgenden Karteikarten können Sie die Authentifizierung, den anonymen Zugriff und einige andere Parameter einstellen. Besonders zu beachten ist die Menge der zurückgegebenen Objekte

Für Entwickler bedeutet dies, dass Sie bei einer Anfrage nur 100 Objekte zurück bekommen und bei mehr Objekten entsprechend einen "Paged Search" durchführen müssen.

Natürlich können Sie den Wert höher stellen, aber entsprechend erhöht sich der Speicherbedarf. Und wie hoch wollen Sie ihn denn stellen ? Selbst das neuere Active Directory hat ein Limit von 1000 (Windows 2000) oder 1500 (Windows 2003) Elementen.
Sorgen Sie daher besser dafür, dass ihre Anwendung "korrekt" mit diesen Limits

Authentifizierung und Partitionen

Jeder Verzeichnisdienst erlaubt den Zugriff auf verschiedenen Partitionen. Das Active Directory kennt z.B.: das Schema, die Configuration und die Domäne. Exchange 5.5 bietet gleich mehrere Partitionen an. Zudem müssen Sie sich natürlich für den Zugriff anmelden. Zwar können Sie in Exchange 5.5 eine anonyme Anmeldung erlauben, aber dies bedeutet nur, dass ein LDAP-Bind auch anonym möglich ist. Allzu viele Inhalte bekommen Sie natürlich nicht zu sehen.

Die Anmeldung ist bei Exchange 5.5 etwas seltsam. Bislang hatte ich immer erfolg, wenn ich den Benutzer mit folgender Syntax angegeben habe:

cn=NT4Username,dc=domain

Wenn man übrigens auch die versteckten Benutzer sehen will, dann muss man an den eigenen Benutzernamen noch ein "cn=admin" anhängen. Nur dann kann man auch versteckte und gelöschte Empfänger sehen.

cn=NT4Username,dc=domain,cn=admin

  • 196850 Viewing hidden or deleted Exchange objects via ADSI/LDAP

Die vom Exchange 5.5 Verzeichnisdienst bereit gestellten Partitionen (oder Base-DN) sind:  (NT4DOM steht für die Site, ORG steht für den Namen der Organisation:

Naming context Pfad LDAP-Pfad der DemoUmgebung

Organisation

/o=orgname

o=ORG

Site

/o=orgname/ou=sitename

ou=NT4DOM,o=ORG

Schema

/o=orgname/ou=sitename/cn=Microsoft DMD

cn=Microsoft DMD,ou=NT4DOM,o=ORG

Konfiguration

/o=orgname/ou=sitename/cn=Configuration

cn=Configuration,ou=NT4DOM,o=ORG

Adressbuch Ansichten

/o=orgname/ou=_ABViews_

ou=_ABViews_,o=ORG

Siehe auch http://www.Microsoft.com/technet/prodtechnol/exchange/55/plan/chapt04.mspx

Wenn Sie sich auf die "o=ORG" binden, haben Sie natürlich gleich die Wurzel und können ebenfalls die anderen Informationen erreichen.

Achtung:
Mit Exchange 5.5 müssen Sie etwas Geduld haben. Der LDAP-Server ist im Vergleich zum Active Directory nicht wirklich schnell. Ich habe zwar keine eigene Partition für die "GAL" gefunden, aber eine Suche um alle Empfänger zu erhalten, ist sehr zügig.

Seltsam war, dass ich in meinen virtuellen Umgebungen per LDAP nicht in die Konfiguration Partition gekommen bin, sondern nur die Empfänger und Adressbuchansichten erreichen konnte.

Objekte

Im Exchange 5.5 Verzeichnis sind natürlich die Empfänger (Postfächer, Verteiler, Kontakte) am interessantesten. Allerdings muss man schon mal genauer hinschauen, um die gewünschten Felder zu erhalten.

ADMIN /RAW
Sie sollten daher wissen, dass Sie den Exchange 5.5. Administrator mit der Kommandozeilenoption "/RAW" aufrufen können. Wenn Sie dann auf einen Benutzer gehen, dann finden Sie im Menü einen neuen Punkt "Basiseigenschaften".

Diese Basiseigenschaften zeigen ihnen dann die Felder, die im Verzeichnis zum jeweiligen Objekt gespeichert sind. Es sind nämlich einige Felder mehr vorhanden, als Sie in der normalen Oberfläche zu sehen bekommen. Zudem ist die Schreibweise manchmal abweichend vom Feldnamen im Active Directory. Ehe Sie daher lange suchen und sich mit ADSI-Fehlern über nicht vorhandene Felder abmühen, ist ein Blick in die Basiseigenschaften ratsam. Hier ein Benutzer als Beispiel.

Die "Proxy-Addresses" werden im Active Directory z.B. ohne Bindestrich geschrieben. Im folgenden sehen Sie einige Bilder der LDAP-Eigenschaften, die mit dem Softerra LDAP erstellt wurden. Sie können natürlich auch LDP.EXE aus dem Windows Server umfang nutzen:

Benutzer

Hier der Auszug eines Benutzers:

Eine ähnliche Analysekönnen Sie mit LDP ausführen. Auch hier sehen Sie alle Felder und deren Inhalt

Nicht immer ist der Name eines Feldes im Exchange Admin auch identisch mit dem Namen per LDAP. Werden einige Felder nur authentifizierten Benutzern angezeigt. Weitergehende Informationen hierzu finden Sie z.B.: auf
http://www.selfadsi.de/att55mbx.htm

Kontakt

Ein Kontakt ist kein Postfach, sondern nur ein Empfänger, der weitergeleitet werden kann. Darauf weist die "ObjectClass=Remote-Address" hin. Die eigentliche Zieladresse ist im Feld "Target-Address" hinterlegt.

Verteiler

Ein Verteiler zeichnet sich dadurch aus, dass das Feld "Member" die Mitglieder enthält.

Beispiele

Die folgenden Beispiele in VBScript zeigen, wie relativ einfach ein Zugriff über die Schnittstelle ADSI auf Exchange 5.5. möglich ist. Das Script bindet sich an die Organisation und sucht einfach alle Objekte und gibt diese aus.

Beachten sie, dass Sie natürlich den Namen der Organisation und den Benutzernamen nebst Kennwort für ihre Bedürfnisse anpassen müssen.

Set oConn = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
Set oCommand = CreateObject("ADODB.Command")
oConn.Provider = "ADSDSOObject"
oConn.Properties("User ID") = "dc=nt4com,cn=Administrator"
oConn.Properties("Password") = "Password!"
oConn.Open "Active Directory Provider"
Set oCommand.ActiveConnection = oConn
oCommand.CommandText = "<LDAP://192.168.0.200:389>;"_
& "(&(objectClass=*)(givenName=*));"_
& "sn,givenName,mail,distinguishedName,member,targetaddress;"_
& "subTree"
oCommand.Properties("Sort On") = "sn,givenName"
oCommand.Properties("Page Size") = 100
oCommand.Properties("Asynchronous") = True
Set objRecordSet = oCommand.Execute
wscript.echo "Found " & objRecordSet.RecordCount & " Users in Exchange 5.5"


Do until objRecordSet.EOF ' jeden Datensatz einzeln bearbeiten.
    count = count + 1
    WScript.echo "Count :" & count
    WScript.echo "SN :" & objRecordSet.Fields("sn")
    WScript.echo "givenName :" & objRecordSet.Fields("givenName")
    WScript.echo "mail :" & objRecordSet.Fields("mail")
    WScript.echo "member:" & objRecordSet.Fields("member")
    WScript.echo "distinguishedName:" & objRecordSet.Fields("distinguishedName")
    objRecordSet.MoveNext ' Nächster Benutzer
Loop

Fehlersuche

Analog zu Exchange 2000/2003 erlaubt auch Exchange 5.5 über das Diagnoseprotokoll die Überwachung von LDAP-Aktivitäten. Das Protokoll wird auf den Eigenschaften des Exchange Servers aktiviert.

Normalerweise ist das Protokoll natürlich auf "Keine" gestellt. Aber dann finden Sie jede Aktivität im Eventlog.

Aufgrund der Menge sollten Sie aber die Größe des Eventlog hoch setzen und die Protokollierung bald wieder abschalten. Wenn Sie die LDAP-Events in einer Textdatei ausgeben lassen, dann erhalten Sie folgende Informationen.

EventID Eventmeldung
1355	LDAP-Suche wurde ausgeführt. 
1377	Folgendes Objekt wird von der LDAP-Suche zurückgegeben: cn=Kontakt2,cn=Recipients,ou=NT4DOM,o=ORG. 
1377	Folgendes Objekt wird von der LDAP-Suche zurückgegeben: cn=Kontakt1,cn=Recipients,ou=NT4DOM,o=ORG. 
1377	Folgendes Objekt wird von der LDAP-Suche zurückgegeben: cn=User2,cn=Recipients,ou=NT4DOM,o=ORG. 
1377	Folgendes Objekt wird von der LDAP-Suche zurückgegeben: cn=User1,cn=Recipients,ou=NT4DOM,o=ORG. 
1371	Die Suchanfrage legt eine Seitengröße von 100 fest. 
1294	Folgende(s) Attribut(e) wurde(n) in einer Suche angefordert: sn;givenName;mail;distinguishedName;member 
1332	Der Filter für diesen LDAP-Suchvorgang lautet: (&(objectClass=*)(givenName=*)). 
1279	Die LDAP-Suche bezieht sich auf das Basisobjekt und seine unterstruktur. 
1242	LDAP-Suche wurde gestartet mit Basisobjekt o=ORG. 
1244	Ein LDAP-Befehl wurde vom Client erhalten.

Ich habe natürlich einige Spalten und mehrere Zeilen am Anfang entfernt, da ADSI noch einige Abfragen vorab durchführt, d.h. "DefaultNamingContext" und "Schema" suchen, was bei Exchange 5.5 nur bedingt funktioniere.

Weitere Links