SMTP authentication in sendmail

Created: — modified: — tags: sendmail

By default sendmail is configured in such a way that any program running on localhost can send an email without password, and none from another computer can do that. But what if you want to change that?

Update: Note that long after writing this guide, I've switched to Postfix as my mail server, so this guide was correct at the time of writing, it might be obsolete and/or incorrect at the time of reading.

This guide is inspired by Chapter 12 of Linux Home Server HOWTO and official sendmail documentation. Please read them if something's unclear.

Installation

On Ubuntu server 12.04 most required packages are already installed, and only authentication modules for SASL are missing (SASL is a library used to check username and password). To install them, just type:

apt-get install libsasl2-modules

Configuration

First, to make sendmail use SASL, add this line somewhere in the middle of the /etc/mail/sendmail.mc file:

include(`/etc/mail/sasl/sasl.m4')dnl

Next, to allow incoming connections, remove "Addr=127.0.0.1" from DAEMON_OPTIONS lines in the same file, to make them look like this:

DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp')dnl
DAEMON_OPTIONS(`Family=inet,  Name=MSP-v4, Port=submission, M=Ea')dnl

After editing /etc/mail/sendmail.mc file, rebuild sendmail config by issuing the following command:

sendmailconfig

Passwordless access from localhost

Now sendmail would relay (send email to foreign hosts) only when provided a password. If you want to return the ability to send email from localhost without a password, first edit /etc/mail/access file: comment out everything but localhost and issue the following command to rebuild access database:

makemap hash access < access

After that, add this line somewhere to /etc/mail/sendmail.mc file:

FEATURE(access_db)dnl

And run sendmailconfig again.

Files and settings

Settings are scattered in these files:

/etc/mail/sasl/sasl.m4 defines how sendmail uses SASL library: settings confAUTH_MECHANISMS and TRUST_AUTH_MECH show what authentication methods are supported and authorize user, respectively (that's about methods to transfer password from e-mail client to sendmail).

/usr/lib/sasl2/Sendmail.conf shows how SASL checks if the password is correct. By default it says pwcheck_method: saslauthd what means that it uses SASL auth demon.

Configuration for this demon is stored in /etc/default/saslauthd file, which by default has a line MECHANISMS="pam" which means "use system method" (by default, username+password for local account).

These settings can be changed, but that's out of scope of this article, sorry.

Follow-up

To better secure your email (and its password!), you probably want to setup SSL connections, too. To do that, you need an SSL certificate and just perform first three steps from official guide.