这两天在Ubuntu下折腾Postfix + Courier-IMAP + Cyrus-SASL + MySQL + PostfixAdmin,主要参考这个Howto(http://flurdy.com/docs/postfix/)
配置了Postfix Admin,所以邮件用户的密码用了md5的加密方式存放在MySQL数据库中的(不想用明文)。这样一来,IMAP服务器可以支持加密的密码字段,认证没有问题,但SMTP服务器不行。
Google了好久,发现网上大多数都是使用明文密码的,也有用saslauthd的pam认证方式来做的。我一开始是用明文的,觉得不好(能看到用户的密码,心里不安),又试了pam方式但没成功(不知道为什么,没深究)。最后终于找到牛人给Cyrus-SASL写的patch(针对2.1.19版本的),安装步骤参考 http://blog.matroid.org/display/26
$ cd ~
$ apt-get source libsasl2
$ sudo apt-get build-dep libsasl2
下载这个为Debian修改过的patch文件
$ wget http://blog.matroid.org/files/20060116-crypted-passwords-for-couriour-and-postfix-in-mysql/cyrus-sasl-2.1.19-checkpw.c.patch_mgr
$ cd cyrus-sasl-2.1.19.dfsg1
$ tar xvzf cyrus-sasl-2.1.19.dfsg1.tar.gz
$ ln -s cyrus-sasl-2.1.19.dfsg1 cyrus-sasl-2.1.19.orig
$ cp ../cyrus-sasl-2.1.19-checkpw.c.patch_mgr debian/patches/28_cyrus-sasl-2.1.19-checkpw.c.patch
做些修改,将patch文件里的cyrus-sasl-2.1.19.org替换为cyrus-sasl-2.1.19.dfsg1,不然会patch会失败。改好后,编译
$ fakeroot debian/rules binary
成功后,安装生成的deb包
$ cd ..
$ sudo dpkg -i *.deb
配置/etc/postfix/sasl/smptd.conf
pwcheck_method: auxprop
auxprop_plugin: sql
allowanonymouslogin: no
allowplaintext: yes
mech_list: PLAIN LOGIN
srp_mda: md5
srvtab: /dev/null
opiekeys: /dev/null
password_format: crypt
sql_user: username
sql_passwd: password
sql_hostnames: sql.example.org
sql_database: database_name
sql_select: SELECT password FROM mailbox WHERE username = '%u@%r'
重启Postfix就可以了。