|
|
1.1 ! root 1: INTRODUCTION: ! 2: ------------- ! 3: ! 4: This document describes (in some detail, though undoubtedly not enough!) ! 5: the sendmail configuration files currently in use at Berkeley as distributed ! 6: with version 5.61 of sendmail. It discusses the configuration file ! 7: directory hierarchy, how the files are processed by m4(1), what functionality ! 8: the files provide, what m4(1) options can be used to produce specific ! 9: results, and goes through an example or two. It concludes with a list ! 10: of things that will change in the next release of the configuration files. ! 11: ! 12: This is a working draft; your comments are appreciated. Please send your ! 13: suggestions to Phil Lapsley, [email protected], ...!ucbvax!phil. ! 14: ! 15: ! 16: HIERARCHY: ! 17: ---------- ! 18: ! 19: The "cf" subdirectory is organized as follows: ! 20: ! 21: cf ! 22: | ! 23: +---------------+---------------+ ! 24: | | | ! 25: sitedep m4 cf ! 26: | | / \ ! 27: *.m4 *.m4 *.mc *.cf ! 28: ! 29: where the directories contain the following: ! 30: ! 31: sitedep Site dependent parts of configuration files ! 32: in m4(1) include files. ! 33: ! 34: m4 Site independent parts of configuration files ! 35: in m4(1) include files. ! 36: ! 37: cf Includes "master configuration" (.mc) files ! 38: that include m4 files from ../m4 and ../sitedep. ! 39: .mc files are processed by m4(1) and result in ! 40: configuration files (.cf). ! 41: ! 42: In the remainder of this document, all path names are referenced ! 43: relative to the top level "cf" directory. Hence, the m4 subdirectory ! 44: is called "cf/m4". ! 45: ! 46: ! 47: WHERE m4(1) FITS INTO ALL OF THIS: ! 48: ---------------------------------- ! 49: ! 50: Configuration files are built by typing "make" in cf/cf. This ! 51: runs m4(1) on the .mc files in cf/cf and produces .cf files. ! 52: ! 53: The philosophy at Berkeley is to place as much information into ! 54: one .mc file as possible, and then use m4 conditional substitution ! 55: (ifdef, for example) to produce other configuration files from it. ! 56: This results in a substantial reduction of duplicated code that must ! 57: be maintained separately. ! 58: ! 59: The main master configuration file that contains all this information ! 60: is "cf/proto.mc". This file has a number of m4 conditional substitutions ! 61: that can be controlled by other .mc files that include "cf/proto.mc". ! 62: ! 63: For example, most hosts at Berkeley have only SMTP (TCP) connections ! 64: to other hosts. A file called "ucbproto.cf" takes care of these ! 65: machines by defining the m4 flags needed to produce only SMTP mailer ! 66: definitions from "cf/proto.mc". Since this is default behavior, very ! 67: little needs to be defined. ! 68: ! 69: But some hosts at Berkeley (e.g., cad.Berkeley.EDU) have both SMTP ! 70: connections and UUCP connections as well. Thus, they need to ! 71: produce a configuration file that contains both SMTP and UUCP mailer ! 72: definitions, and they need to include a list of directly connected ! 73: UUCP neighbors. The file "cf/cad.mc" does this by setting the m4 ! 74: flags for "cf/proto.mc" that say "(1) I am a UUCP host with hostname "ucbcad", ! 75: (2) a list of my UUCP neighbors can be found in ../sitedep/uucp.cad.m4". ! 76: ! 77: Thus, there are many .mc files in cf/cf that simply define m4 flags and ! 78: then include "cf/proto.mc" to produce a specific configuration file. ! 79: ! 80: Note: ! 81: ! 82: IT IS STRONGLY SUGGESTED THAT YOU, THE SYSTEM MANAGER, ! 83: CONTINUE TO MAINTAIN CONFIGURATION FILES BY USING THIS ! 84: m4(1) METHOD. TRYING TO MAINTAIN MULTIPLE .CF FILES ! 85: ON SEPARATE MACHINES WILL LEAD TO INSANITY. ! 86: ! 87: ! 88: With that out of the way, we should now examine the functionality ! 89: provided by the supplied sendmail configuration files, and then ! 90: talk in detail about the m4(1) options that control this. ! 91: ! 92: FUNCTIONALITY PROVIDED BY THE SUPPLIED SENDMAIL CONFIGURATIONS: ! 93: --------------------------------------------------------------- ! 94: ! 95: Mailers: ! 96: -------- ! 97: ! 98: The sendmail configuration files come with the following mailers: ! 99: ! 100: local For delivery of messages to users on the ! 101: local machine. ! 102: ! 103: tcp For SMTP delivery of messages across the ! 104: the Internet. ! 105: ! 106: tcpld For SMTP delivery of messages within the ! 107: local domain. ! 108: ! 109: uucp For delivery of messages to a UUCP neighbor. ! 110: ! 111: smtpuucp For delivery of messages to a UUCP neighbor ! 112: with whom we also share Internet connectivity. ! 113: ! 114: The tcp/tcpld mailers and the smtpuucp mailers deserve a little more ! 115: explanation. ! 116: ! 117: The "tcp" and "tcpld" mailers: ! 118: ------------------------------ ! 119: ! 120: As regards tcp and tcpld: in theory, there should be only one mailer ! 121: here, called "smtp", that deals with addresses in the form "[email protected]". ! 122: Everyone on the Internet would use this, regardless of what domain ! 123: they were in. Host name lookups would be performed via the domain naming ! 124: system (DNS), and no central registry of machine names would be necessary. ! 125: ! 126: Unfortunately, this is not the case. The MILNET community is still ! 127: in transition towards the DNS, and until this transition is complete, ! 128: they do not have to use the nameserver. Rather, they can "legally" ! 129: still use the host table supplied by SRI-NIC to translate names to ! 130: addresses. This means that to be strictly legal, we must send out ! 131: messages in the form "[email protected]" ONLY FOR machines that are ! 132: registered with SRI NIC. Machines that are not registered with the ! 133: NIC must be "hidden" behind a relay machine, e.g., ! 134: user%unregistered_host@registered_host.domain. This, when MILNET folks ! 135: reply to this, the mail passes through "registered_host.domain" first. ! 136: ! 137: Currently this "hiding" behind NIC registered hosts is performed by ! 138: the "tcp" mailer. ! 139: ! 140: Since you don't want to register all the hosts at your site with ! 141: the NIC (and they don't want you to!), the "tcpld" mailer was created. ! 142: The idea here is that you KNOW all the hosts in your local domain ! 143: use the nameserver, so there is no need to hide mail behind a NIC ! 144: registered relay -- that would only slow things down. So the "tcpld" ! 145: does not do any hiding of unregistered hosts behind a registered relay. ! 146: ! 147: Eventually the "tcpld" mailer will become the "smtp" mailer mentioned above. ! 148: ! 149: The "smtpuucp" mailer: ! 150: ---------------------- ! 151: ! 152: The "smtpuucp" mailer is another fun one. As time progresses, many ! 153: hosts with whom one has UUCP connections join the Internet. Unfortunately, ! 154: if the UUCP connection existed for any length of time, people are ! 155: probably used to using it, complete with the bangist syntax that comes ! 156: with UUCP. As a result, many sites elect to keep their ! 157: UUCP connections even though they have TCP/IP connectivity to the sites ! 158: in question. This turns out not be such a good idea because of the ! 159: double-queuing incurred by UUCP, explained in the following example. ! 160: ! 161: For concreteness, consider the following scenario: ucbvax.Berkeley.EDU ! 162: (UUCP host "ucbvax") and decvax.dec.com (UUCP host "decvax") have shared ! 163: a cross county UUCP link that is heavily used by many people. Let's say ! 164: that a piece of mail is routed through the ucbvax-decvax link via UUCP. ! 165: The queueing process is: ! 166: ! 167: ! 168: step host action ! 169: ----- ----- ------ ! 170: 1 ucbvax incoming mail is accepted via UUCP ! 171: 2 ucbvax uuxqt is queued to invoke sendmail. ! 172: 3 ucbvax sendmail parses the message. ! 173: 4 ucbvax sendmail passes the message to the UUCP ! 174: mailer for delivery to decvax. ! 175: 5 ucbvax message is placed in the outgoing UUCP queue for decvax ! 176: ! 177: 6 decvax uucico takes the message from ucbvax ! 178: 7 decvax uuxqt is queued to invoke sendmail ! 179: 8 decvax sendmail parses the message ! 180: 9 decvax sendmail passes the message to someplace else. ! 181: ! 182: Note that the message transited the inbound UUCP queue on ucbvax, the sendmail ! 183: queue on ucbvax, the outbound UUCP queue on ucbvax, the inbound UUCP queue ! 184: on decvax, etc. ! 185: ! 186: Now, if decvax and ucbvax have SMTP connectivity, the session is more ! 187: manageable: ! 188: ! 189: step host action ! 190: ----- ----- ------ ! 191: 1 ucbvax incoming mail is accepted via UUCP ! 192: 2 ucbvax uuxqt is queued to invoke sendmail. ! 193: 3 ucbvax sendmail parses the message ! 194: 4a ucbvax sendmail delivers it to decvax.dec.com via SMTP. ! 195: ! 196: a decvax sendmail accepts the message from ucbvax via SMTP. ! 197: 8 decvax sendmail parses the message. ! 198: 9 decvax sendmail passes it to someplace else. ! 199: ! 200: Note that old steps (5) and (7), the UUCP queueing, are avoided entirely. ! 201: ! 202: The only trick to the "smtpuucp" mailer is that even though it uses ! 203: SMTP to communicate with its neighbors, it must use the UUCP syntax ! 204: and rewriting rulesets so that the operation is transparent to the ! 205: outside world. This is easy enough to do. ! 206: ! 207: Other functionality: ! 208: ------------------- ! 209: ! 210: Aside from the mailers supplied, the basic configuration files ! 211: support the following features: ! 212: ! 213: * Domains. Addresses of the form "[email protected]" are ! 214: considered to be the basic type of address we deal with. ! 215: ! 216: * Fake domains. Addresses of the form: ! 217: ! 218: [email protected] ! 219: and ! 220: [email protected] ! 221: ! 222: are forwarded to a CSNET relay host and a BITNET relay host, ! 223: respectively. ! 224: ! 225: Note: this feature exists for convenience. As CSNET and ! 226: BITNET convert to domains, it will go away. In particular, ! 227: "[email protected]" is slated to get the axe in the next release. ! 228: ! 229: m4(1) OPTIONS USED IN THE .MC FILES: ! 230: ------------------------------------ ! 231: ! 232: The following options, from "most important" to "trivial", can be ! 233: used to control what configuration file you get from running m4(1) ! 234: on "cf/proto.mc". As explained earlier, the standard practice is to ! 235: create an ".mc" file for a particular configuration that contains ! 236: all the m4(1) macro definitions/flags you want, and then have ! 237: that .mc file include "mc/proto.mc". ! 238: ! 239: Macro name Example (you must include the ` and ')! ! 240: ---------- --------------------------------------- ! 241: ! 242: DOMAIN `DDBerkeley.EDU' ! 243: ! 244: This MUST be defined to be your Internet domain. ! 245: ! 246: INTERNET_RELAY `DAcad.Berkeley.EDU' ! 247: ! 248: If defined, this will be the machine behind which non-NIC registered ! 249: hosts are hidden, resulting in addresses of the form ! 250: ! 251: user%host@internet_relay.domain ! 252: ! 253: e.g., ! 254: ! 255: moore%[email protected] ! 256: ! 257: If not defined, outgoing addresses will always be of the form ! 258: ! 259: [email protected] ! 260: ! 261: regardless of whether "host.domain" is registered with the NIC. ! 262: ! 263: UUCP_NAME `DUucbcad' ! 264: ! 265: If defined, includes the UUCP mailer and assumes you have local ! 266: UUCP connections. The UUCP_NAME macro is used to define your ! 267: canonical UUCP hostname. See also: UUCP_ALIASES and UUCP_HOSTS_FILE. ! 268: ! 269: UUCP_ALIASES `CUucbcad cad' ! 270: ! 271: Used only if UUCP_NAME is defined, this macro lists any UUCP ! 272: aliases for your machine. See also: UUCP_NAME and UUCP_HOSTS_FILE. ! 273: ! 274: UUCP_HOSTS_FILE `../sitedep/uucp.cad.m4' ! 275: ! 276: Used only if UUCP_NAME is defined. Defines class V of ! 277: local UUCP hosts by including the appropriate m4 file. See also: ! 278: UUCP_NAME and UUCP_ALIASES. ! 279: ! 280: UUCP_RELAY `DRcad.Berkeley.EDU' ! 281: ! 282: If defined, this will be the machine to which non-local UUCP traffic ! 283: is forwarded. That is, any address that ends in ".UUCP" that is ! 284: not listed in the V class (as defined by UUCP_HOSTS_FILE) will be ! 285: forwarded to the UUCP_RELAY host via the "tcpld" mailer. ! 286: ! 287: UUCP_ONLY 1 ! 288: ! 289: If defined, makes sure that no TCP/IP based mailers will be ! 290: put in the resulting configuration file. Normally undefined. ! 291: ! 292: SMTPUUCP `../sitedep/smtpuucp.cad.m4' ! 293: ! 294: If defined, use SMTP to resolve certain UUCP connections (while ! 295: keeping UUCP syntax). Should be defined to be a file that ! 296: contains the list of pairs of UUCP names and their corresponding ! 297: Internet names. See "machdep/smtpuucp.ucbvax.m4" for an example ! 298: of what this should look like. ! 299: ! 300: BITNET_RELAY `DBjade.Berkeley.EDU' ! 301: ! 302: If defined, this will be the machine to which BITNET traffic ! 303: (i.e., mail to [email protected]) is forwarded. If not defined, ! 304: addresses of the form "[email protected]" will bounce. ! 305: ! 306: CSNET_RELAY `DCrelay.cs.net' ! 307: ! 308: If defined, this will be the machine to which CSNET traffic ! 309: (i.e., mail to [email protected]) is forwarded. If not defined, addresses ! 310: of that form will bounce. ! 311: ! 312: ARPAKLUDGE `1' ! 313: ! 314: If defined, this turns on a kludge to reduce mail load on your ! 315: INTERNET_GATEWAY. What is done is the following: if mail is outgoing ! 316: to a machine in the ".arpa" domain and we're not registered with the ! 317: NIC, we hide ourselves behind our INTERNET_GATEWAY. If the machine ! 318: to which mail is being delivered is NOT in the ".arpa" domain, we ! 319: assume they use the domain name system and can reply to our address -- ! 320: hence, we don't hide anywhere. ! 321: ! 322: AN EXAMPLE OR TWO: ! 323: ------------------ ! 324: ! 325: Let's consider a hypothetical system at Foo, Inc. Foo, Inc. is on the ! 326: ARPA Internet and is the proud owner of the domain "foo.com". Machines ! 327: in "foo.com" exchange mail with other hosts on the Internet via SMTP. ! 328: Foo, Inc. also has customers with whom they have UUCP links -- these ! 329: links are all on the machine "uucp-gw.foo.com". Mail to any address ! 330: that ends in ".UUCP" should be forwarded to "uucp-gw.foo.com". They ! 331: also have a gateway to the bitnet through their local machine ! 332: "bitnet-gw.foo.com"; mail to any address ending in ".bitnet" should go ! 333: there. They intend to take advantage of the kind folks at CSNET by ! 334: forwarding mail to "host.csnet" to the machine "relay.cs.net". ! 335: ! 336: The master configuration file for a generic machine on the corporate ! 337: ethernet might look like this: ! 338: ! 339: define(DOMAIN, `DDfoo.com') ! 340: define(UUCP_RELAY, `DRuucp-gw.foo.com') ! 341: define(BITNET_RELAY, `DBbitnet-gw.foo.com') ! 342: define(CSNET_RELAY, `DCrelay.cs.net') ! 343: include(proto.mc) ! 344: ! 345: And that's it! The system manager at "foo.com" would simply install ! 346: this in the "cf" subdirectory, add a production to the make file, ! 347: and type "make foo.cf". This would run m4(1) on the .mc file and ! 348: we're done. ! 349: ! 350: Now let's turn to the machine "uucp-gw.foo.com". It obviously needs ! 351: to have the UUCP mailer compiled in, and it needs a list of UUCP ! 352: neighbors with whom it is connected. Of course, it also needs a TCP/IP ! 353: (SMTP) based mailer so it can talk to the rest of the company. ! 354: On the UUCP network, "uucp-gw.foo.com" is known as "foo". ! 355: The master configuration file might be: ! 356: ! 357: define(DOMAIN, `DDfoo.com') ! 358: define(UUCP_NAME, `DUfoo') ! 359: define(UUCP_ALIASES, `CUfoo') ! 360: define(UUCP_HOSTS_FILE, `../sitedep/uucp.foo.m4') ! 361: define(BITNET_RELAY, `DBbitnet-gw.foo.com') ! 362: define(CSNET_RELAY, `DCrelay.cs.net') ! 363: include(proto.mc) ! 364: ! 365: Note that we didn't define UUCP_RELAY here, since we ARE the UUCP relay. ! 366: ! 367: The file "../sitedep/uucp.foo.m4" contains a list of our UUCP neighbors: ! 368: ! 369: CV oink ! 370: CV bletch ! 371: CV spam ! 372: ! 373: indicating that "uucp-gw.foo.com" is directly connected to three other ! 374: machines via UUCP: "oink", "bletch", and "spam." ! 375: ! 376: ! 377: WHAT WILL BE CHANGING IN THE NEXT RELEASE: ! 378: ------------------------------------------ ! 379: ! 380: In the next release, the following things should change: ! 381: ! 382: 1. The MILNET should have gotten its act together. This means ! 383: that the "tcp" mailer goes away. The "tcpld" mailer will ! 384: be renamed "smtp". The "N" class (NIC registered hosts) ! 385: gets axed. The ARPAKLUDGE and INTERNET_RELAY m4(1) options ! 386: will disappear as well. ! 387: ! 388: 2. The CSNET "fake domain" (i.e., [email protected]) will cease ! 389: to be supported. ! 390: ! 391: 3. The "smtp" mailer rulesets (currently 17/27) will be rewritten, ! 392: along with much of rulesets 0 and 3.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.