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允许用户进行认证。