in tools

postfix with smtp auth on Ubuntu 11.04

公司网站注册需要向用户发送邮件,原有的QQ企业邮箱自然不能用来搞这个了,迫不得已自己来配置邮件服务器。网上有很多文章,到处查找搞了一晚上,现在来记录一下……估计过两天换主机还用得着……悲剧……

sudo -i #切到root方便点吧
apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules db4.6-util procmail
dpkg-reconfigure postfix

需要配置一大批,注意凡是需要填写host什么的都只填写主域domain.com,不必填邮件服务器2级前缀。

sudo apt-get install bsd-mail #很多网上文章写的mailx,不好用了

设置Maildir

vim /etc/postfix/main.cf

添加

home_mailbox = Maildir/

给系统需要收发邮件的用户创建Maildir目录

cd /home/{{user}}  #{{user}}替换为用户名
maildirmake Maildir
chown -R {{user}} Maildir

安装pop和imap

sudo apt-get install courier-pop
sudo apt-get install courier-imap

添加SMTP认证

vim /etc/postfix/main.cf

添加

smtpd_recipient_restrictions = permit_mynetworks, 
    permit_sasl_authenticated,
    reject_unauth_destination,
    reject_invalid_hostname,
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_non_fqdn_hostname,

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes

修改

vim /etc/default/saslauthd

添加

START=yes
PWDIR="/var/spool/postfix/var/run/saslauthd"
PARAMS="-m ${PWDIR} -r"
PIDFILE="${PWDIR}/saslauthd.pid"
MECHANISMS="pam"
OPTIONS="-c -m ${PWDIR}"

然后运行

mkdir -p /var/spool/postfix/var/run/saslauthd
echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf
echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf

最后重启

/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

最后测试出现如下错误

authentication failed: generic failure

在日志(/var/log/mail.log)中可以看见错误信息

SASL authentication failure: cannot connect to saslauthd server: Permission denied
SASL authentication failure: Password verification failed
SASL PLAIN authentication failed: generic failure

经历了一个漫长刺激痛苦的google旅程,最后解决方案如下

最后发现是saslauthd运行时目录权限问题

dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd
adduser postfix sasl

重启

/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

OK 搞定

参考文章:

后记:2011-08-25

  • 如果新增加用户,imap不能即时生效,必须重启。
  • 另外要注意用户/home下的用户目录权限,必须是username.username,我曾在添加用户时用了其他的group,结果失败,会报错-uid -gid不对。

Write a Comment

Comment