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