CentOS7下搭建邮件服务器(dovecot + postfix + SSL)

花了基本上两天的时间去配置CentOS7下的邮件服务器。其中艰辛太多了,一定得总结下。
本文的目的在于通过一系列配置,在CentOS 7下搭建dovecot + postfix + SSL 服务器,并且能够通过邮件客户端(本文中是Airmail)进行收发邮件。

¶前提条件

你得有个主机或者VPS
你有一个主域名比如 fancycoding.com 还有一个二级域名比如 mail.fancycoding.com
二级域名的 SSL 证书。

¶配置你的DNS记录

确认主域名有A记录指向服务器IP
添加一个邮件二级域名比如 mail.fancycoding.com 指向服务器ip
主域名下添加一则MX记录指向邮件二级域名 比如 mail.fancycoding.com。如果你作为邮件服务器的域名没有多个,那么MX优先级可以随便写(反正只有一个),最高1,最低50,当优先级高的解析无效时,就会去解析低的。
添加一则txt记录作为SPF(Sender Policy Framework)。关于SPF的格式可以去http://www.openspf.org/SPF_Record_Syntax 查看。 比如我设置的是

v=spf1 a mx ~all

就是除了我的A记录和MX记录外,如果有其他域发出邮件的话,那都是伪造的。

这些步骤完成后,可以用以下命令检测是否生效

dig MX yourdomain +short @ns
host your.subdomain ns
比如我的域名是放在dnspod的,那么按照上图配置后,应该是这样:

Robin-MacdeMac-mini ~$dig MX fancycoding.com +short @f1g1ns1.dnspod.net
50 mail.fancycoding.com.
Robin-MacdeMac-mini ~$host mail.fancycoding.com f1g1ns1.dnspod.net
Using domain server:
Name: f1g1ns1.dnspod.net
Address: 119.167.195.3#53
Aliases:

mail.fancycoding.com has address 107.170.242.137

¶安装Postfix

以下操作最好在root权限下进行。不然每次都要sudo很麻烦不是么。
1
yum -y install postfix
yum remove sendmail
sendmail是centos默认安装的,超级难用,可以放心删掉。

vim /etc/postfix/main.cf

默认的应该有很大一堆,不用管它。在文件最底部写入以下内容
这里假设你的:

域名证书私钥在/etc/ssl/private/mail.fancycoding.key
公钥在/etc/ssl/certs/mail.fancycoding.crt
CA证书在/etc/ssl/certs/cacert.pem

myhostname = mail.fancycoding.com
mydomain = fancycoding.com
myorigin = mail.fancycoding.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, 192.168.1.0/24
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/ssl/private/mail.fancycoding.key
smtpd_tls_cert_file = /etc/ssl/certs/mail.fancycoding.crt
smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s

再打开/etc/postfix/master.cf:

vim /etc/postfix/master.cf

找到

#smtp      inet  n       -       n       -       -       smtpd

取消其前面的注释"#",然后找到submission这一行,同样取消前面的注释,并添加如下:

submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_wrappermode=no
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
特别注意smtpd_recipient_restrictions不要写错了,每个逗号之间都是一个单词,没有空格。
接下来配置你的aliases,这个是邮件用户名的别名。比如发送个webmaster@yourdomain.com的邮件,会自动转道root@youdomain.com。

vim /etc/aliases

可以看到已经设置了很多的别名了。如果你想把这些人都转发给一个真实的用户,比如mike,那么就在最底下添加一行:

root:mike

¶安装Dovecot

-y install postfix

进入/etc/dovecot/dovecot.conf

vim /etc/dovecot/dovecot.conf

在最下面添加以下内容:

protocols = imap pop3
mail_location = mbox:~/mail:INBOX=/var/mail/%u
pop3_uidl_format = %08Xu%08Xv

service auth {
    unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
}
}

ssl=required
ssl_cert = </etc/ssl/certs/mail.fancycoding.crt
ssl_key = </etc/ssl/private/mail.fancycoding.key

¶开启所有服务

newaliases
service postfix restart
service dovecot restart

看下log

cat /var/log/maillog
如果你看到如下一行且没有warning或者error,那就大功告成了:
Sep 10 22:54:51 fancycoding dovecot: master: Dovecot v2.2.10 starting up for imap, pop3 (core dumps disabled)
¶测试邮件发送与接收

mail -s TestTitle sombody@someone.com

之后会进入交互模式,随便输入点东西,然后按Ctrl+D,则会开始发送。
如果许久没有收到发来的邮件,那可能得看一下log有啥报错没有了。
如果提示没有mail这个指令,那么

yum -y install mailx

