Postfix 与 Dovecot 部署邮件系统
电子邮件系统介绍
电子邮件系统基于邮件协议来完成电子邮件的传输,常见的邮件协议有下面这些:
- 简单邮件传输协议 SMTP(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的TCP/25端口。
- 邮局协议版本3 POP3(Post Office Protocol 3):用于将电子邮件存储到本地主机,占用服务器的TCP/110端口。
- Internet消息访问协议版本4 IMAP4(Internet Message Access Protocol 4):用于在本地主机上访问邮件,占用服务器的TCP/143端口。
在电子邮件系统中,为用户收发邮件的服务器名为邮件用户代理(Mail User Agent,MUA)。另外,既然电子邮件系统能够让用户在离线的情况下依然可以完成数据的接收,肯定得有一个用于保存用户邮件的“信箱”服务器,这个服务器的名字为邮件投递代理(Mail Delivery Agent,MDA),其工作职责是把来自于邮件传输代理(Mail Transfer Agent,MTA)的邮件保存到本地的收件箱中。其中,这个MTA的工作职责是转发处理不同电子邮件服务供应商之间的邮件,把来自于MUA的邮件转发到合适的MTA服务器。例如,从新浪信箱向谷歌信箱发送一封电子邮件,这封电子邮件的传输过程如下图所示。
在电子邮件系统中,用户发送邮件后不必等待投递工作完成即可下线。如果对方邮件服务器(MTA)宕机或对方临时离线,则发件服务器(MTA)就会把要发送的内容自动地暂时保存到本地,等检测到对方邮件服务器恢复后会立即再次投递,期间一般无须运维人员维护处理,随后收信人(MUA)就能在自己的信箱中找到这封邮件了。
在生产环境中部署企业级的电子邮件系统时,有4个注意事项请留意:
- 添加反垃圾与反病毒模块:它能够很有效地阻止垃圾邮件或病毒邮件对企业信箱的干扰。
- 对邮件加密:可有效保护邮件内容不被黑客盗取和篡改。
- 添加邮件监控审核模块:可有效地监控企业全体员工的邮件中是否有敏感词,是否有透露企业资料等违规行为。
- 保障稳定性:电子邮件系统的稳定性至关重要,运维人员应做到保证电子邮件系统的稳定运行,并及时做好防范分布式拒绝服务(Distributed Denial of Service,DDoS)攻击的准备。
部署基础的电子邮件系统
一个最基础的电子邮件系统肯定要能提供发件服务和收件服务,为此需要使用基于 SMTP 的 Postfix 服务程序提供发件服务功能,并使用基于 POP3 协议的 Dovecot 服务程序提供收件服务功能。这样一来,用户就可以使用 Outlook Express 或 Foxmail 等客户端服务程序正常收发邮件了。电子邮件系统的工作流程如下图所示。
在早期的 Linux 系统中,默认使用的发件服务是由 Sendmail 服务程序提供的,而在 RHEL 8 系统中已经替换为 Postfix 服务程序。相较于 Sendmail 服务程序,Postfix 服务程序减少了很多不必要的配置步骤,而且在稳定性、并发性方面也有很大改进。
配置电子邮件系统需要先部署 bind 服务程序,为电子邮件服务器和客户端提供 DNS 域名解析服务。
第一步:配置服务器主机名称,需要保证服务器主机名称与发信域名保持一致。清空 iptables 防火墙默认策略并保存策略状态,且允许防火墙通过此服务。
[root@SRA ~]# vim /etc/hostname
mail.zxbke.cn
[root@mail ~]# iptables -F //清除策略
[root@mail ~]# iptables-save //保存策略
[root@mail ~]# firewall-cmd --permanent --zone=public --add-service=dns //防火墙放行DNS
[root@mail ~]# firewall-cmd --reload //重新加载防火墙
第二步:为电子邮件系统提供域名解析。
[root@mail ~]# dnf install bind-chroot //安装域名解析服务
[root@mail ~]# vim /etc/named.conf
// 11和19行修改 any
[root@mail ~]# vim /etc/named.rfc1912.zones
zone "zxbke.cn" IN {
type master;
file "zxbke.cn.zone";
allow-update {none;};
};
[root@mail ~]# cd /var/named //进入/var/named目录
[root@mail named]# cp -a named.localhost zxbke.cn.zone //复制正向解析参数
[root@mail ~]# vim /var/named/zxbke.cn.zone
$TTL 1D
@ IN SOA zxbke.cn. root.zxbke.cn. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.zxbke.cn.
ns IN A 192.168.8.10
@ IN MX 10 mail.zxbke.cn.
mail IN A 192.168.8.10
[root@mail ~]# systemctl restart named //重启服务
[root@mail ~]# systemctl enable named //加入开机启动项
配置 Postfix 服务程序
Postfix 是一款由 IBM 资助研发的免费开源电子邮件服务程序,能够很好地兼容 Sendmail服务程序,可以方便 Sendmail 用户迁移到 Postfix 服务上。Postfix 服务程序的邮件收发能力强于 Sendmail 服务,而且能自动增加、减少进程的数量来保证电子邮件系统的高性能与稳定性。
另外,Postfix 服务程序由许多小模块组成,每个小模块都可以完成特定的功能,因此可在生产工作环境中根据需求灵活搭配。
第三步:安装 Postfix 服务程序。
[root@mail ~]# dnf install postfix //安装 Postfix 服务程序
第四步:配置 Postfix 服务程序。
Postfix服务程序主配置文件中的重要参数
参数 | 作用 |
---|---|
myhostname | 邮局系统的主机名 |
mydomain | 邮局系统的域名 |
myorigin | 从本机发出邮件的域名名称 |
inet_interfaces | 监听的网卡接口 |
mydestination | 可接收邮件的主机名或域名 |
mynetworks | 设置可转发哪些主机的邮件 |
relay_domains | 设置可转发哪些网域的邮件 |
总计需要修改 5 处。
- 在第 95 行定义一个名为 myhostname 的变量,用来保存服务器的主机名称。请大家记住这个变量的名称,下面的参数需要调用它:myhostname = mail.zxbke.cn
- 在第 102 行定义一个名为 mydomain 的变量,用来保存邮件域的名称:mydomain = zxbke.cn
- 在第 118 行调用前面的 mydomain 变量,用来定义发出邮件的域:myorigin = $mydomain
- 在第 135 行定义网卡监听地址:inet_interfaces = all
- 在第 183 行定义可接收邮件的主机名或域名列表:mydestination = $myhostname, $mydomain
[root@mail ~]# vim /etc/postfix/main.cf
95 myhostname = mail.zxbke.cn
102 mydomain = zxbke.cn
118 myorigin = $mydomain
135 inet_interfaces = all
183 mydestination = $myhostname, $mydomain
第五步:创建电子邮件系统的登录账户。
[root@mail ~]# useradd zxmail //创建测试用户
[root@mail ~]# echo "zx123456" | passwd --stdin zxmail //设置密码
[root@mail ~]# systemctl restart postfix.service //重启Postfix服务
[root@mail ~]# systemctl enable postfix.service //加入开机启动项
配置 Dovecot 服务程序
Dovecot 是一款能够为 Linux 系统提供 IMAP 和 POP3 电子邮件服务的开源服务程序,安全性极高,配置简单,执行速度快,而且占用的服务器硬件资源也较少,是一款值得推荐的收件服务程序。
第六步:安装 Dovecot 服务程序软件包。
[root@mail ~]# dnf -y install dovecot //安装 Dovecot 服务程序软件包
第七步:配置部署 Dovecot 服务程序。
在 Dovecot 服务程序的主配置文件中进行如下修改。首先是第 24 行,把 Dovecot 服务程序支持的电子邮件协议修改为 imap、pop3 和 lmtp。然后下面追加一行参数,允许用户使用明文进行密码验证。
[root@mail ~]# vim /etc/dovecot/dovecot.conf
......
24 protocols = imap pop3 lmtp
25 disable_plaintext_auth = no
/*......
Dovecot 服务程序为了保证电子邮件系统的安全而默认强制用户使用加密方式进行登录,
而由于当前还没有加密系统,因此需要添加该参数来允许用户的明文登录。
......*/
49 login_trusted_networks = 192.168.8.0/24
//设置允许登录的网段地址,不修改则默认允许所有
第八步:配置邮件格式与存储路径。/etc/dovecot/conf.d/10-mail.conf
第 25 行前面的井号(#)删除即可
[root@mail ~]# vim /etc/dovecot/conf.d/10-mail.conf
......
25 mail_location = mbox:~/mail:INBOX=/var/mail/%u
......
第九步:在家目录中建立用于保存邮件的目录,重启 Dovecot 服务并将其添加到开机启动项中。把上面提到的邮件协议在防火墙中的策略予以放行!
[root@SRA ~]# su - zxmail
[zxmail@SRA ~]$ mkdir -p mail/.imap/INBOX //在家目录中建立用于保存邮件的目录
[zxmail@SRA ~]$ exit
[root@mail ~]# systemctl restart dovecot //重启dovecot服务
[root@mail ~]# systemctl enable dovecot //加入开机启动项
[root@mail ~]# firewall-cmd --permanent --zone=public --add-service=imap
[root@mail ~]# firewall-cmd --permanent --zone=public --add-service=pop3
[root@mail ~]# firewall-cmd --permanent --zone=public --add-service=smtp
[root@mail ~]# firewall-cmd --reload
客户使用电子邮件系统
可以使用 Windows 操作系统中自带的Outlook软件来进行测试(也可以使用其他电子邮件客户端来测试,比如Foxmail)。设置电子邮件系统及DNS服务器和客户端主机的IP地址,以便能正常解析邮件域名。
- 在Windows 10系统中运行 Outlook 2010版本为对象进行实验。
- 配置电子邮件账户。在 “账户配置” 页面中单击 “是” 单选按钮,然后单击“下一步”按钮。
- 填写电子邮件账户信息,填写完毕之后,单击“下一步”按钮。
- 进行电子邮件服务登录验证。由于当前没有可用的SSL加密服务,因此在Dovecot服务程序的主配置文件中写入了一条参数,让用户可以使用明文登录到电子邮件服务。Outlook软件默认会通过SSL加密协议尝试登录电子邮件服务,所以在进行图“搜索zxmail@zxbke.cn服务器设置”大约30~60秒后,系统会出现登录失败的报错信息。此时只需再次单击“下一步”按钮,即可让Outlook软件通过非加密的方式验证登录。
当使用Outlook软件成功发送邮件后,便可以在电子邮件服务器上查看到新邮件提醒了,在RHEL 8系统中查看邮件的命令是mailx,需要自行安装。要想查看邮件的完整内容,只需输入收件人姓名前面的编号即可。
[root@mail ~]# dnf -y install mailx //linux安装mailx用作客户端测试
[root@mail ~]# mailx //进入邮件界面
设置用户别名邮箱
用户别名功能是一项简单实用的邮件账户伪装技术,可以用来设置多个虚拟信箱的账户以接收发送的邮件,从而保证自身的邮件地址不被泄露;还可以用来接收自己的多个信箱中的邮件。刚才我们已经顺利地向root账户发送了邮件,下面再向bin账户发送一封邮件测试。
linux服务端查看已经收到以上邮件
发送给bin账户的邮件怎么会被root账户收到了呢?
其实,这就是使用用户别名技术来实现的。在aliases邮件别名服务的配置文件中可以看到,里面定义了大量的用户别名,这些用户别名大多数是Linux系统本地的系统账户,而在冒号(:)间隔符后面的root账户则是用来接收这些账户邮件的人。用户别名可以是Linux系统内的本地用户,也可以是完全虚构的用户名字。
[root@mail ~]# cat /etc/aliases
aliases邮件别名服务的配置文件专门用来定义用户别名与邮件接收人的映射。除了使用本地系统中系统账户的名称外,我们还可以自行定义一些别名来接收邮件。例如创建一个名为dream的账户,而真正接收该账户邮件的应该是root账户。
[root@mail ~]# vim /etc/aliases
......
dream: root
bin: root
daemon: root
......
[root@mail ~]# newaliases //刷新配置文件立即生效
zxmail账户再次尝试发送邮件给 dream用户。之后使用root账户在服务器上执行mail命令后,就能看到这封原本要发送给dream账户的邮件了
Linux邮件客户端
在Linux系统下可选的邮件客户端有数十种,例如Thunderbird、Evolution、Gear、Elementary Mail、KMail、Mailspring、Sylpheed、Claws Mail等。下面选择邮件客户端 Thunderbird
安装使用。
第一步:一键安装Thunderbird邮件客户端
[root@mail ~]# dnf install -y thunderbird //安装Thunderbird邮件客户端
第二步:两种打开方式。一种是通过在终端中输入thunderbird命令后按回车键;另外一种方式是在RHEL8桌面左上角的Activities程序菜单中单击Thunderbird客户端的图标将其打开。
进入Thunderbird客户端填写邮件账户的名称、地址和密码,然后单击Continue按钮。
由于当前没有设置SSL邮局加密,因此在手动配置模式中,需要将SSL选项更改为None,并将Authentication设置为Normal password。
出于安全方面的考虑,Thunderbird客户端会提示警告信息。选中understand the risks复选框,然后单击Done按钮即可,接下来便顺利来到了Thunderbird客户端的使用界面!