Centos 下搭建电子邮箱服务器postfix+dovecot
因为同事在做一个电子邮件服务器,准备进行邮件推广什么的,后来遇到些问题,于是我们两个小白一起研究。
网上有很多关于电子邮件服务器搭建的、完整的文档。因此,一些具体的细节和配置,这里就不做详细的说明和解释了。主要讲的是我们两个小白花费大量时间,所查找到的,遇到的问题。
一、背景
postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。
Dovecot 是一个开源的 IMAP 和 POP3 邮件服务器,支持 Linux/Unix 系统。
经典搭配:
postfix(作为发送邮件服务器)+dovecot(作为接收邮件服务器)+mysql(作为数据库)
作为最小白的一个简单的邮件服务器,我们直接用系统用户作为认证用户,没有配置mysql。
二、域名解析
在域名服务提供商那里设置域名解析,example.com 设置了3个域名解析:
第一个是 :A记录, RR值为 @ , 指向 服务器的IP地址
第二个是:MX记录, RR值为@, 指向 example.com
第三个是:A记录,RR值为 www, 指向服务器的IP地址
配置完毕后, ping www.example.com 如果能提示出你的服务器的IP地址, 证明 www的配置已经生效。
下来还要检查 MX 记录是否生效, 要用nslookup检查一下是否MX记录正确。
在windows系统的命令行控制体输入 : nslookup -qt=mx linuxidc.com 回车后,
能显示你的域名 example.com , 就代表你的 MX记录配置正确。
如果MX记录配置不正确, 那用QQ邮箱发邮件, 你就会收到个退信, 退信原因的内容如下 :
收件人(lLee@example.com)所属域名不存在,邮件无法送达。
Name service error for name=linuxidc.com type=MX: Host found but no data record of requested type
三、安装配置postfix+dovecot+cyrus.sasl
系统架构就是这样的 MTA : Postfix
认证模块:Cyrus SASL + Dovecot SASL
POP3/IMAP: Dovecot
安装: Yum install postfix dovecot
Yum.install cyrus*
有一般邮件系统的知识的人知道,需要采用认证机制防止谁都可以用这个MTA发送邮件(open relay)。这个认证机制就是SASL,这里我所接触到的两个sasl软件:Cyrus-SASL和Dovecot中自有的SASL。
Cyrus-SASL:这个软件的使用saslauthd这个daemon来进行验证,具体的配置文件可以查看/etc/sysconfig/saslauthd这个配置文件。
MECH=pam:使用什么机制来进行验证,这里写的是使用PAM来进行验证。PAM,这个以后有机会再进行论述。
Dovecot-SASL: 这个软件是dovecot对SASL的一个实现,Dovecot官网中提到,Dovecot也实现了SASL。
Dovcecot-SASL有两个部分,一个是passdb,一个是userdb, passdb用来实现认证,userdb用来实现提取用户的一些信息,比如邮件存储目录,uid等。
相关的配置可以在/etc/dovecot/dovecot.conf中找到。
认证过程也是先通过passdb认证,然后在userdb中获取用户信息,从而把该用户的邮件递送给该MUA,然后用户就可以读取邮件了。
postfix的main.cf这个文件中有个SASL的选项,此处直接设置为smtpd_sasl_type = dovecot
此处即是sasl使用dovecot的sasl进行验证。即发送邮件时,去dovecot验证,如果通过,就允许邮件发送了。因此,我们只要熟悉了dovecot的sasl怎么做的,就可以不用管postfix的验证了。
然后呢,我们根据网上的配置dovecot的sasl验证代码进行测试,始终没能成功,于是,我们就绕过了这个。
以下是相关的postfix和dovecot简单配置:
vi /etc/postfix/main.cf
#begain #smtpd_sasl_type = dovecot #smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = yes smtpd_delay_reject = no smtpd_sasl_local_domain = $mydomain smtpd_sasl_security_options = noanonymous smtpd_client_restrictions = permit_sasl_authenticated message_size_limit = 5242880 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination #end
vi /etc/dovecot/dovecot.conf
protocols = imap pop3 log_path = /var/log/dovecot.log info_log_path = /var/log/dovecot.info login_trusted_networks = 0.0.0.0/0 listen = *, :: disable_plaintext_auth = yes ssl_disable = no mail_location = Maildir:~/Maildir base_dir = /var/run/dovecot/
vi /etc/sasl2/smtpd.conf
pwcheck_method: saslauthd mech_list: plain login log_level:3 saslauthd_path:/var/run/saslauthd/mux
四、检测各种配置是否成功
1、查看mta
#alertnatices --display mta
2、检测postfix与dovecot
状态:service postfix status | service dovecot status
重启: service postfix|dovecot restart
有时候会出现:
这是centos版本问题,直接使用它提示的命令即可。
3、检测默认smtp端口25是否已经监听
Netstat -an | grep 25
五、遇到的问题
1、本地客户端与电子邮件服务器无法连接
我们这次遇到的问题就是:服务器防火墙25和110端口,没有打开。
解决方案:
CentOS防火墙iptables的配置方法详解
查看当前所有的iptables配置: iptables -L -n
添加允许INPUT访问规则,以下时常见服务的端口设置,如果需要拒绝访问,则将ACCEPT改为DROP即可
#SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#HTTP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
#HTTPS
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#POP3
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
#SMTP
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
#FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#DNS
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
保存修改:/etc/rc.d/init.d/iptables save
重启iptables:service iptables restart
开机启动 | 关闭: chkconfig iptables on chkconfig iptables off
或者直接修改配置文件:
vi /etc/sysconfig/iptables
2、认证不被允许:
-ERR Plaintext authentication disallowed on non-secure (SSL/TLS) connections.
pop3-login: Info: Aborted login (tried to use disallowed plaintext auth): user=<>, rip=*,*,*,*, lip=*,*,*,*, session=<OHcXkcc6EgB5Kpmb>
解决方案: