962864
Quick Start to Authenticate with SASL and PAM:
962864
----------------------------------------------
962864
962864
If you don't need the details and are an experienced system
962864
administrator you can just do this, otherwise read on.
962864
962864
1) Edit /etc/postfix/main.cf and set this:
962864
962864
smtpd_sasl_auth_enable = yes
962864
smtpd_sasl_security_options = noanonymous
962864
broken_sasl_auth_clients = yes
962864
962864
smtpd_recipient_restrictions = 
962864
  permit_sasl_authenticated,
962864
  permit_mynetworks,
962864
  reject_unauth_destination
962864
962864
2) Turn on saslauthd:
962864
962864
   /sbin/chkconfig --level 345 saslauthd on
962864
   /sbin/service saslauthd start
962864
962864
3) Edit /etc/sysconfig/saslauthd and set this:
962864
962864
   MECH=pam
962864
962864
4) Restart Postfix:
962864
962864
   /sbin/service postfix restart
962864
962864
A crash course in using SASL with Postfix:
962864
------------------------------------------
962864
962864
Red Hat's Postfix RPMs include support for both SASL and TLS.  SASL, the
962864
Simple Authentication and Security Layer, allows Postfix to implement RFC
962864
2554, which defines an extension to ESMTP, SMTP AUTH, which compliant
962864
ESMTP clients can use to authenticate themselves to ESMTP servers.
962864
Typically, this is used to allow roaming users to relay mail through a
962864
server safely without configuring the SMTP server to be an open relay.
962864
Inclusion of TLS support allows Postfix to implement RFC 2487, which
962864
defines an extension to ESMTP, SMTP STARTTLS, which compliant ESMTP
962864
clients and servers can use to encrypt the SMTP session.  This is a
962864
security enhancement -- normally SMTP is transmitted as cleartext over the
962864
wire, making it vulnerable to both passive sniffing and active alteration
962864
via monkey-in-the-middle attacks.  In addition, STARTTLS can also be
962864
used by either or both server and client to verify the identity of the
962864
other end, making it useful for the same sorts of purposes as SMTP AUTH.
962864
The two can even be combined.  Typically, this is done by first starting
962864
TLS, to encrypt the SMTP session, and then issuing the SMTP AUTH command,
962864
to authenticate the client; this combination ensures that the username
962864
and password transferred as part of the SMTP AUTH are protected by the
962864
TLS encrypted session.
962864
962864
SMTP AUTH is implemented using SASL, an abstraction layer which can
962864
authenticate against a variety of sources.  On Red Hat, SASL can use
962864
the /etc/shadow file, or it can use PAM libraries, or it can use its own
962864
password database (/etc/sasldb), or it can do various more exotic things.
962864
962864
Authentication raises a number of security concerns for obvious
962864
reasons. As a consequence authentication services on Red Hat systems
962864
are restricted to processes running with root privileges. However for
962864
security reasons it is also essential that a mail server such as
962864
Postfix run without root privileges so that mail operations cannot
962864
compromise the host system. This means that Postfix cannot directly
962864
use authentication services because it does not execute with root
962864
privileges. The answer to this this problem is to introduce an
962864
intermediary process that runs with root privileges which Postfix can
962864
communicate with and will perform authentication on behalf of
962864
Postfix. The SASL package includes an authentication daemon called
962864
saslauthd which provided this service, think of it as an
962864
authentication proxy.
962864
962864
Using Saslauthd:
962864
---------------- 
962864
962864
To use saslauthd there are several things you must assure are
962864
configured. 
962864
962864
Selecting an Authentication Method:
962864
-----------------------------------
962864
962864
Recall that it is saslauthd which is authenticating, not
962864
Postfix. To start with you must tell Postfix to use saslauthd, in
962864
main.cf edit this configuration parameter:
962864
962864
   smtpd_sasl_auth_enable = yes
962864
962864
It is also recommended that you disable anonymous logins otherwise
962864
you've left your system open, so also add this configuration
962864
parameter. 
962864
962864
   smtpd_sasl_security_options = noanonymous
962864
962864
Now you must tell saslauthd which authentication method to use. To
962864
determine the authentication methods currently supported by saslauthd
962864
invoke saslauthd with the -v parameter, it will print its version and
962864
its list of methods and then exit, for example:
962864
962864
   /usr/sbin/saslauthd -v
962864
   saslauthd 2.1.10
962864
   authentication mechanisms: getpwent kerberos5 pam rimap shadow 
962864
962864
When saslauthd starts up it reads its configuration options from the
962864
file /etc/sysconfig/saslauthd. Currently there are two parameters
962864
which can be set in this file, MECH and FLAGS. MECH is the
962864
authentication mechanism and FLAGS is any command line flags you may
962864
wish to pass to saslauthd. To tell saslauthd to use a specific
962864
mechanism edit /etc/sysconfig/saslauthd and set the MECH parameter,
962864
for example to use PAM it would look like this:
962864
962864
   MECH=pam
962864
962864
Of course you may use any of the other authentication mechanisms that
962864
saslauthd reported it supports. PAM is an excellent choice as PAM
962864
supports many of the same authentication methods that saslauthd does,
962864
but by using PAM you will have centralized all of your authentication
962864
configuration under PAM which is one of PAM's greatest assets.
962864
962864
How Postfix Interacts with SASL to Name its Authentication Services:
962864
--------------------------------------------------------------------
962864
962864
It can be very helpful to understand how Postfix communicates with
962864
SASL to name its authentication services. Knowing this will let you
962864
identify the configuration files the various components will access.
962864
962864
When Postfix invokes SASL it must give SASL an application name that
962864
SASL will use among other things to locate a configuration file for
962864
the application. The application name Postfix identifies itself as is
962864
"smtpd". SASL will append ".conf" to the application name and look for
962864
a config file in its library and config directories. Thus SASL will
962864
read Postfix's configuration from
962864
962864
   /etc/sasl2/smtpd.conf
962864
962864
This file names the authentication method SASL will use for Postfix
962864
(actually for smtpd, other MTA's such as sendmail may use the same
962864
file). Because we want to use the saslauthd authentication proxy
962864
daemon the contents of this file is:
962864
962864
   pwcheck_method: saslauthd
962864
962864
This tells SASL when being invoked to authentication for Postfix that
962864
it should use saslauthd. Saslauthd's mechanism is set in
962864
/etc/sysconfig/saslauthd (see below).
962864
962864
When Postfix calls on SASL to authenticate it passes to SASL a service
962864
name. This service name is used in authentication method specific
962864
way. The service name Postfix passes to SASL is "smtp" (note this is
962864
not the same as the application name which is "smtpd"). To understand
962864
this better consider the case of using PAM authentication. When SASL,
962864
or in our case saslauthd, invokes PAM it passes the service name of
962864
"smtp" to PAM which means that when PAM wants to read configuration
962864
information for this client it will find it under the name of "smtp". 
962864
962864
Turning on the Authentication Daemon:
962864
-------------------------------------
962864
962864
Red Hat security policy is not to automatically enable services
962864
belonging to a package when the package is installed. The system
962864
administrator must explicitly enable the service. To enable saslauthd
962864
do the following:
962864
962864
1) Tell the init process to launch saslauthd when entering various run
962864
   levels. Assuming you want saslauthd to run at run levels 3,4,5
962864
   invoke chkconfig.
962864
962864
   /sbin/chkconfig --level 345 saslauthd on
962864
962864
2) You will probably want to start saslauthd now without having to
962864
   reboot, to do this:
962864
962864
   /sbin/service saslauthd start
962864
962864
Trouble Shooting Authentication:
962864
--------------------------------
962864
962864
The best way to debug authentication problems is to examine log
962864
messages from the authentication components. However, normally these
962864
log messages are suppressed. There are two principle reasons the
962864
messages are suppressed. The first is that they are typically logged
962864
at the DEBUG logging priority level which is the lowest priority and
962864
the syslog configuration typically logs only higher priority
962864
messages. The second reason is that for security reasons authentication
962864
logging is considered a risk. Authentication logging has been divided
962864
into two different facilities, auth and authpriv. authpriv is private
962864
and is typically shunted off to a different log file with higher
962864
protection. You will want to be able to see both auth and authpriv
962864
messages at all priorities. To do this as root edit /etc/syslog.conf
962864
file, find the following line
962864
962864
authpriv.*					/var/log/secure
962864
962864
edit the line to:
962864
962864
authpriv.*;auth.*				/var/log/secure
962864
962864
Then restart syslogd so the syslog configuration changes will be
962864
picked up:
962864
962864
       /sbin/service syslog restart
962864
962864
Now all authentication messages at all priorities will log to
962864
/var/log/secure. 
962864
962864
Using PAM to Authenticate:
962864
--------------------------
962864
962864
Edit /etc/sysconfig/saslauthd and set MECH to PAM like this:
962864
962864
   MECH=pam
