Blame SOURCES/README-Postfix-SASL-RedHat.txt

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