home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / mini / Sendmail-Address-Rewrite < prev    next >
Text File  |  1998-09-23  |  9KB  |  331 lines

  1.   sendmail address rewriting mini-HOWTO
  2.   Thomas Roessler, roessler@guug.de
  3.   v0.0, 6 May 1998
  4.  
  5.   This document is a brief description of how to set up sendmail's con¡
  6.   figuration file for the home user's dial-up access.
  7.  
  8.   1.  Introduction
  9.  
  10.   We assume that you have the kind of Internet access which seems to be
  11.   most common at universities and online services nowadays: You dial
  12.   into your provider's network using PPP over a serial connection. Your
  13.   incoming mail is spooled at the provider's POP or IMAP server, while
  14.   outgoing messages are to be sent via SMTP.  You don't have a domain
  15.   name of your own, so everything has to use one address.
  16.  
  17.  
  18.   We assume that you have already installed a fairly recent version of
  19.   Eric Allman's sendmail (version 8.8.8 is current at the time of this
  20.   writing and should work fine).
  21.  
  22.  
  23.   This document is partially referring to specific properties of Debian
  24.   GNU/Linux systems; users of different distributions will have to take
  25.   some care.
  26.  
  27.  
  28.   Make sure you have the following information at hand:
  29.  
  30.  
  31.   ╖  Your ISP's mail server
  32.  
  33.   ╖  Your Internet mail address
  34.  
  35.  
  36.  
  37.   The configuration we are planning has two main goals:
  38.  
  39.  
  40.   1. Sending mail between various local users must be possible.
  41.  
  42.   2. The outside world must see the local users' ISP mail addresses, not
  43.      the local ones.
  44.  
  45.  
  46.   To achieve this, we will make use of sendmail's genericstable feature.
  47.  
  48.  
  49.   2.  File Roadmap
  50.  
  51.   We will put all of sendmail's configuration files in a separate
  52.   directory under /etc: /etc/mail.  Usually, sendmail will expect these
  53.   files to reside directly under /etc.  To avoid problems,
  54.   /etc/sendmail.cf should be a symbolic link to /etc/mail/sendmail.cf.
  55.  
  56.  
  57.   The following files will populate /etc/mail:
  58.  
  59.   ╖  =20
  60.  
  61.   ╖  aliases - contains additional local addresses
  62.  
  63.   ╖  genericsdomain - contains some information on your local host's
  64.      configuration
  65.  
  66.  
  67.   ╖  genericstable - contains the actual rewriting rules.
  68.  
  69.   ╖  sendmail.cf - sendmail's configuration file
  70.  
  71.   ╖  sendmail.mc - the source of sendmail.cf.
  72.  
  73.   Some of these files will be accompanied by .db files.  They contain
  74.   hashed databases for sendmail's direct use.
  75.  
  76.  
  77.   We assume that the cf part of sendmail's source tree resides under a
  78.   directory named /usr/lib/sendmail.cf.  This is the case on Debian
  79.   GNU/Linux systems.  Other distributions will put this stuff at
  80.   different places.  Please refer to your distribution's documentation
  81.   for details.
  82.  
  83.  
  84.   3.  Configuring sendmail
  85.  
  86.   3.1.  The main configuration file
  87.  
  88.   Sendmail uses a highly complex rule system for it's configuration.
  89.   While you can do lots of neat tricks with this stuff, writing a
  90.   sendmail.cf file from scratch is rather unusual and time-consuming.
  91.   If you are interested in doing so, you should stop reading this
  92.   document right now and instead read the "Bat Book" from O'Reilly.
  93.  
  94.  
  95.   Instead of hand-crafting these rules, we will rely on the m4 macro
  96.   processor to put together our configuration file from ready-made
  97.   pieces which are distributed together with sendmail.
  98.  
  99.  
  100.   Let's look at the first lines of the sendmail.mc file:
  101.  
  102.  
  103.   ______________________________________________________________________
  104.   include(/usr/lib/sendmail.cf/m4/cf.m4)
  105.   VERSIONID(`sendmail.mc - roessler@guug.de')
  106.   OSTYPE(debian)
  107.   define(`ALIAS_FILE',`/etc/mail/aliases')
  108.   ______________________________________________________________________
  109.  
  110.  
  111.  
  112.   In the beginning, cf.m4 is included.  This m4 macro file contains lots
  113.   of macro definitions for the rest of the file.  Be sure that the path
  114.   you give here is correct - the one we are representing in our example
  115.   is typical for Debian GNU/Linux.  The OSTYPE macro is used to give
  116.   some useful defaults for certain configuration values.  If you aren't
  117.   using a Debian system, you should replace the word "debian" by "linux"
  118.   here.  ALIAS_FILE tells sendmail where to look for the list of
  119.   aliases.
  120.  
  121.  
  122.   The following lines tell sendmail to use the genericstable feature,
  123.   and where to find the configuration files needed to use it:
  124.  
  125.   ______________________________________________________________________
  126.   FEATURE(masquerade_envelope) FEATURE(genericstable, `hash
  127.   -o /etc/mail/genericstable')
  128.   GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')
  129.   ______________________________________________________________________
  130.  
  131.  
  132.  
  133.   The masquerade_envelope feature tells sendmail to apply header rewrit¡
  134.   ing to the envelope sender of a message.  This is the mail address to
  135.   which external mail delivery subsystems will direct their delivery
  136.   failure reports and warning messages.  The generics* files will be
  137.   explained below.
  138.  
  139.  
  140.   Now, we have to define a so-called smart host, that is, a machine
  141.   which will handle outgoing mail for your system.  Note that this
  142.   machine may be different from your ISP's POP and IMAP servers.  If in
  143.   doubt, contact the hotline.  The code in the master configuration
  144.   file:
  145.  
  146.   ______________________________________________________________________
  147.   define(`SMART_HOST',`mail-out.your.provider')
  148.   ______________________________________________________________________
  149.  
  150.  
  151.   Please replace mail-out.your.provider by the fully qualified hostname
  152.   of your internet service provider.
  153.  
  154.  
  155.   The final two lines include the "mailer" definitions which are needed
  156.   by sendmail to find out how to handle various types of mail:
  157.  
  158.   ______________________________________________________________________
  159.   MAILER(local)
  160.   MAILER(smtp)
  161.   ______________________________________________________________________
  162.  
  163.  
  164.  
  165.  
  166.   To generate the sendmail.cf file from this sendmail.mc, type the
  167.   following commands (as root):
  168.  
  169.   ______________________________________________________________________
  170.   # m4 sendmail.mc > _sendmail.cf
  171.   # mv -f _sendmail.cf sendmail.cf
  172.   ______________________________________________________________________
  173.  
  174.  
  175.   Note the technique of writing m4's output to a temporary file which is
  176.   thereafter moved to the proper place.  This helps us to prevent send¡
  177.   mail from reading partially written configuration files.
  178.  
  179.  
  180.   3.2.  Address rewriting
  181.  
  182.   First, we have to tell sendmail what addresses are to be considered
  183.   local (and thus should be subjected to the rewriting).  This is quite
  184.   simple: Just put the fully qualified host name of your machine into
  185.   the file /etc/mail/genericsdomain.  To get your host's fully qualified
  186.   name, type the following command:
  187.  
  188.   ______________________________________________________________________
  189.    $ hostname -f
  190.   ______________________________________________________________________
  191.  
  192.  
  193.  
  194.  
  195.   Now, let's come to the rewriting table proper:
  196.   /etc/mail/genericstable.  This file consists of two white-space
  197.   separated columns.  The first column contains the local address, the
  198.   second column contains the e-mail address which should be used
  199.   instead.  The file may look like this:
  200.  
  201.  
  202.   ______________________________________________________________________
  203.   harry   harryx@your.isp
  204.   maude   maudey@her.isp
  205.   root    fredx@your.isp
  206.   news    fredx@your.isp
  207.   ______________________________________________________________________
  208.  
  209.  
  210.  
  211.   Note that there should be one entry for each account on the local
  212.   machine, so that automatically generated mail which leaks out of the
  213.   local system carries correct header information.
  214.  
  215.  
  216.   For performance reasons, sendmail won't use this text file directly,
  217.   but rely on a "hashed" version instead.  To generate it, type the
  218.   following command:
  219.  
  220.  
  221.   ______________________________________________________________________
  222.   # makemap -r hash genericstable.db < genericstable
  223.   ______________________________________________________________________
  224.  
  225.  
  226.  
  227.  
  228.   Note that the rewriting rules from the genericstable will not apply to
  229.   local mail or to messages you receive from outside - the mapping is
  230.   only used if a message leaves your local system for your ISP's smart
  231.   host.
  232.  
  233.  
  234.   3.3.  Aliases
  235.  
  236.   The aliases file contains additional local names which are only valid
  237.   for local messages.  This is useful for administrative accounts like
  238.   root which receive automatically generated messages from your system.
  239.  
  240.  
  241.   A reasonable start for /etc/mail/aliases could look like the following
  242.   file:
  243.  
  244.  
  245.   ______________________________________________________________________
  246.   root: fred
  247.   news: root
  248.   postmaster: root
  249.   mail: root
  250.   www: root
  251.  
  252.   nobody: /dev/null
  253.   MAILER-DAEMON: nobody
  254.   ______________________________________________________________________
  255.  
  256.  
  257.  
  258.   This example will forward local mail for the root, news, postmaster,
  259.   mail, and www users to fred, while messages for nobody and MAILER-
  260.   DAEMON will be redirected to /dev/null.
  261.  
  262.  
  263.   Just like the genericstable, aliases may contain lots of entries.
  264.   Thus, it would once again be inefficient for sendmail to use the text
  265.   file we just described.  The same mechanism as with genericstable is
  266.   used for aliases: A hashed database is generated.  Instead of using
  267.   makemap directly, you can type in the command newaliases this time.
  268.   It will automatically take care of all what's needed.
  269.  
  270.  
  271.   4.  Further reading
  272.  
  273.   The sendmail source distribution includes quite a bit of
  274.   documentation.  Read it, especially the file cf/README.
  275.  
  276.  
  277.   If you are interested to dive deeper into sendmail's configuration
  278.   options, you want to get the "Bat Book" from O'Reilly: Bryan Costales,
  279.   Eric Allman, and Neil Rickert: "sendmail".  O'Reilly, 1993.
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.