962864
962864
When PAM is invoked via SASL it is passed a service name of
962864
"smtp". This means that PAM will read its configuration parameters for
962864
Postfix from the file: /etc/pam.d/smtp. By default this file is set to
962864
refer to the global system PAM authentication policy, thus by default
962864
you'll get whatever PAM authentication your system is configured for
962864
and virtually all applications use. Configuring PAM authentication is
962864
beyond the scope of this document, please refer to the PAM
962864
documentation if you which to modify PAM.
962864
962864
Trouble Shooting PAM Authentication:
962864
------------------------------------
962864
962864
1) One possible reason PAM may fail to authenticate even if the user
962864
is known to the system is if PAM fails to find the service
962864
configuration file in /etc/pam.d. Service configuration files are not
962864
required by PAM, if it does not find a service configuration file it
962864
will default to "other". Since PAM does not consider the absence of a
962864
service configuration file a problem it does not log anything nor does
962864
it return an error to the calling application. In other words it is
962864
completely silent about the fact it did not find a service
962864
configuration file. On Red Hat system the default implementation of
962864
"other" for PAM is to deny access. This means on Red Hat systems the
962864
absence of a PAM service configuration file will mean PAM will
962864
silently fail authentication. The PAM service configuration file for
962864
postfix is /etc/pam.d/smtp and is intalled by the Red Hat Postfix rpm
962864
and put under control of "alternatives" with name mta. Alternatives
962864
allows one to select between the sendmail and postfix MTA's and
962864
manages symbolic links for files the two MTA's share. /etc/pam.d/smtp
962864
is one such file, if you have not selected Postfix as your prefered
962864
MTA the link to this file will not be present. To select Postfix as
962864
your MTA do this: "/usr/sbin/alternatives --config mta" and follow the
962864
prompt to select postfix.
962864
962864
2) Is SASL appending a realm or domain to a username? PAM
962864
   authentication requires a bare username and password, other
962864
   authentication methods require the username to be qualified with a
962864
   realm. Typically the username will be rewritten as user@realm
962864
   (e.g. user@foo.com) PAM does not understand a username with
962864
   "@realm" appended to it and will fail the authentication with the
962864
   message that the user is unknown. If the log files shows saslauthd
962864
   usernames with "@realm" appended to it then the
962864
   smtpd_sasl_local_domain configuration parameter is likely set in
962864
   /etc/postfix/main.cf file, make sure its either not set or set it
962864
   to an empty string. Restart postfix and test authtentication again,
962864
   the log file should show only a bare username.
962864
962864
962864
962864
Using saslpasswd to Authenticate:
962864
---------------------------------
962864
962864
SASL can maintain its own password database independent of the host
962864
system's authentication setup, it is called saslpasswd. You may wish
962864
to use saslpasswd if you want to isolate who can smtp authenticate
962864
from general system users. However, it does add another password
962864
database that a system administrator must maintain.
962864
962864
To authenticate against sasldb, you'll first have to create accounts.
962864
These accounts are entirely separate from system accounts, and are used
962864
only by connecting SMTP clients to authenticate themselves.  Use the
962864
saslpassword command:
962864
962864
saslpasswd -u `postconf -h myhostname` -c user
962864
962864
to create an account named user which can log into realm.  For the
962864
realm, make absolutely certain that you use the same value as is set for
962864
myhostname in /etc/postfix/main.cf.  If you don't, it likely won't work.
962864
962864
Also, be aware that saslpasswd is somewhat buggy.  The first time you
962864
run it, it may generate an error message while initializing the sasldb.
962864
If it does, just add that user a second time.
962864
962864
You'll need to set permissions on the SASL password database so that
962864
the Postfix daemons can read it:
962864
962864
   chgrp postfix /etc/sasldb
962864
   chmod g+r /etc/sasldb
