Tuesday, January 11, 2011

Sendmail Quick Reference



What is Sendmail?

Sendmail is the most popular mail server software and runs on Unix/Linux
computers. The freeware version is available from: www.sendmail.org
Sendmail relies on a configuration file sendmail.cf which normally resides
in /etc/mail directory. It is not easy to modify this file directly. One should
modify sendmail macro configuration file: /etc/mail/sendmail.mc and then
generate sendmail.cf with m4 macro processor:

 m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

For new configuration file to take effects, you must restart sendmail
daemon. On Redhat, use:

 service sendmail restart

Macro Configuration File - sendmail.mc

In sendmail.mc, any thing after “dnl” is treated as comments. A block of
comments are delimited by divert(-1) and divert(0). To use string value,
use back tick (`) and end quota (')

You must specify OSTYPE for OS dependent definitions,  for example OSTYPE(`linux'). Optionally, you can specify using DOMAIN dependent definitions, e.g., DOMAIN(`generic'). Note: must use back tick (`) and end quota (') to enclose a string value.
At the end of .MC, give mailer for Internet and Local mail
MAILER(smtp)
MAILER(procmail)

Use FEATURE(keyword) to enable desired features. Here are some useful
keywords. For complete list of features, see http://www.sendmail.org/m4/features.html
After you changing sendmail.mc, you generate new sendmail.cf with:

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

Keyword Description

redirect In aliases file, use following entry to tell
sender the new address:
foo: foo@newplace.com.REDIRECT
relay_hosts_only By default, names listed in /etc/mail/access
treated as domain. Allow only computer name.
access_db Turns on the access control feature.
blacklist_recipients Turns on the ability to block incoming mail for
certain recipient usernames, hostnames, or addresses.
use_cw_file Read /etc/mail/local-host-names file to get
alternate names for this host (for multiple host
name).
use_ct_file Read /etc/mail/trusted-users file to get trusted
users that allow set sender address.
virtusertable Used for host mutiple virtual domains.
You can use define in .MC file to change some default settings:
define(`ALIAS_FILE', `/etc/aliases')
location of aliases file
define(`SMART_HOST',`smtp. your.com')
use external outgoing server
define(`confME_TOO', true) In aliases mailing, if sender is in the
list, also send copy to the sender.
define(`confMAX_MESSAGE_SIZE', 0)
Maximum size of mail (0: no limit)

Access Control

An access database can be created to accept or reject mails from selected
domains or senders. You edit a text file /etc/mail/access. Each
domain/computer/senders can be followed by: OK, RELAY, REJECT, or
DISCARD.
#---------------------------------------
# SAMPLE of /etc/mail/access
#---------------------------------------
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
spammer@aol.com REJECT

After modifying access text file, you have to create database map with
command: makemap hash /etc/mail/access.db < /etc/mail/access

if FEATURE(use_cw_file) is used, sendmail will read /etc/mail/localhost-
names file to get alternate names for this host. You can list machine
names that treat as localhost for RELAY.
Aliases file and $HOME/.forward
A system wide aliases file (/etc/aliases) provides alternate names for
individual users, forwarding of mail to other hosts and mailing lists. This is
a text file. You can also include an external file in the aliases file
aliasname: recipient[, recipient,...]
listname: :include: /path/filename
After modifying aliases file, you must run newaliases to rebuild aliases
database.

An individual user can create a .forward file in his home directory to
forward mails send to him. It is possible put many email addresses in the
.forward file and use it as a mailing list.
Keep a copy in mailbox and forward a copy
\jialong # using \ to prevent further expand
jialong@otherplace.com
SAMPLE /etc/aliases
#
# >>>>>>>>>> The program "newaliases" must be run after
# >> NOTE >> this file is updated for any changes to
# >>>>>>>>>> show through to sendmail.
#
# Basic system aliases -- these MUST be present.
mailer-daemon: postmaster
postmaster: root
root: jialong
#============================================
# mailing list
#============================================
list: :include:/home/jialong/list.txt
jialong: jialong_he@yahoo.com, jialong@tiger.la.asu.edu

SAMPLE /etc/mail/sendmail.mc

include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for Red Hat Linux')dnl
OSTYPE(`linux')dnl
define(`SMART_HOST',`smtp.mydomain.com')dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db',`hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
dnl # The following causes sendmail to only listen on the IPv4 loopback
dnl # address 127.0.0.1 Remove the loopback address restriction to accept
dnl # email from the internet or intranet.
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
dnl FEATURE(`accept_unresolvable_domains')dnl
LOCAL_DOMAIN(`localhost.localdomain')dnl
dnl MASQUERADE_AS(`mydomain.com')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl

1 comment: