如何在RHEL3环境下配置Postfix支持认证的SMTP协议?
解决方法:

Postfix可以配置支持对有合法帐户的远程用户中继邮件的能力,按照本文的配置可以实现以明文方式发送用户名和密码来实现SMTP认证。为了保证帐号密码安全,以防止明文传输导致被窃听。

SMTP认证实现对于那些不在本地网(在/etc/postfix/main.cf的mynetwork)的用户可以通过提供用户名和密码来实现SMTP中继转发。在配置SMTP认证之前,首先要求Postfix被安装并正确接收发送邮件。

1. 打开/etc/postfix/main.cf,加入以下内容:

     smtpd_sasl_auth_enable = yes

这行配置指示Postfix激活SMTP认证,当用户IP不在本地网路中,并且目标邮件地址是其他邮件服务器时,就会提示SMTP认证再进行邮件中继转发。

2. 在/etc/postfix/main.cf加入:

     smtpd_sasl_security_options=noanonymous

这将禁用匿名方式的SMTP认证登录。如果不添加这个配置,那么任何人都可以使用postfix进行中继转发。

3. 在/etc/postfix/main.cf中,添加smtpd_recipient_restrictions:

     smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_relay_domains

这行限制客户端随意通过本机中继,也就是关闭本机的open relay。

4. 编辑/etc/sysconfig/saslauthd,设置MECH:

     MECH=pam

设置MECH为pam,将使得saslauthd使用本地PAM机制来验证用户名帐号和密码。

5. 打开saslauthd服务的自启动:

     /sbin/chkconfig --level 35 saslauthd on

6. 启动saslauthd service:

     /sbin/service saslauthd start
     /sbin/service saslauthd restart

7. 最后启动Postfix服务:

     /sbin/service postfix start
     /sbin/service postfix restart

现在Postfix就可以启动,并允许经过认证的远程客户端中继邮件,可以通过telnet到邮件服务器进行测试。

邮件服务器的通信所有都是明文的,但是认证信息要用Base64编码进行处理。你可以通过下面的命令得到你的帐号信息的base64编码:

   perl -MMIME::Base64 -e 'print encode_base64("username\0username\0password");'

输出结果将是类似于下面:

    dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcmQ=

可以通过下面的过程进行SMTP认证测试:

# telnet mail.example.com 25
Trying 127.0.0.1...
Connected to mail.example.com (123.123.123.123).
Escape character is '^]'.
220 mail.example.com ESMTP Postfix
EHLO anotherhost.com 
250-mail.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN GSSAPI DIGEST-MD5 CRAM-MD5
250-XVERP
250 8BITMIME
AUTH PLAIN dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcmQ= 
235 Authentication successful
QUIT 
221 Bye


"250-AUTH PLAIN LOGIN GSSAPI DIGEST-MD5 CRAM-MD5"西那是Postfix允许用户进行认证。