SASL(Simple Authentication Security Layer)是流行的认证库,Sendmail和Postfix都可以利用SASL来做到SMTP认证。简明步骤如下:
1) 确认cyrus-sasl已经安装
2) 修改/etc/postfix/main.cf,在文件里修改/增加两行
smtpd_sasl_path = smtpd
smtpd_sasl_auth_enable = yes
3) 修改/usr/lib/sasl2/smtpd.conf文件,增加/修改下面两行:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
4) 启动相关服务
service saslauthd start service postfix start
5) 测试
连接25号端口,看看有没有类似下面的这样的输出
$ telnet localhost 25
. . .
220 localhost ESMTP Postfix (Ubuntu)
ehlo localhost
250-localhost
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN CRAM-MD5 NTLM DIGEST-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN AHdnemhhb0B3Z3poYW8AYWJjMTIz
235 2.7.0 Authentication successful
注意:这里的 AHdnemhhb0B3Z3poYW8AYWJjMTIz 表示base64编码,是以”0username@domain0password"的方式组成的,注意这里的domain,也许你的认证不需要domain,如何确定呢,执行下面的命令
# sasldblistusers2 wgzhao@wgzhao: userPassword
如果输出的用户含有domain的话,那就需要。
如果得到这个base64编码呢?可以使用mmencode,可以使用perl的MIME::base64模块,我偏向使用php
$php -a
php > echo base64_encode("0wgzhao@wgzhao0abc123");
AHdnemhhb0B3Z3poYW8AYWJjMTIz