你也可以给你的用户发邮件,比如我用qq邮箱发给webmaster@fancycoding.com,那么会看到log里面有这样的记录

Sep 10 23:17:14 fancycoding postfix/smtpd[27682]: connect from smtpbgsg2.qq.com[54.254.200.128]
Sep 10 23:17:16 fancycoding postfix/smtpd[27682]: B334A61941: client=smtpbgsg2.qq.com[54.254.200.128]
Sep 10 23:17:17 fancycoding postfix/cleanup[27686]: B334A61941: message-id=<tencent_1BB3D41C7EDAF8ED30A8BF1D@qq.com>
Sep 10 23:17:17 fancycoding postfix/qmgr[26975]: B334A61941: from=<84084888@qq.com>, size=2050, nrcpt=1 (queue active)
Sep 10 23:17:17 fancycoding postfix/local[27687]: B334A61941: to=<root@mail.fancycoding.com>, orig_to=<webmaster@fancycoding.com>, relay=local, delay=0.81, delays=0.81/0/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Sep 10 23:17:17 fancycoding postfix/qmgr[26975]: B334A61941: removed
可以看到,qq的smtp服务器smtpbgsg2.qq.com连接到我们的服务器上,原目标是webmaster@fancycoding.com,经过别名转换后发送到了root@mail.fancycoding.com。
那么用mail指令就能看到新邮件了:

