CentOS7搭建postfix邮件服务器
电子邮件系统是我们在日常工作、生活中最常用的一个网络服务。本章将首先介绍电子邮件系统的起源, 然后介绍SMTP、POP3、IMAP4等常见的电子邮件协议, 然后介绍如何在CentOS7中使用Postfix和Dovecot服务程序配置电子邮件系统服务的方法。 并结合BIND服务程序提供的DNS域名解析服务来验证客户端主机与服务器之间的邮件收发功能。
电子邮件协议
电子邮件系统基于邮件协议来完成电子邮件的传输,常见的邮件协议有下面这些。
- 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的25/TCP端口。
- 邮局协议版本3(Post Office Protocol 3,POP3):用于将电子邮件存储到本地主机,占用服务器的110/TCP端口。
- Internet消息访问协议版本4(Internet Message Access Protocol 4,IMAP4):用于在本地主机上访问邮件,占用服务器的143/TCP端口。
在电子邮件系统中,为用户收发邮件的服务器名为邮件用户代理(Mail User Agent,MUA)。 另外,既然电子邮件系统能够让用户在离线的情况下依然可以完成数据的接收,肯定得有一个用于保存用户邮件的“信箱”服务器, 这个服务器的名字为邮件投递代理(Mail Delivery Agent,MDA), 其工作职责是把来自于邮件传输代理(Mail Transfer Agent,MTA)的邮件保存到本地的收件箱中。 其中,这个MTA的工作职责是转发处理不同电子邮件服务供应商之间的邮件,把来自于MUA的邮件转发到合适的MTA服务器。
例如,我们从新浪信箱向谷歌信箱发送一封电子邮件,这封电子邮件的传输过程如图所示。
在生产环境中部署企业级的电子邮件系统时,有4个注意事项请留意:
- 添加反垃圾与反病毒模块:它能够很有效地阻止垃圾邮件或病毒邮件对企业信箱的干扰。
- 对邮件加密:可有效保护邮件内容不被黑客盗取和篡改。
- 添加邮件监控审核模块:可有效地监控企业全体员工的邮件中是否有敏感词、是否有透露企业资料等违规行为。
- 保障稳定性:电子邮件系统的稳定性至关重要,运维人员应做到保证电子邮件系统的稳定运行,并及时做好防范分布式拒绝服务(DDoS)攻击的准备。
一个最基础的电子邮件系统肯定要能提供发件服务和收件服务,为此需要使用基于SMTP协议的Postfix服务程序提供发件服务功能, 并使用基于POP3协议的Dovecot服务程序提供收件服务功能。这样一来, 用户就可以使用Outlook Express或Foxmail等客户端服务程序正常收发邮件了。电子邮件系统的工作流程如图所示。
配置DNS服务
一般而言,我们的信箱地址类似于“root@xncoding.com”这样,也就是按照“用户名@主机地址(域名)”格式来规范的。 要想更好地检验电子邮件系统的配置效果,需要先部署bind服务程序,为电子邮件服务器和客户端提供DNS域名解析服务。
第1步:配置服务器主机名称,需要保证服务器主机名称与发信域名保持一致:
1 | vim /etc/hostname |
第2步:清空iptables防火墙默认策略,并保存策略状态,避免因防火墙中默认存在的策略阻止了客户端DNS解析域名及收发邮件:
1 | iptables -F |
第3步:为电子邮件系统提供域名解析。
主配置文件/etc/named.conf
:
1 | options { |
区域配置文件/etc/named.rfc1912.zones
如下:
1 | zone "xncoding.com" IN { |
域名配置文件/var/named/xncoding.com.zone
如下:
1 | $TTL 1D |
然后重启DNS服务:
1 | [root@mail ~]# systemctl restart named |
这样电子邮件系统所对应的服务器主机名即为mail.xncoding.com
,而邮件域为@xncoding.com
。
把服务器的DNS地址修改成本地IP地址。编辑文件/etc/sysconfig/network-scripts/ifcfg-eth0
,修改如下:
1 | DNS1=192.168.1.20 |
然后重启网络:
1 | systemctl restart network |
配置Postfix服务程序
Postfix是一款由IBM资助研发的免费开源电子邮件服务程序,由许多小模块组成,每个小模块都可以完成特定的功能, 因此可在生产工作环境中根据需求灵活搭配它们。
第1步:安装Postfix服务程序。
1 | yum install -y postfix |
第2步:配置Postfix服务程序。
配置文件/etc/ postfix/main.cf
,大部分都是注释。几个重要的配置参数如下:
参数 | 说明 |
---|---|
myhostname | 邮局系统的主机名 |
mydomain | 邮局系统的域名 |
myorigin | 从本机发出邮件的域名名称 |
inet_interfaces | 监听的网卡接口 |
mydestination | 可接收邮件的主机名或域名 |
mynetworks | 设置可转发哪些主机的邮件 |
relay_domains | 设置可转发哪些网域的邮件 |
在Postfix服务程序的主配置文件中,总计需要修改5处。首先是在第76行定义一个名为myhostname的变量,用来保存服务器的主机名称。 请大家记住这个变量的名称,下边的参数需要调用它:
1 | myhostname = mail.xncoding.com |
然后在第83行定义一个名为mydomain的变量,用来保存邮件域的名称。大家也要记住这个变量名称,下面将调用它:
1 | mydomain = xncoding.com |
在第99行调用前面的mydomain变量,用来定义发出邮件的域。调用变量的好处是避免重复写入信息,以及便于日后统一修改:
1 | myorigin = $mydomain |
第4处修改是在第116行定义网卡监听地址。可以指定要使用服务器的哪些IP地址对外提供电子邮件服务; 也可以干脆写成all,代表所有IP地址都能提供电子邮件服务:
1 | inet_interfaces = all |
最后一处修改是在第164行定义可接收邮件的主机名或域名列表。这里可以直接调用前面定义好的myhostname和mydomain变量。
1 | mydestination = $myhostname, $mydomain |
第3步:创建电子邮件系统的登录账户。
Postfix与vsftpd服务程序一样,都可以调用本地系统的账户和密码,因此在本地系统创建常规账户即可。 最后重启配置妥当的postfix服务程序,并将其添加到开机启动项中。大功告成!
1 | [root@mail ~]# useradd xiong |
_备注_:实际生产环境邮件用户应该设置成不可登录。
配置Dovecot服务程序
Dovecot是一款能够为Linux系统提供IMAP和POP3电子邮件服务的开源服务程序,安全性极高,配置简单, 执行速度快,而且占用的服务器硬件资源也较少,因此是一款值得推荐的收件服务程序。
第1步:安装Dovecot服务程序软件包。
1 | yum install -y dovecot |
第2步:配置部署Dovecot服务程序。
修改主配置文件/etc/dovecot/dovecot.conf
,首先是第24行,把Dovecot服务支持的电子邮件协议修改为imap、pop3和lmtp。
然后在这一行下面添加一行参数,允许用户使用明文进行密码验证。之所以这样操作,
是因为Dovecot服务程序为了保证电子邮件系统的安全而默认强制用户使用加密方式进行登录,而由于当前还没有加密系统,
因此需要添加该参数来允许用户的明文登录。
1 | 24 protocols = imap pop3 lmtp |
在主配置文件中的第48行,设置允许登录的网段地址,也就是说我们可以在这里限制只有来自于某个网段的用户才能使用电子邮件系统。 如果想允许所有人都能使用,则不用修改本参数:
1 | login_trusted_networks = 192.168.1.0/24 |
第3步:配置邮件格式与存储路径。
在Dovecot服务程序单独的子配置文件中,定义一个路径,用于指定要将收到的邮件存放到服务器本地的哪个位置。
这个路径默认已经定义好了,我们只需要将该配置文件/etc/dovecot/conf.d/10-mail.conf
中第25行前面的井号删除即可。
1 | 24 # mail_location = maildir:~/Maildir |
然后切换到配置Postfix服务程序时创建的账户,并在家目录中建立用于保存邮件的目录。 记得要重启Dovecot服务并将其添加到开机启动项中。至此,对Dovecot服务程序的配置部署步骤全部结束。
1 | [root@mail ~]# su - xiong |
客户端使用电子邮件系统
如何得知电子邮件系统已经能够正常收发邮件了呢?可以使用Foxmail来进行测试。 请按照下表来设置电子邮件系统及DNS服务器和客户端主机的IP地址,以便能正常解析邮件域名。设置后的结果如图所示。
主机 | 操作系统 | IP地址 |
---|---|---|
电子邮件系统及DNS服务器 | RHEL 7 | 192.168.1.20 |
客户端主机 | Win 10 | 192.168.1.3 |
下载安装最新版Foxmail后,打开手动设置账号信息如下:
点击创建后验证成功,进入Foxmail主页面
然后给root@xncoding.com
这个账号发个邮件试试。
成功发送邮件后,便可以在电子邮件服务器上使用mail命令查看到新邮件提醒了。如果想查看邮件的完整内容, 只需输入收件人姓名前面的编号即可。
1 | [root@mail ~]# mail |
设置用户别名邮箱
用户别名功能是一项简单实用的邮件账户伪装技术,可以用来设置多个虚拟信箱的账户以接受发送的邮件,
从而保证自身的邮件地址不被泄露,还可以用来接收自己的多个信箱中的邮件。编辑/etc/aliases
增加别名配置。
由于过于简单,这里不展开说明了。