Sendmail uses a highly complex rule system for it's
configuration. While you can do lots of neat tricks with this
stuff, writing a sendmail.cf file from scratch is
rather unusual and time-consuming. If you are interested in doing
so, you should stop reading this document right now and instead
read the "Bat Book" from O'Reilly.
Instead of hand-crafting these rules, we will rely on the
m4 macro processor to put together our configuration
file from ready-made pieces which are distributed together with
sendmail.
Let's look at the first lines of the sendmail.mc
file:
include(/usr/lib/sendmail.cf/m4/cf.m4) VERSIONID(`sendmail.mc - roessler@guug.de') OSTYPE(debian) define(`ALIAS_FILE',`/etc/mail/aliases')
In the beginning, cf.m4 is included. This m4 macro
file contains lots of macro definitions for the rest of the file.
Be sure that the path you give here is correct - the one we are
representing in our example is typical for Debian GNU/Linux. The
OSTYPE macro is used to give some useful defaults
for certain configuration values. If you aren't using a Debian
system, you should replace the word "debian" by "linux" here.
ALIAS_FILE tells sendmail where to look for the list
of aliases.
The following lines tell sendmail to use the
genericstable feature, and where to find the
configuration files needed to use it:
FEATURE(masquerade_envelope) FEATURE(genericstable, `hash -o /etc/mail/genericstable') GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')
masquerade_envelope feature tells sendmail to
apply header rewriting to the envelope sender of a
message. This is the mail address to which external mail delivery
subsystems will direct their delivery failure reports and warning
messages. The generics* files will be explained below.
Now, we have to define a so-called smart host, that is, a machine which will handle outgoing mail for your system. Note that this machine may be different from your ISP's POP and IMAP servers. If in doubt, contact the hotline. The code in the master configuration file:
define(`SMART_HOST',`mail-out.your.provider')
The final two lines include the "mailer" definitions which are needed by sendmail to find out how to handle various types of mail:
MAILER(local) MAILER(smtp)
To generate the sendmail.cf file from this
sendmail.mc, type the following commands (as root):
# m4 sendmail.mc > _sendmail.cf # mv -f _sendmail.cf sendmail.cf
m4's output to a
temporary file which is thereafter moved to the proper place. This
helps us to prevent sendmail from reading partially written
configuration files.
First, we have to tell sendmail what addresses are to be
considered local (and thus should be subjected to the rewriting).
This is quite simple: Just put the fully qualified host name of
your machine into the file
/etc/mail/genericsdomain. To
get your host's fully qualified name, type the following command:
$ hostname -f
Now, let's come to the rewriting table proper:
/etc/mail/genericstable.
This file consists of two white-space separated columns. The
first column contains the local address, the second column
contains the e-mail address which should be used instead. The
file may look like this:
harry harryx@your.isp maude maudey@her.isp root fredx@your.isp news fredx@your.isp
Note that there should be one entry for each account on the local machine, so that automatically generated mail which leaks out of the local system carries correct header information.
For performance reasons, sendmail won't use this text file directly, but rely on a "hashed" version instead. To generate it, type the following command:
# makemap -r hash genericstable.db < genericstable
Note that the rewriting rules from the genericstable
will not apply to local mail or to messages you receive
from outside - the mapping is only used if a message leaves your
local system for your ISP's smart host.
The aliases file contains additional local names which are only
valid for local messages. This is useful for administrative
accounts like root which receive automatically
generated messages from your system.
A reasonable start for
/etc/mail/aliases could look
like the following file:
root: fred news: root postmaster: root mail: root www: root nobody: /dev/null MAILER-DAEMON: nobody
This example will forward local mail for the root,
news, postmaster, mail,
and www users to fred, while messages
for nobody and MAILER-DAEMON will be
redirected to /dev/null.
Just like the genericstable, aliases
may contain lots of entries. Thus, it would once again
be inefficient for sendmail to use the text file we just
described. The same mechanism as with genericstable
is used for aliases: A hashed database is generated.
Instead of using makemap directly, you can type in
the command newaliases this time. It will
automatically take care of all what's needed.