31.9.SMTP 认证

在 MTA 上配置 SMTP 认证有很多好处。SMTP 认证为 Sendmail 增加了一层安全性,并为切换主机的移动用户提供了使用同一 MTA 的能力,而不需要每次都重新配置他们邮件客户端的设置。

1.从 Ports 中安装 security/cyrus-sasl2。这个 port 支持一些编译选项。对于本例中演示的 SMTP 认证方法,确保 LOGIN 没有被禁用。

2.安装 security/cyrus-sasl2 后,编辑 /usr/local/lib/sasl2/Sendmail.conf,如果它不存在,则创建它,并添加以下一行:

pwcheck_method: saslauthd

3.接下来,安装 security/cyrus-sasl2-saslauthd,并在 /etc/rc.conf 中添加以下一行:

saslauthd_enable="YES"

最后,启动守护程序 saslauthd:

# service saslauthd start

这个守护进程作为 Sendmail 的代理,对 FreeBSD 的 passwd(5) 数据库进行认证。这样就省去了为每个需要使用 SMTP 认证的用户创建一套新的用户名和密码的麻烦,并使登录和邮件密码保持一致。

4.接下来,编辑 /etc/make.conf 并添加以下几行:

SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
SENDMAIL_LDADD=/usr/local/lib/libsasl2.so

这几行为 Sendmail 提供了适当的配置选项,以便在编译时与 cyrus-sasl2 连接。在重新编译 Sendmail 之前,请确保cyrus-sasl2 已经安装完毕。

5.通过执行以下命令来重新编译 Sendmail。

# cd /usr/src/lib/libsmutil
# make cleandir && make obj && make
# cd /usr/src/lib/libsm
# make cleandir && make obj && make
# cd /usr/src/usr.sbin/sendmail
# make cleandir && make obj && make && make install

如果 /usr/src 没有大的变化,并且它所需要的共享库是可用的,那么这个编译应该不会有任何问题。

6.在 Sendmail 被编译并重新安装后,编辑 /etc/mail/freebsd.mc 或本地的 .mc。许多管理员选择使用 hostname(1) 的输出作为 .mc 的名称,以保持其唯一性。添加这些行:

dnl set SASL options
TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl

这些选项配置了 Sendmail 可用来验证用户的不同方法。要使用 pwcheck 以外的方法,请参考 Sendmail 的文档。

7.最后,在 /etc/mail 中运行 make(1)。这将运行新的 .mc 并创建一个 .cf,命名为 freebsd.cf 或本地 .mc 所用的名称。然后,运行 make install restart,这将把文件复制到 sendmail.cf,并正确地重新启动 Sendmail。关于这个过程的更多信息,请参考 /etc/mail/Makefile

为了测试配置,使用 MUA 来发送一个测试信息。为了进一步调查,将 Sendmail 的 LogLevel 设置为 13,并观察 /var/log/maillog 是否有错误。

欲了解更多信息,请参考 SMTP 认证