[root@fancycoding ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N  1 、Darkness            Wed Sep 10 23:17  62/2153  "HI_WEBMASTER_TITLE"
&

¶用邮件客户端连接

不想发邮件的时候还用命令行对吧,也不想收邮件的时候要ssh登录然后用指令查询是吧。那么我们之前做的那么多,不就是为了用邮件客户端连接我们的邮件服务器吗?
比如我要新建一个名字为robin的用户,但这个用户我禁止所有人登录:

useradd -s /sbin/nologin username

passwd username
打开邮件客户端,新建账户,这里以Airmail为例:

如果一路顺风,你就可以用邮件客户端进行收发邮件啦。
如果有朋友找你开通邮箱,那么你只需要用useradd添加一个用户就好了~是不是很方便!
¶FAQ:
我出问题了,但是不知道是什么问题,怎么办
tail /var/log/maillog
Error: chown(/home/user/mail/.imap/INBOX, group=12(mail)) failed: Operation not permitted (egid=1000(user)
两个解决办法:
sudo chmod 0600 /var/mail/*
在/etc/dovecot/dovecot.conf加入 mail_access_groups=mail
Recipient address rejected: Access denied (in reply to RCPT TO command)
netstat -tap 看一下端口是否都正常
/etc/postfix/main.cf 中
检查 myorigin 是否是你的二级域名,而不是某些教程中的/etc/mailname
确保home_mailbox没有被定义
别人无法发邮件给创建的邮箱,提示554 5.7.1: Recipient address rejected: Access denied 。
这个问题就有很多了,有可能是MX解析没弄对,MX被其他域名所接受,spf没弄对等等。
确保dig出来的域名以这样的形式结尾,而不是显示xxx handle by xxx.domain.com
 mail.fancycoding.com has address 107.170.242.137
##写在后面
这篇看似简单的教程,实际上可让我把google都翻烂了。用了整整2天的时间来配置。
直到自己把配置的80%的内容都弄明白了,才基本上算到位了。回想起来,还不如好好看下dovecot和postfix的wiki之后,再来做这些事。网上很多教程实际上已经过时,或者不适用于CentOS。
最后,笔者希望通过这篇文章,让你能一步到位,少走弯路!

时间: 2024-10-11 03:03:42

CentOS7下搭建邮件服务器(dovecot + postfix + SSL)的相关文章

如何在Ubuntu环境下搭建邮件服务器(一)

在这个系列的文章中,我们将通过使用 Postfix.Dovecot 和 openssl 这三款工具来为你展示如何在 ubuntu 系统上搭建一个既可靠又易于配置的邮件服务器. 在这个容器和微服务技术日新月异的时代,值得庆幸的是有些事情并没有改变,例如搭建一个 Linux 下的邮件服务器,仍然需要许多步骤才能间隔各种服务器耦合在一起,而当你将这些配置好,放在一起,却又非常可靠稳定,不会像微服务那样一睁眼有了,一闭眼又没了. 在这个系列教程中我们将通过使用 Postfix.Dovecot 和 ope

如何在 Ubuntu 环境下搭建邮件服务器(三)

在本系列的最后,我们将详细介绍如何在 Dovecot 和 Postfix 中设置虚拟用户和邮箱. 欢迎回来,热心的 Linux 系统管理员们! 在本系列的第一部分和第二部分中,我们学习了如何将 Postfix 和 Dovecot 组合在一起,搭建一个不错的 IMAP 和 POP3 邮件服务器. 现在我们将学习设置虚拟用户,以便我们可以管理所有 Dovecot 中的用户. 抱歉,还不能配置 SSL 我知道我答应过教你们如何设置一个受 SSL 保护的服务器. 不幸的是,我低估了这个话题的范围. 所以

如何在Ubuntu环境下搭建邮件服务器(二)

本教程的第 2 部分将介绍如何使用 Dovecot 将邮件从 Postfix 服务器移动到用户的收件箱. 在第一部分中,我们安装并测试了 Postfix SMTP 服务器.Postfix 或任何 SMTP 服务器都不是一个完整的邮件服务器,因为它所做的只是在 SMTP 服务器之间移动邮件.我们需要 Dovecot 将邮件从 Postfix 服务器移动到用户的收件箱中. Dovecot 支持两种标准邮件协议:IMAP(Internet 邮件访问协议)和 POP3(邮局协议). IMAP 服务器会在

如何在 Ubuntu 环境下搭建邮件服务器(二)

本教程的第 2 部分将介绍如何使用 Dovecot 将邮件从 Postfix 服务器移动到用户的收件箱. 在第一部分中,我们安装并测试了 Postfix SMTP 服务器.Postfix 或任何 SMTP 服务器都不是一个完整的邮件服务器,因为它所做的只是在 SMTP 服务器之间移动邮件.我们需要 Dovecot 将邮件从 Postfix 服务器移动到用户的收件箱中. Dovecot 支持两种标准邮件协议:IMAP(Internet 邮件访问协议)和 POP3(邮局协议). IMAP 服务器会在

阿里云CentOS Linux服务器上如何用postfix搭建邮件服务器

注:本文的邮件服务器只用于发送邮件,也就是STMP服务器. 一.准备工作 1. 为邮件服务器添加DNS解析 虽然不加DNS解析也能把邮件发出去,但会被大多数邮件服务器当作垃圾邮件.根据我们的实际经验,需要添加三条DNS解析记录:A记录.MX记录.TXT记录.比如域名cnblogs.info,对应的DNS记录如下: 2. 准备存放邮件的硬盘空间 如果用的是阿里云入门级Linux服务器,有一块20G的数据盘未挂载,需要格式化并挂载(假设这里挂载的目录是/data),具体操作步骤见之前的博文阿里云云服

CentOS 7.2部署邮件服务器(Postfix)_Linux

一.Postfix简介 Postfix 是一种电子邮件服务器,它是由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的.最早在1990年代晚期出现,是一个开放源代码的软件. Postfix 官方网站:http://www.postfix.org/ Postfix 下载地址:http://www.postfix.org/download.html 二.Postfix安装 安装Postf

CentOS下搭建SVN服务器的步骤详解_服务器其它

本文实例讲述了CentOS下搭建SVN服务器的步骤.分享给大家供大家参考,具体如下: 1.安装svn yum install -y subversion 2.验证安装是否成功 svnserve --version 3.创建svn版本库 mkdir svn svnadmin create svn/repo 注:这里的repo是版本库名称 4.配置svn 创建版本库后,在这个版本库的conf目录下会生成3个配置文件: [root@singledb conf]# pwd /root/svn/repo/

Win7下搭建FTP服务器实现文件共享

步骤1.控制面板-程序-打开或关闭Windows功能,或者在开始菜单里搜索"打开或",弹出Windows功能窗口,勾选Internet信息服务下的FTP功能和Web管理工具,以此开启服务.点击确定后,需要等几分钟. 温馨提示:必须选中Web管理工具而且全部展开选中,否则仅仅开启FTP功能无法继续调用IIS管理器 步骤2.在控制面板-系统和安全-管理工具,或直接在开始菜单搜索"Internet信息服务(IIS)管理器". 温馨提示:只有进行了上一步打开功能的操作后,管

使用HMAILSERVER搭建邮件服务器图文教程第1/2页_服务器其它

前言 对于企业用户而言,拥有属于自己的邮件服务器,在员工管理,内部信息沟通,对外推送消息等方面,都大有益处. 本文没有什么高深的技术内容,只是以windows server 2008 为例,使用HMAILServer,介绍搭建邮件服务器的全过程,供参考. 操作系统: 邮件服务组件: (http://www.hmailserver.com/index.php?page=download) 1.1 安装邮件服务器组件 选择存储数据的数据库,这里有两种选择,一种是使用嵌入型数据库Microsoft S