280 lines
9.2 KiB
Plaintext
280 lines
9.2 KiB
Plaintext
|
sendmail address rewriting mini-HOWTO
|
|||
|
Thomas Roessler, roessler@guug.de
|
|||
|
v0.0, 6 May 1998
|
|||
|
|
|||
|
This document is a brief description of how to set up sendmail's con<6F>
|
|||
|
figuration file for the home user's dial-up access.
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
We assume that you have the kind of Internet access which seems to be
|
|||
|
most common at universities and online services nowadays: You dial
|
|||
|
into your provider's network using PPP over a serial connection. Your
|
|||
|
incoming mail is spooled at the provider's POP or IMAP server, while
|
|||
|
outgoing messages are to be sent via SMTP. You don't have a domain
|
|||
|
name of your own, so everything has to use one address.
|
|||
|
|
|||
|
|
|||
|
We assume that you have already installed a fairly recent version of
|
|||
|
Eric Allman's sendmail (version 8.8.8 is current at the time of this
|
|||
|
writing and should work fine).
|
|||
|
|
|||
|
|
|||
|
This document is partially referring to specific properties of Debian
|
|||
|
GNU/Linux systems; users of different distributions will have to take
|
|||
|
some care.
|
|||
|
|
|||
|
|
|||
|
Make sure you have the following information at hand:
|
|||
|
|
|||
|
|
|||
|
<20> Your ISP's mail server
|
|||
|
|
|||
|
<20> Your Internet mail address
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The configuration we are planning has two main goals:
|
|||
|
|
|||
|
|
|||
|
1. Sending mail between various local users must be possible.
|
|||
|
|
|||
|
2. The outside world must see the local users' ISP mail addresses, not
|
|||
|
the local ones.
|
|||
|
|
|||
|
|
|||
|
To achieve this, we will make use of sendmail's genericstable feature.
|
|||
|
|
|||
|
|
|||
|
2. File Roadmap
|
|||
|
|
|||
|
We will put all of sendmail's configuration files in a separate
|
|||
|
directory under /etc: /etc/mail. Usually, sendmail will expect these
|
|||
|
files to reside directly under /etc. To avoid problems,
|
|||
|
/etc/sendmail.cf should be a symbolic link to /etc/mail/sendmail.cf.
|
|||
|
|
|||
|
|
|||
|
The following files will populate /etc/mail:
|
|||
|
|
|||
|
<20> =20
|
|||
|
|
|||
|
<20> aliases - contains additional local addresses
|
|||
|
|
|||
|
<20> genericsdomain - contains some information on your local host's
|
|||
|
configuration
|
|||
|
|
|||
|
|
|||
|
<20> genericstable - contains the actual rewriting rules.
|
|||
|
|
|||
|
<20> sendmail.cf - sendmail's configuration file
|
|||
|
|
|||
|
<20> sendmail.mc - the source of sendmail.cf.
|
|||
|
|
|||
|
Some of these files will be accompanied by .db files. They contain
|
|||
|
hashed databases for sendmail's direct use.
|
|||
|
|
|||
|
|
|||
|
We assume that the cf part of sendmail's source tree resides under a
|
|||
|
directory named /usr/lib/sendmail.cf. This is the case on Debian
|
|||
|
GNU/Linux systems. Other distributions will put this stuff at
|
|||
|
different places. Please refer to your distribution's documentation
|
|||
|
for details.
|
|||
|
|
|||
|
|
|||
|
3. Configuring sendmail
|
|||
|
|
|||
|
3.1. The main configuration file
|
|||
|
|
|||
|
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')
|
|||
|
______________________________________________________________________
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The masquerade_envelope feature tells sendmail to apply header rewrit<69>
|
|||
|
ing 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')
|
|||
|
______________________________________________________________________
|
|||
|
|
|||
|
|
|||
|
Please replace mail-out.your.provider by the fully qualified hostname
|
|||
|
of your internet service 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
|
|||
|
______________________________________________________________________
|
|||
|
|
|||
|
|
|||
|
Note the technique of writing m4's output to a temporary file which is
|
|||
|
thereafter moved to the proper place. This helps us to prevent send<6E>
|
|||
|
mail from reading partially written configuration files.
|
|||
|
|
|||
|
|
|||
|
3.2. Address rewriting
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
3.3. Aliases
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
4. Further reading
|
|||
|
|
|||
|
The sendmail source distribution includes quite a bit of
|
|||
|
documentation. Read it, especially the file cf/README.
|
|||
|
|
|||
|
|
|||
|
If you are interested to dive deeper into sendmail's configuration
|
|||
|
options, you want to get the "Bat Book" from O'Reilly: Bryan Costales,
|
|||
|
Eric Allman, and Neil Rickert: "sendmail". O'Reilly, 1993.
|
|||
|
|
|||
|
|
|||
|
|