Network Working Group H. Lachman INTERNET-DRAFT Netscape Communications Corp. Expires: May 1998 November 1997 Intended Category: Informational LDAP-based Routing of SMTP Messages: Approach Used by Netscape Status of this Memo This document is an Internet-Draft. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as ``work in progress.'' To learn the current status of any Internet-Draft, please check the ``1id-abstracts.txt'' listing contained in the Internet-Drafts Shadow Directories on ftp.is.co.za (Africa), ftp.nordu.net (Europe), munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or ftp.isi.edu (US West Coast). The previous version of this draft was . Changes relative to that version are in Sections 4.2, 5.1, 5.3, 7, and the appendices. Abstract Directory services based on the Lightweight Directory Access Protocol (LDAP) [1] and X.500 [2] provide a general-purpose means to store information about users and other network entities. One of the many possible uses of a directory service is to store information about users' email accounts, such as their email addresses, and how messages addressed to them should be routed. In the interest of interoperability, it is desirable to have a common schema for such email-related information. This document discusses some of the fundamental questions to be considered in the development of a common schema for LDAP-based routing of SMTP [3] messages, presents an approach that has been implemented and deployed, and discusses possible extensions to that Lachman [Page 1] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 approach that may serve to make it more complete and general. The intent is to provide information about an existing implementation, and to stimulate discussion about whether and how to standardize the relevant aspects of LDAP-based messaging management. 1. Background and Motivation LDAP-based directory services are currently being used in many organizations as a repository of information about users and other "network entities" (such as groups of users, network resources, etc.). Some information is stored in the directory for the consumption of persons browsing for information (e.g., telephone numbers, postal addresses, secretary's name), while other information (e.g., login name, password, disk quota) is stored for use by one or more network applications or services. It is the latter kind of information that is of interest in this discussion. In general, it is advantageous for different network applications and services to refer to the directory for user account information, rather than each service keeping its own collection of user account records, which requires the network administrator to separately create or destroy user entities, passwords, etc., in many different systems each time a user joins or leaves the organization. The goals of centralized user management and sharing of information with other service types drove our decision in the design of Netscape Messaging Server (an SMTP- based mail server product) to use LDAP-based directory services as a common repository for user account information. Now, if a given mail server can refer to the directory for its own users' account information, it follows that that same information is visible to other LDAP-aware mail servers in the same organization, and therefore that information can aid those other mail servers in correctly routing messages to users of the mail server in question. This assumes that there is an agreed-upon set of per-user attributes to support message routing. If this assumption is met, we can obviate other means currently employed to specify per-user message routing (such as the Unix "aliases" database). The benefit of this is to further consolidate per-user system information. If each vendor's mail server product has its own schema for LDAP- based message routing, then the above benefits can be achieved for single-vendor customers, but customers who have multiple vendors' mail server products would not be well served. They will likely expect interoperability, which will require a common schema to be supported by the various vendors' products. Thus, it is worthwhile to consider how to develop a common schema. This document does not attempt to define a standard. It does attempt to define what the relevant questions are, and goes on to describe Lachman [Page 2] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 one vendor's solution plus possible extentions to generalize it. It is hoped that this discussion helps to characterize the issue, and encourages the development of a common solution. This document considers only intra-enterprise SMTP message routing using LDAP-based directory services. Solutions and issues involving inter-enterprise routing, non-SMTP message handling, non-LDAP directory services, and other messaging management topics not related to message routing, are outside the scope of this document (except that the concepts presented may also be applicable in the case of X.500 directory services). 2. Terminology In the context of this document, a "mail server" is a Simple Mail Transfer Protocol (SMTP) message transfer agent (MTA). It either includes, or has associated with it, a local message delivery agent (MDA) that performs delivery to accounts that are considered local to the particular mail server. A mail server may offer related services as well, such as providing a means for mail user agents (MUAs) to pick up messages, but that is outside the scope of this discussion. The term "account" is used to refer to any entity that can receive mail. This includes mail user accounts, as well as mail group accounts (mail distribution lists). A "delivery" is said to have occured when an MTA passes a message to the local MDA, having first ascertained that the message is destined for a particular account that can be delivered to locally. The MDA may then place the message in a local message store, and/or take other actions as specified by the account's attributes. "Routing" and "forwarding" are distinct actions. "Routing" is said to have occured when an MTA passes a message to a "next-hop" MTA, having ascertained that the addressed entity is not a local account but may exist elsewhere. "Forwarding" is said to have occured when a message has successfully arrived at a particular account and the MDA determines that the message must be resent to one or more new destinations as specified by the account's attributes. "Forwarding" may be configurable by the user, while "routing" is normally configurable only by a network administrator. With this definition, it might also be said that when a message arrives at a mail group account, and the MDA resends the message to all of the individual group members, this is also "forwarding". 3. Questions to Consider When a message arrives at an MTA, the MTA must determine whether to deliver the message to a local account, route the message to another Lachman [Page 3] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 MTA, or, in the case of an unresolvable recipient address, take some remedial action such as "bouncing" the message. In the course of making this determination, an MTA may reference information from a variety of sources, including its own local configuration, one or more directory services, and perhaps other sources. This document discusses only per-account routing and addressing information provided by an LDAP-based directory service, and what role that information might play in helping the MTA determine what to do with a message. The question of how an MTA might use such information can be broken down into three subquestions: Question (1): For a given recipient address, which LDAP entry does it belong to? Question (2): For a given LDAP entry, should a message addressed to it be delivered locally or routed? Question (3): If a message addressed to a given LDAP entry needs to be routed, to where should the message be routed? In order for these questions to be answerable by the MTA, LDAP entries that represent mail accounts should include attributes that specify addressing and routing information. These attributes should be advertised to (i.e., readable by) the MTAs that are expected to act on them, and there should be a definition of what attributes are involved and how they are to be interpreted. With this definition, an MTA can be implemented or configured to correctly use such information to answer the above questions, and, therefore, correctly handle messages addressed to accounts represented as LDAP entries. 4. Description of Solution Implemented In the design of Netscape Messaging Server, we defined two new LDAP object classes, 'mailRecipient', which is used to represent a mail user account, and 'mailGroup', which is used to represent a mail group account (mail distribution list). An LDAP entry of either class may have attributes that are of an "account configuration" nature and are used solely by the MDA handling mail for the account, while other attributes are used by the account's "home" MTA as well as other MTAs. It is this latter set of attributes that are of interest in this discussion, since we are concerned with the behavior of MTAs. Our MTA implementation uses the following attributes: mail primary email address Lachman [Page 4] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 mailAlternateAddress additional email addresses mailHost server hosting mail account uid user id (login name) The 'mail' and 'mailAlternateAddress' attributes are used to specify the email addresses [4] that are considered valid for an account. They must all be complete email addresses (e.g., "joe@example.com", as opposed to "joe" or "joe@mars"). 'mailHost' is the fully- qualified domain name [5] of the mail server that considers the account to be locally deliverable (e.g., "mars.eng.example.com"). 'uid' is the user's login name. A 'mailGroup' is not expected to have a 'uid' attribute, and may or may not have a 'mailHost' attribute, but both attributes should be present for a 'mailRecipient'. For a detailed description of the 'mailRecipient' and 'mailGroup' object classes and associated attributes, refer to Appendices A and B. Our MTA implementation looks for the above attributes, and uses them to answer the three fundamental questions considered above, as follows. 4.1. Mapping an Address to an LDAP Entry To resolve Question (1), we take the recipient address from the SMTP "envelope", and see if there is exactly one LDAP entry that advertises that address as one of its valid addresses. Specifically, we search for an LDAP entry that has a 'mail' or 'mailAlternateAddress' attribute whose value is the address in question. The search is performed across all LDAP entries in a given directory subtree, which is configured in the MTA as its "base subtree" of interest. If the above search fails, we may also perform a fallback search. Specifically, if the above search yields zero matches, we split the address in question at the "@" sign, yielding a "local part" and a "domain part". If the MTA configuration specifies that it is the final authority on messages addressed to the domain part in question (i.e., it has the authority to bounce messages addressed to that domain), then we search for an LDAP entry whose 'uid' attribute equals the local part. If we get exactly one match, then we regard this as a successful match. In theory, the fallback search may not be required, but since our MTA rewrites envelopes to 'uid'@'mailHost' (as discussed in Section 4.3), it is clearly advantageous for receiving MTAs in this environment to be able to unconditionally recognize an address thusly rewritten. 4.2. Determining Whether or not to Perform Local Delivery Lachman [Page 5] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 To resolve Question (2), we look up the LDAP entry's 'mailHost' attribute. If the value of this attribute matches the fully- qualified domain name (FQDN) specified in the MTA configuration, then the message is passed to the local MDA. If the value of the 'mailHost' attribute does not match the MTA's FQDN, then the message is routed. Absence of routing information in the LDAP entry (i.e., not having a 'mailHost' attribute) is considered invalid and will result in a bounce, unless the MTA determines that it is a 'mailGroup' object, or a 'mailRecipient' object with a 'mailForwardingAddress' attribute. These cases are considered valid so that any MTA can be eligible to perform the resending action on behalf of a mail group or a "forwarding-only" object. 4.3. Determining How to Route the Message To resolve Question (3), we look up the LDAP entry's 'mailHost' and 'uid' attributes. The 'uid' attribute is normally present for a 'mailRecipient', and is not normally present for a 'mailGroup'. If the 'uid' attribute is present, we rewrite the recipient address in the SMTP envelope to 'uid'@'mailHost', i.e., we combine the respective values of these two attributes and add an "@" sign to formulate a new recipient address. If the 'uid' attribute is not present, we do not rewrite the recipient address. The message is routed to the destination indicated in the 'mailHost' attribute. This may or may not mean that the MTA will open an SMTP connection to the host identified as the 'mailHost', since the MTA configuration may specify routing rules that prevent this (e.g., in sites that are configured so that all message traffic follows a fixed "star" topology). Also, some sites may use DNS MX records [6] for internal message routing. For example, an MTA "mail.example.com" may receive a message for "joe@example.com", find that the 'mailHost' for this account is "mars.eng.example.com", and then discover that mail for "*.eng.example.com" is MX'ed to "hub.eng.example.com", which will then be the "next hop". 5. Possible Ways to Generalize the Solution Implemented The following are several ways our approach could be extended to make it more general. None of these suggestions are reflected in our existing implementation as of this writing. We have no specific plans to follow or not follow these suggestions in any subsequent implementation. The intent is to provide ideas as to what a more general approach might look like. Whether or not these ideas should be implemented, or should become the basis for a future standard, are Lachman [Page 6] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 left as open questions. 5.1. More Flexible Envelope Rewrites One might argue that it is not really necessary for MTAs to rewrite envelopes when performing intra-enterprise message routing. The argument is as follows. Taking an example from above, suppose Joe's account is on "mars.eng.example.com", and Joe's account advertises "joe@example.com" as one of its valid email addresses. One would expect that Joe's "home" MTA knows what Joe's valid email addresses are. When mail arrives on "mail.example.com" for "joe@example.com", and it finds Joe's LDAP entry that advertises this address, it should be able to route the message without rewriting the envelope under the assumption that Joe's "home" MTA (and other MTAs such as "hub.eng.example.com" that are "closer" to Joe's "home" MTA than "mail.example.com") can also correctly identify the address as belonging to Joe. However, existing practice in sites that use SMTP-based messaging often includes the rewriting of addresses to be host-specific. In order to avoid going against existing practice, our MTA implementation rewrites envelopes to 'uid'@'mailHost', as explained above. This is a fixed behavior, and some sites may desire more flexibility. One way to provide more flexibility is to add an attribute, say: mailRoutingAddress address for internal mail routing This could be added to the 'mailRecipient' and 'mailGroup' object classes as a way to explicitly specify how to rewrite the envelope when routing a message. Then, if the 'mailRoutingAddress' is present, the envelope is rewritten to the indicated address, otherwise, the address is not rewritten. This provides flexibility for site-specific policy governing whether or not envelopes are rewritten, and if so, how they are to be rewritten. It obviates the fixed 'uid'@'mailHost' behavior in our implementation (see Section 4.3), because the same information can then be stored in the 'mailRoutingAddress' attribute. It should be noted that if the 'mailRoutingAddress' attribute were used as described here, it should contain an address that is recognizable on the destination MTA as being an address of the mail account represented by the LDAP entry in question, to ensure that the search specified in Section 4.1 will succeed on the destination MTA. Also, the 'uid'@'mailHost' search could be removed from the method specified in Section 4.1, but some sites may still regard this as a Lachman [Page 7] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 desirable fallback, although in this case the reasons to keep it are more along the lines of the reasoning in Section 5.2. One might observe that 'mailRoutingAddress' and 'mailHost' may be partially redundant, and, in general, it is desirable to avoid redundancy of information in the directory. Having both attributes would be useful, however, if for some reason a network administrator wanted to separately control "next-hop" determination and envelope rewrites. So if both attributes were present, 'mailHost' would determine where to route the message, and 'mailRoutingAddress' would determine how to rewrite the envelope. If only 'mailRoutingAddress' were present, then the right-hand side (the domain part) of the routing address would determine the next destination. If only 'mailHost' were present, then the envelope would not be rewritten, or be rewritten as dictated by the configuration of the MTA. 5.2. Localpart-only Searches Our implementation performs searches on email addresses as complete addresses (e.g., "joe@example.com"). We do not split the address at the "@" sign and search on the "local part", except in the case characterized above as a "fallback" search. This approach is probably sufficient for most customers since they can always add more addresses to an account as needed. It also reduces the risk of "namespace crossovers" that could result if customers with multiple distinct domains (e.g., with "joe" being a different person in each domain) did localpart-only searches. Nevertheless, some sites may desire the flexibility to configure their MTAs to perform "localpart-only" searches, once the MTA has ascertained that the domain part is considered to be "local". They may then want the search to attempt matches against arbitrary attributes, like 'uid', 'cn' (with spaces and other illegal characters matching underscores or dots in the address), or some attribute whose purpose is to contain localpart-only email addresses. Site-specific needs can vary considerably in this area, and the most appropriate solution may be to make this part of an MTA's functionality as configurable as possible. 5.3. New Object Class: 'mailableObject' As currently implemented, the 'mailRecipient' object class provides (a) attributes used only by the final MTA, and (b) attributes that may be used by non-final MTAs, i.e., attributes relevant to the task of routing messages among the various MTAs within an organization. It may be advantageous to group the attributes in category (b) together as belonging to their own object class, say, 'mailableObject'. Then, the 'mailRecipient' and 'mailGroup' object Lachman [Page 8] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 classes would include only category (a) attributes. An LDAP entry representing a user would then become a "mailable user" by mixing in the 'mailableObject' and 'mailRecipient' object classes, with their associated attributes. An LDAP entry that represents a group would become a "mailable group" by mixing in the 'mailableObject' and 'mailGroup' object classes. The proposed 'mailableObject' object class is defined as follows, with object identifiers as indicated: Object class: mailableObject (OID: 2.16.840.1.113730.3.2.34) Required attribute: objectClass (OID: 2.5.4.0) Allowed attributes: cn (OID: 2.5.4.3) mail (OID: 0.9.2342.19200300.100.1.3) mailAlternateAddress (OID: 2.16.840.1.113730.3.1.13) mailHost (OID: 2.16.840.1.113730.3.1.18) mailRoutingAddress (OID: 2.16.840.1.113730.3.1.47) Here is an example of an LDAP entry for a mail user account, using the 'mailableObject' object class: dn: cn=Joe Blow,o=Example Corporation,c=US objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: mailableObject objectClass: mailRecipient cn: Joe Blow sn: Blow uid: joeblow userPassword: {crypt}jqYx78jsZxGrI mail: joeblow@example.com mailAlternateAddress: jojo@example.com mailHost: host2.example.com mailDeliveryOption: mailbox Consider a network with three hosts that run MTAs: Lachman [Page 9] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 +------+ | | | MDA2 | | | +------+ ^ | +------+ +------+ +------+ | | | | | | | MTA1 | -----> | MTA2 | -----> | MTA3 | | | | | | | +------+ +------+ +------+ host1 host2 host3 The above illustrates a two-layer mail routing and delivery model. If a message addressed to "joeblow@example.com" arrives on host1, MTA1 need only look in the directory for an LDAP entry that is a 'mailableObject' and has an address "joeblow@example.com", determine whether it can handle mail for that LDAP entry locally, and if not, route the message, in this case, to host2. On host2, MTA2 will follow the same logic, but determine that the message can be handled locally. Thus, only MDA2 need be concerned with the type of mailable object ('mailRecipient' or 'mailGroup') and the attributes particular to that type of object (in this case 'mailDeliveryOption'). This implies that in a network environment containing LDAP-aware MTAs from different vendors, the MTAs can route messages to each others' accounts based on common interpretation of the 'mailableObject' object class and its attendant attributes. Object classes and attributes that represent the upper layer of handling (i.e., delivery to a mailbox, sending a vacation notice, forwarding to a different account, and mail group list expansion) do not require common interpretation as long as a specific host is handling mail for the LDAP entry in question, and so only that host (and that vendor's implementation) must understand the object classes and attributes at that level. On the other hand, Section 4.2 specifies that in the absence of any routing information, an MTA can decide to handle the message locally in certain cases. This requires that there is either common interpretation of upper-layer attributes across all MTAs in the environment, or the MTAs that do not handle such cases are configured to route the messages to MTAs that do. In short, the main advantage of the 'mailableObject' object class is to define a single object class that can serve to identify an LDAP entry as an entity to which email can be addressed, and to aggregate Lachman [Page 10] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 the attributes that can provide interoperability at the MTA level. Another example of this advantage is the case where LDAP entries have a 'mail' attribute but do not represent any kind of email account, i.e., the 'mail' attribute is being used for contact information only. For example, an LDAP entry representing a conference room might specify the telephone number and email address of the contact person for the room, and therefore may have a 'mail' attribute indicating the email address of the contact person. The contact person also has an LDAP entry, with the same 'mail' attribute, but since this person is a 'mailableObject', and the conference room is not, only the person's LDAP entry, and not the conference room's LDAP entry, is found on an address lookup such as the one specified in Section 4.1. 5.4. More Configurability In lieu of a standard, mail server vendors could also achieve interoperability by providing a high degree of configurability in their products. For example, each mail server product could provide a means to configure or program its methods of resolving each of Questions (1), (2), and (3); if all of the mail servers in a given site were configured to use the same methods, then they would, in theory, interoperate in terms of LDAP-based SMTP message routing as described in this document. However, this approach to interoperability simply shifts the burden of standardization to the customer, and then there might still be a demand for a "recommended configuration profile" (i.e., a standard) for customers who desire solutions that work "right out of the box". On the other hand, some level of configurability with regard to the functionality discussed here may be desirable. 6. Security Considerations As in all cases where account information is stored in an LDAP-based directory service, network administrators must be careful to ensure that their directory service controls users' access to the entries and attributes stored therein, according to site policy (e.g., allowing users to modify, say, their 'mailForwardingAddress' attribute, but not their 'mailHost' attribute). Mail server products and their associated user management tools should help administrators to ensure this, and should also help administrators avoid configurations that would result in misdelivered mail due to "namespace crossovers" and other reasons. 7. References Lachman [Page 11] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 [1] W. Yeong, T. Howes, S. Kille, "Lightweight Directory Access Protocol", RFC 1777, March 1995. [2] "Information Processing Systems - Open Systems Interconnection - The Directory: Overview of Concepts, Models and Service", ISO/IEC JTC 1/SC21, International Standard 9594-1, 1988. [3] J. Postel, "Simple Mail Transfer Protocol", RFC 821, August 1982. [4] D. Crocker, "Standard for the Format of ARPA Internet Text Messages", RFC 822, August 1982. [5] P. Mockapetris, "Domain names - concepts and facilities", RFC 1034, November 1987. [6] C. Partridge, "Mail routing and the domain system", RFC 974, January 1986. [7] M. Smith, "Definition of the inetOrgPerson Object Class", Internet-Draft (work in progress), , July 1997. [8] B. Steinback, "Using LDAP for SMTP Mailing Lists and Aliases", Internet-Draft (work in progress), , September 1997. 8. Author's Address Hans Lachman Netscape Communications Corp. 501 East Middlefield Road Mountain View, CA 94043 USA Phone: (650) 254-1900 EMail: lachman@netscape.com Appendix A. mailRecipient Object Class and Attributes The following is an informal description of the 'mailRecipient' object class and associated attributes. It was designed to be used as a "mix-in" object in combination with a person's LDAP entry (in our implementation an 'inetOrgPerson' entry [7]) to enable a person to be recognized and handled as a mail user. Object class: mailRecipient (OID: 2.16.840.1.113730.3.2.3) Lachman [Page 12] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 Required attribute: objectClass (OID: 2.5.4.0) Allowed attributes: cn (OID: 2.5.4.3) Common name (person's full name). mail (OID: 0.9.2342.19200300.100.1.3) "Primary" email address. This is the address that would likely be displayed by "white-pages" lookup applications. Must be a complete email address (e.g., "joe@example.com"). mailAccessDomain (OID: 2.16.840.1.113730.3.1.12) Domains and IP addresses from which user may do POP or IMAP login. mailAlternateAddress (OID: 2.16.840.1.113730.3.1.13) Email addresses that are considered valid for this user in addition to their 'mail' address. Must be complete email addresses. mailAutoReplyMode (OID: 2.16.840.1.113730.3.1.14) Auto-reply mode, may be one of: 'vacation' (send reply text to sender, but only once per vacation), 'reply' (send reply text unconditionally), or 'echo' (like 'reply' but include original message in the reply). mailAutoReplyText (OID: 2.16.840.1.113730.3.1.15) Reply text to use with 'mailAutoReplyMode'. mailDeliveryOption (OID: 2.16.840.1.113730.3.1.16) Mail delivery option, one or more of: 'mailbox' (deliver to user's POP/IMAP mailbox), 'native' (deliver with platform's native delivery method, e.g., "/usr/bin/mail"), or 'program' (perform program delivery). There must be at least one 'mailDeliveryOption' and/or 'mailForwardingAddress', otherwise, mail to this account is undeliverable. mailForwardingAddress (OID: 2.16.840.1.113730.3.1.17) User-specifiable mail forwarding address(es). mailHost (OID: 2.16.840.1.113730.3.1.18) Fully-qualified domain name of the MTA that is the final SMTP destination for mail addressed to this Lachman [Page 13] INTERNET-DRAFT LDAP-based Routing of SMTP Messages November 1997 account. Used for routing (see Section 4.3), and also used to determine which LDAP entries represent accounts that are to be considered local to a given mail server (see Section 4.2). mailMessageStore (OID: 2.16.840.1.113730.3.1.19) Identifier for the message store containing this user's POP/IMAP mailbox. Contains absolute path of the message store directory (may be some other identifier in the future). mailProgramDeliveryInfo (OID: 2.16.840.1.113730.3.1.20) Command text for program delivery. mailQuota (OID: 2.16.840.1.113730.3.1.21) Quota in bytes for user's POP/IMAP mailbox. multiLineDescription (OID: not assigned) User-specifiable personal description (not really related to email; in the future, this attribute may be removed or defined in some other object class). uid (OID: 0.9.2342.19200300.100.1.1) User's login name. userPassword (OID: 2.5.4.35) User's password. Appendix B. mailGroup Object Class and Attributes The 'mailGroup' object class provides attributes that specify the members and configuration of a mail group, and is defined in a separate document [8]. Lachman Expires: May 1998 [Page 14]