花了基本上两天的时间去配置CentOS7下的邮件服务器。其中艰辛太多了,一定得总结下。

本文的目的在于通过一系列配置,在CentOS 7下搭建dovecot + postfix + SSL 服务器,并且能够通过邮件客户端(本文中是Airmail)进行收发邮件。

前提条件

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

配置你的DNS记录

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

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

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

1 2
dig MX yourdomain +short @ns host your.subdomain ns

比如我的域名是放在dnspod的,那么按照上图配置后,应该是这样:

1 2 3 4 5 6 7 8 9
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 2
yum -y install postfix yum remove sendmail

sendmail是centos默认安装的,超级难用,可以放心删掉。

1
vim /etc/postfix/main.cf

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

这里假设你的:

域名证书私钥在/etc/ssl/private/mail.fancycoding.key

公钥在/etc/ssl/certs/mail.fancycoding.crt

CA证书在/etc/ssl/certs/cacert.pem

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
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:

1
vim /etc/postfix/master.cf

找到

1
#smtp      inet  n       -       n       -       -       smtpd

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

1 2 3 4 5 6 7 8 9
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。

1
vim /etc/aliases

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

1
root:mike

安装Dovecot

1
-y install postfix

进入/etc/dovecot/dovecot.conf

1
vim /etc/dovecot/dovecot.conf

在最下面添加以下内容:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
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

开启所有服务

1 2 3
newaliases service postfix restart service dovecot restart

看下log

1
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)

测试邮件发送与接收

1
mail -s TestTitle sombody@someone.com

之后会进入交互模式,随便输入点东西,然后按Ctrl+D,则会开始发送。

如果许久没有收到发来的邮件,那可能得看一下log有啥报错没有了。

如果提示没有mail这个指令,那么

1
yum -y install mailx

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

1 2 3 4 5 6
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指令就能看到新邮件了:

1 2 3 4 5
[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的用户,但这个用户我禁止所有人登录:

1 2
useradd -s /sbin/nologin username passwd username

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

如果一路顺风,你就可以用邮件客户端进行收发邮件啦。

如果有朋友找你开通邮箱,那么你只需要用useradd添加一个用户就好了~是不是很方便!

FAQ:

  1. 我出问题了,但是不知道是什么问题,怎么办

    tail /var/log/maillog

  2. 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
  3. Recipient address rejected: Access denied (in reply to RCPT TO command)

    netstat -tap 看一下端口是否都正常

    /etc/postfix/main.cf 中

    • 检查 myorigin 是否是你的二级域名,而不是某些教程中的/etc/mailname
    • 确保home_mailbox没有被定义
  4. 别人无法发邮件给创建的邮箱,提示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

https://www.fancycoding.com/centos7-mail-server-with-dovecot-postfix-ssl/

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

  1. 搭建邮件服务器 使用Postfix与Dovecot

    首先需要从yum中下载安装三个服务:bind-chroot    postfix     dovecot 配置文件依次: /etc/named.conf 下载安装完后要开启的服务:named     ...

  2. 在Centos7下搭建Git服务器

    ① 安装 Git ② 服务器端创建 git 用户,用来管理 Git 服务,并为 git 用户设置密码 ③ 服务器端创建 Git 仓库 ④ 客户端 clone 远程仓库 ⑤ 客户端创建 SSH 公钥和私 ...

  3. Centos7下搭建NFS服务器与连接详解

    一,环境介绍    本实验使用了两台centos7虚拟机,其中         服务器:192.168.1.188    客户端:192.168.1.189 二,实验步骤    192.168.1.1 ...

  4. Centos下搭建邮件服务器

    一.协议 SMTP:用于发送邮件 POP3:用于接收邮件,接收后会将服务器上邮件删除 IMAP:用于接收邮件,接收后不会删除服务器邮件 二.几个重要的角色 MUA:可以理解为收取邮件的工具,比如thu ...

  5. centos7下搭建NFS服务器

    NFS是Network File System的缩写,即网络文件系统.客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下. nfs为什么需要RPC?因为NFS支持的功能很多,不同功能会 ...

  6. centos7下搭建solr服务器

    1.Solr的环境 Solr是java开发. 需要安装jdk. 安装环境Linux. 需要安装Tomcat. 1.2. 搭建步骤 第一步:把solr 的压缩包上传到Linux系统 第二步:解压solr ...

  7. CentOS7下搭建SVN服务器

    (1).安装SVN 1)安装SVN [root@youxi1 ~]# yum -y install subversion mod_dav_svn [root@youxi1 ~]# cat /etc/s ...

  8. CentOS7下搭建Tomcat服务器

    Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选.Tomcat 和 IIS ...

  9. 最新ubuntu搭建公网个人邮件服务器(基于postfix,dovecot,mysql)

      最近做了一个应用,需要用邮件发通知,但是免费的邮箱每天发信数量是有限制的,所以呢就想着搭建一个自己的邮件服务器,能够实现邮件的发送和接收即可,其中大概花了一个星期找资料,测试,终于成功了,写个教程 ...

随机推荐

  1. 交叉编译总结 libosscore.a libcurl.a libmysqlclient.a

    把工程文件交叉编译到arm上运行,着实花费了一番功夫. 首先遇到的错误是 X uses VFP register arguments, B does not 百度了一下,发现是硬浮点和软浮点的问题,原 ...

  2. 关于windows 7 安装Vim的安装步骤介绍。——Arvin

    在Ubuntu中第一次使用VIM编辑器发现好强大,打算在Win7中安装,其中遇到一些小问题,下边介绍详细的安装过程和遇到的问题. 1-安装 首先发现Github中有一款中意的作者,并且他开源的基本插件 ...

  3. 关于LogStash运行在AIX 64位机器上的问题与临时解决方案

    需求;logstash运行在SUSE,LINUX,PPC LINUX,AIX机器上,并监控文件发送日志到KAFKA中去, 问题:在AIX机器上,file插件总是报异常,无法完成数据的读取 NotImp ...

  4. [WPF系列]-高级部分 需要区分的东东

    ContentControl VS ContentPresenter What's the difference between ContentControl and ContentPresenter ...

  5. Comparison of SQL Server Compact, SQLite, SQL Server Express and LocalDB

    Information about LocalDB comes from here and SQL Server 2014 Books Online. LocalDB is the full SQL ...

  6. FineReport中Domino数据库连接方法

    1. 概述 Domino是文档型数据库而非关系型数据库,连接Domino可以使用JDBC方式或者ODBC方式,使用JDBC方式需要安装Lotus Domino Driver for JDBC并且此方法 ...

  7. 【2016-10-26】【坚持学习】【Day13】【WCF】【EF + Data Services】

    今天做了一个demo, EF+Data Services 先建立一个网站项目 添加一个ADO.NET 数据模型 相当于一个EF容器,用来连接MSSQL数据库 添加一个WCF Data Services ...

  8. ClearContainer 网络部分源码分析

    // cc-oci-runtime/src/oci.c /*! * Create the state file, apply mounts and run hooks, but do not star ...

  9. IO流基本操作

    第一种分法:.输入流2.输出流 第二种分法:.字节流2.字符流 第三种分法:.节点流2.处理流 //////////////////////////////////////////////////// ...

  10. tomcat和HTTP

    tomcat和HTTP 1.tomcat的关闭和启动 启动:sudo /opt/tomcat/bin/startup.sh 关闭:sudo /opt/tomcat/bin/shutdown.sh 2. ...