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
- ADSI und LDAP
- VBScript
- SelfADSI
http://www.selfadsi.de - EX55 Felder
http://www.selfadsi.de/att55mbx.htm - Retrieving E-mail Addresses
http://msdn.Microsoft.com/library/default.asp?URL=/library/en-us/ds2x/hh/ds2x/exds_ds2exchgd_59df.asp - Active Directory Services Interface in the MS Exchange 5.5
Environment
http://www.Microsoft.com/technet/prodtechnol/exchange/55/support/adsi.mspx - 185475 LDAP search returns no entries für hidden or deleted objects
- 196850 Viewing hidden or deleted Exchange objects via ADSI/LDAP
Man hänge ein "cn=admin" hinter den Usernamen "cn=User,dc=domain" damit man auch diese Adressen sieht. - 153028 XADM: How to Export Multiple (Secondary) E-mail Addresses
Das Feld Proxy-Addresses wird im Exchange Admin als "Secondary-Proxy-Addresses" exportiert. - ADSI Exchange - Retrieving E-mail Addresses
http://msdn.Microsoft.com/library/default.asp?URL=/library/en-us/ds2x/hh/ds2x/exds_ds2exchgd_59df.asp
Sehr guter Artikel zu LDAP mit VBScript - SelfADSI
http://www.cerrotorre.de/selfadsi/selfadsi.htm
http://www.selfadsi.de/selfadsi/selfadsi-ldapfilter.htm
http://www.selfadsi.de/User-attributes.htm
http://www.selfadsi.de/group-attributes.htm
http://www.selfadsi.de/selfadsi/selfadsi-att55mbx.htm Exchange 5.5. Felder
SelfADSI - Das LDAP / ADSI Scripting Tutorial Objekt-Attribute lesen
http://www.selfadsi.de/read.htm