962864
962864
Now, you'll need to modify /etc/postfix/main.cf to tell it to
962864
support SASL.  The complete options you might want to use are in the
962864
sample-auth.cf file in the Postfix documentation directory.  An option
962864
you will definitely need is:
962864
962864
# enable SASL support
962864
smtpd_sasl_auth_enable = yes
962864
962864
You might also need to set the SASL authentication realm to whatever
962864
realm you used when you created your sasldb; by default, this is set to
962864
$myhostname, but you instead might need something like:
962864
962864
# set SASL realm to domain instead
962864
smtpd_sasl_local_domain = $mydomain
962864
962864
Other Postfix Authentication Parameters:
962864
----------------------------------------
962864
962864
If you want to allow your already configured users to still use your SMTP
962864
server, and to allow users authenticated via SMTP AUTH to use your server
962864
as well, then modify your existing smtpd_recipient_restrictions line to;
962864
962864
# also allow authenticated (RFC 2554) users
962864
smtpd_recipient_restrictions = permit_sasl_authenticated ...
962864
962864
If you want to restrict use of your server to just authenticated clients
962864
(Note: this is a bad idea for public mail servers), then instead use:
962864
962864
# restrict server access to authenticated (RFC 2554) clients
962864
smtpd_delay_reject = yes
962864
smtpd_client_restrictions = permit_sasl_authenticated ...
962864
962864
SASL supports several password types which have differing security
962864
properties.  Different SMTP clients may support some or all of these
962864
password types.  When the client issues an EHLO command, the server
962864
tells it which types it supports:
962864
962864
$ telnet station6 25
962864
Trying 10.100.0.6...
962864
Connected to station6.example.com.
962864
Escape character is '^]'.
962864
220 station6.example.com ESMTP Postfix
962864
ehlo station7
962864
250-station6.example.com
962864
250-PIPELINING
962864
250-SIZE 10240000
962864
250-VRFY
962864
250-ETRN
962864
250-STARTTLS
962864
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
962864
250-XVERP
962864
250 8BITMIME
962864
962864
Here, the server supports PLAIN, LOGIN, DIGEST-MD5, and CRAM-MD5 password
962864
methods.
962864
962864
The client then chooses the first of these listed methods which it also
962864
supports, and issues an SMTP AUTH request.
962864
962864
For security, PLAIN and LOGIN methods are typically disabled.  These two
962864
methods use trivially decryptable encryption, making the username and
962864
password issued by the client vulnerable to interception via a sniffer
962864
in between the server and client.  Unfortunately, they can't always
962864
be disabled.  Some popular SMTP clients, including MS Outlook 5.x,
962864
only support PLAIN authentication, for example.
962864
962864
To limit the login methods offered by the server:
962864
962864
# disable unsafe password methods
962864
smtpd_sasl_security_options = noplaintext noanonymous
962864
962864
Available options are:
962864
962864
noplaintext, which disables LOGIN and PLAIN
962864
noanonymous, which disables disables ANON
962864
nodictionary, which disables methods vulnerable to dictionary attacks
962864
noactive, which disables methods vulnerable to active attacks
962864
962864
The last two are rarely used, since almost all supported methods are
962864
vulnerable to those attacks ;-).
962864
962864
Also be aware that some broken clients mis-implement the SMTP AUTH
962864
protocol, and send commands using incorrect syntax (AUTH=foo instead of
962864
the correct AUTH foo).  MS Outlook 4.x clients have this bug, among
962864
a legion of others....  If you need to support these clients, use:
962864
962864
# support braindead MS products
962864
broken_sasl_auth_clients = yes
962864
962864
To help prevent spoofing, you can also create a map file of SASL login
962864
names which are allowed to use specific envelope sender (MAIL FROM)
962864
addresses.  If you choose to do this, you also have to tell Postfix to
962864
reject addresses which don't match login names:
962864
962864
# prevent spoofing by authenticated users
962864
reject_sender_login_mismatch
962864
smtpd_sender_login_maps=type:/path/to/file
962864
962864
Configuration of SASL clients is much simpler.  Postfix itself can be
962864
made a SASL client; this is typically useful when roaming users run Linux
962864
on their laptop and need to relay mail back through the organization's
962864
main server.
962864
962864
To enable Postfix to act as an SMTP AUTH client, simply add to
962864
/etc/postfix/main.cf:
962864
962864
# support authentication (RFC 2557) when relaying through a server
962864
smtp_sasl_auth_enable = yes
962864
962864
and tell Postfix where to find the usernames and passwords it should
962864
use to authenticate:
962864
962864
# location of passwords for authentication client
962864
smtp_sasl_password_maps = type:/path/to/file
962864
962864
The file itself should have the format:
962864
962864
destination     username:password
962864
962864
where destination is the name of the server, and username:password are
962864
the username and password which should be presented to that server to
962864
authenticate when connecting to it as a client.
962864
962864
Optionally, the authentication methods to be used can be specified for
962864
the Postfix client, just as they can be for the Postfix server:
962864
962864
# disable plaintext and anonymous
962864
smtp_sasl_security_options = noplaintext noanonymous
962864
962864
Many popular end-user MUAs can also be configured as SMTP AUTH clients.
962864
Clients capable of this supplied with Red Hat include pine, Netscape,
962864
and Mozilla.
962864
962864
Other Sources of Documentation:
962864
-------------------------------
962864
962864
/usr/share/doc/postfix-<version>/README_FILES/SASL_README
962864
962864
Local configuration examples:
962864
962864
/usr/share/doc/postfix-*/samples
962864
962864
Postfix Howtos, Guides and Tips by Ralf Hildebrandt and Patrick
962864
Koetter can be found at: http://postfix.state-of-mind.de
962864
962864
------------------------------------------------------------------------------
962864
962864
Please send any comments / corrections to Chris Ricker
962864
<kaboom@gatech.edu>.  This material can be freely modified and
962864
redistributed. Additional material provided by John Dennis
962864
<jdennis@redhat.com> and Dax Kelson <dax@gurulabs.com>.