5. 通过yum安装dovecot和配置dovecot
第4节中介绍了postfix的配置,并测试了postfix的发送邮件功能。你可以在服务器上使用mail命令来接受发送到本机域名用户邮箱中的邮件。但是你如果想使用MUA远程来接收邮件,那么则需要使用一个支持POP3/IMAP的服务来帮助MUA将邮箱中的邮件拉取到本地,比如dovecot。
通过yum安装dovecot:
[root@mail ~]# yum install dovecot
编辑/etc/dovecot/dovecot.conf文件,修改以下行:
[root@mail ~]# vi /etc/dovecot/dovecot.conf protocols = pop3
如果想使用操作系统账号对收件人进行验证,则编辑/etc/dovecot/conf.d/10-auth.conf,修改以下行:
[root@mail conf.d]# vi /etc/dovecot/conf.d/10-auth.conf auth_mechanisms = plain login
如果需要远程使用MUA(如Outlook,Foxmail)来测试dovecot的收件功能,则修改/etc/dovecot/conf.d/10-auth.conf的如下行:
[root@mail conf.d]# vi /etc/dovecot/conf.d/10-auth.conf disable_plaintext_auth = no
否则,远程使用MUA接收邮件时,会弹出如下错误:
登录到接收邮件服务器(POP3): 由于其他电子邮件正被传送到你的邮箱,或者其他邮件应用程序正在访问它,你的邮箱暂时不可用。 响应服务器: -ERR [IN-USE] Couldn't open INBOX: Internal error occurred. Refer to server log for more information. [2016-01-05 11:23:21]
同时还要注意/etc/dovecot/conf.d/10-mail.conf中mail_location所指的路径对应的权限问题,如果MUA所使用的用户没有权限访问或者修改该目录内容,那么使用MUA接收邮件时,会弹出如下错误:
登录到接收邮件服务器(POP3): 由于其他电子邮件正被传送到你的邮箱,或者其他邮件应用程序正在访问它,你的邮箱暂时不可用。 响应服务器: -ERR [IN-USE] Couldn't open INBOX: Internal error occurred. Refer to server log for more information. [2016-01-05 11:23:21]
maillog中也会有如下错误打印:
[root@mail ~]# tail -f /var/log/maillog Jan 5 11:23:21 mail dovecot: pop3(mailtest): Error: mkdir(/home/mailtest/mail/.imap/INBOX) failed: Operation not permitted Jan 5 11:23:21 mail dovecot: pop3(mailtest): Error: Couldn't open INBOX: Internal error occurred. Refer to server log for more information. [2016-01-05 11:23:21] Jan 5 11:23:21 mail dovecot: pop3(mailtest): Couldn't open INBOX top=0/0, retr=0/0, del=0/0, size=0
配置完成后,启动dovecot,由于配置了dovecot支持pop3,dovecot运行时将监听110(pop3)和 995(pop3s)端口:
[root@mail conf.d]# service dovecot start Starting Dovecot Imap: [ OK ] [root@mail conf.d]# netstat -tunlp | grep dovecot tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 21883/dovecot tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 21883/dovecot
通过telnet访问110端口以及通过openssl访问995端口来测试dovecot的收件功能:
[root@mail ~]# telnet 127.0.0.1 110 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. +OK Dovecot ready. USER mailtest +OK PASS mailtest +OK Logged in. LIST +OK 4 messages: 1 623 2 623 3 623 4 623. RETR 1 +OK 623 octets Return-Path:X-Original-To: [email protected] Delivered-To: [email protected] ... QUIT +OK Logging out. Connection closed by foreign host. [root@mail home]# openssl s_client -connect 127.0.0.1:995 ... +OK Dovecot ready. USER mailtest +OKPASS mailtest +OK Logged in. LIST +OK 4 messages: 1 623 2 623 3 623 4 623 ...
也可以通过MUA进行远程收件测试。
6. 配置cyrus-sasl来支持对postfix的发件地址验证
第4节中实现了postfix的发件功能,但是此时postfix无法对发件地址进行验证,无论收件地址为什么,postfix都会尝试发送邮件,因此需要使用了一种来帮助postfix来完成对对发件地址的验证,比如cyrus-sasl。
RHEL6.5上默认安装了cyrus-sasl,要启用sasl对smtpd的支持,则要在/usr/lib64/sasl2/下新建smtpd.conf文件,并进行如下编辑:
[root@mail sasl2]# vi smtpd.conf pwcheck_method: saslauthd mech_list: PLAIN LOGIN
编辑/etc/postfix/main.cf,加入如下配置参数:
[root@mail postfix]# vi main.cf broken_sasl_auth_clients = yes #是否启用sasl认证 smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname, reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain, reject_unauth_pipelining,reject_unauth_destination #认证策略 smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous smtpd_sasl_path = smtpd
如果要通过系统用户的登录密码来进行验证,则要编辑/etc/sysconfig/saslauthd的MECH参数(注:原有的PAM算法未验证):
[root@mail sysconfig]# vi saslauthd MECH=shadow
重启postfix和cyrus-sasl,测试postfix+cyrus-sasl的发件地址验证功能:
[root@mail sysconfig]# service saslauthd restart Stopping saslauthd: [ OK ] Starting saslauthd: [ OK ] [root@mail sysconfig]# postfix stop postfix/postfix-script: stopping the Postfix mail system [root@mail sysconfig]# postfix start postfix/postfix-script: starting the Postfix mail system [root@mail sysconfig]# telnet 127.0.0.1 25 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 mail.asika.com ESMTP Postfix ehlo localhost 250-mail.asika.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH LOGIN 334 VXNlcm5hbWU6 #Username base64位编码 bWFpbHRlc3Q= #mailtest base64位编码 334 UGFzc3dvcmQ6 #Password base64位编码 bWFpbHRlc3Q= 235 2.7.0 Authentication successful quit 221 2.0.0 Bye Connection closed by foreign host.
下一篇文章将介绍编译安装courier-authlib,并配置其通过cyrus-sasl库访问mysql。