linux入门系列17--邮件系统之Postfix和Dovecot

前文演示了经过Samba和NFS实现文件共享,本篇演示使用Postfix和Dovecot在局域网实现电子邮件收发系统。linux

电子邮件系统是咱们平常生活和工做中很是重要的一个网络服务,在windows下收发电子邮件系统工具不少,相信你们必定接触过,好比qq邮箱、163邮箱等等。本文讲解在Linux下经过部署Postfix和Dovecot来实现电子邮件的收发。web

> 说明:因为编辑编辑器发文的时候若是含有邮件符号的会自动添加锚点,所以下文中全部包含邮件符号的改用#代替。apache

1、电子邮件系统前世此生

1.1 产生背景

你们今天熟知的互联网起源于美国的ARPANET科研项目,这是20世纪60年代美国国防部发起的科研项目。阿帕网是当今互联网的雏形,它也是世界上第一个运营的封包交换网络。vim

在阿帕网发展几年以后,到1971年遇到了严峻的问题,当时参与该项目的科学家分布在美国的不一样地区,而且不一样地区存在时差,这就致使了不能及时分享各自的科研成功,所以须要一种可以借助网络在计算机之间传输数据的方法。windows

看到这里估计不少同窗懵圈了,前文不是才讲了ftp文件传输以及文件共享吗?是的,他们虽然能够实现文件的传输,可是使用场景却不同,他们就像打电话同样,须要服务器和客户端同时在线才能完成数据传输。手机上的语音信箱相信你们用过吧?邮件系统就相似语音信箱,即便你手机没电或关机了,等你再次开机的时候,你仍然能够第一时间收到语音留言。centos

基于这种背景,当时参与阿帕网项目的成员中有一位来自麻省理工大学的教授,用了近一年时间完成了电子邮件的设计,在1971年秋经过sndmsg软件向本身的另一台计算机发出了人类历史上第一封电子邮件。安全

1.2 电子邮件相关概念

1.2.1 电子邮件地址

就像平时收发快递同样,电子邮件要准确发送给他人,那就须要对方提供明确惟一的收件地址。设计者规定电子信箱格式为“姓名@计算机主机名称”,它选择@符号做为间隔符的缘由是,设计者认为人类的额名字和计算机主机名字中应该不会包含@这个特殊字符。服务器

这很好理解,好比咱们平时见到的邮箱:xxxx#qq.com、xxx#163.com等等。网络

1.2.2 电子邮件协议

电子邮件系统基于邮件协议来完成电子邮件的传输,常见邮件协议有:SMTP、POP三、IMAP4等。架构

SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于发送和中转发出的电子邮件,占用TCP端口25。

POP3(Post Office Protocol 3):邮局协议版本3,用于将电子邮件存储到本地主机,占用TCP端口110。

IMAP4(Internet Message Access Protocol 4):Internet消息访问协议版本4,用于在本地主 机上访问邮件,占用TCP端口143。

1.2.3 电子邮件传输过程

电子邮件在传输过程当中涉及到几个角色:MUA、MTA、MDA

MUA(Mail User Agent):邮件用户代理,做用是替用户收发邮件的服务器。

MTA(Mail Transfer Agent):邮件传输代理,做用是转发处理不一样电子邮件服务供应商之间的邮件,把来自于 MUA 的邮件转发到合适的 MTA 服务器。

MDA(Mail Delivery Agent):邮件投递代理,做用是把来自于MTA的邮件保存到本地的收件箱中。

举个例子,假设你用一个新浪信箱给一个谷歌信箱发送一封电子邮件,其传输过程以下图:

如前所述,电子邮件系统不一样于文件传输须要双方同时保持在线,当用户发送邮件后,无需等待投递工做完成就能够下线。上图中假设若是对方邮件服务器(谷歌的MTA)宕机或离线,则发件服务器(新浪的MTA)就会把要发送的内容自动暂时保存到他本地,等检测到对方邮件服务器恢复后再次投放,随后收件人(MUA)就能在本身的邮箱中找到这封邮件了。

1.2.4 Linux下电子邮件收发程序

一个最基础的电子邮件系统至少要能提供发件服务和收件服务。在Linux下使用基于SMTP协议的Postfix服务程序来提供发件服务功能,使用基于POP3协议的Dovecot服务程序提供收件服务功能。部署Postfix和Dovecot服务程序后,就可使用邮件客户端(如Foxmail、Outlook等)进行收发邮件。

在RHEL五、6及早期的Linux系统中,默认的发件服务是Sendmail,在RHEL7系统中替换成了Postfix。相对而言Postfix在稳定性、并发性方面有了很大改进,而且减小了不少没必要要的配置步骤,使用更简单。

2、Linux局域网部署电子邮件系统

2.1 准备工做

2.1.0 主机规划及邮件系统架构

(1)主机及网络规划

开始以前咱们邮件系统规划以下:

主机名称 操做系统 IP地址
电子邮件系统及DNS服务器 Centos7 192.168.0.101
客户端主机(outlook) win7 192.168.0.111
客户端主机(foxmail) win10 192.168.0.112

域名采用heimatengyun.com (因为此演示是在局域网,本身单击DNS服务器,所以域名能够任意写一个)

Centos7是虚拟机,win10是虚拟机的宿主机,win7是另一台物理机,他们之间组成一个局域网。虚拟机centos7做为电子邮件系统以及DNS服务器,设置其网络模式为:桥接模式,目的是直连主机物理网络,以此构成一个局域网。

(2)电子邮件系统基础架构

如1.2.4所述,咱们采用Postfix和Dovecot来搭建一个基础的电子邮件系统,其工做流程以下:

一般状况下,咱们的邮箱地址看起来应该形如:test#heimatengyun.com 也就是按照“用户名#主机地址或域名”的格式来进行规范。

为了提升可读性不直接采用形如:test#192.168.0.1这种ip地址的形式。这种ip地址的方式一是由于不容易记住,另外还容易产生误解(看起来有点像SSH远程链接的地址),所以咱们还须要先部署bind服务程序来为电子邮件服务器和客户端提供NDS域名解析服务。

> 篇幅所限,在此不具体分析Bind服务的使用和配置,只给出具体的操做步骤。

下边就来演示下bind服务程序的配置及管理

2.1.1 配置服务器主机名称

须要保证centos服务器主机名称与发信域名保持一致

[root[@email](https://my.oschina.net/u/159820) ~]# hostnamectl set-hostname mail.heimatengyun.com
[root[@email](https://my.oschina.net/u/159820) ~]# hostname
mail.heimatengyun.com
[root@mail ~]# cat /etc/hostname 
mail.heimatengyun.com
[root@mail ~]#

设置主机名称也能够直接修改/etc/hostname文件。

另外能够看到修改后的主机名称只显示了域名前边部分([root#mail ~]),而非完整的域名([root#mail.heimatengyun.com ~])。

2.1.2 防火墙策略设置

清空iptables防火墙默认策略,避免因防火墙中默认存在的策略阻止了客户端DNS解析域名及收发邮件。

[root@mail ~]# iptables -F
[root@mail ~]#

要是嫌麻烦或为了不干扰,也能够直接先关掉防火墙和selinux。

2.1.3 使用bind服务为电子邮件系统提供域名解析

(1)安装bind服务

[root@mail ~]# yum install bind-chroot
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
...省略部份内容
Complete!
[root@mail ~]#

(2)主配置文件配置

bind服务程序的名称为named,所以须要找到对应的配置文件/etc/named.conf,按如图方式进行修改。

[root@mail ~]# vim /etc/named.conf

将上图2处都改成any,表示服务器上全部的IP均可以提供DNS域名解析服务,容许全部人对本地服务器发送DNS查询请求。

(3)区域配置文件配置

区域配置文件为/etc/named.rfc1912.zones,为了给用户提供配置参考,该文件中已默认有了一些可有可无的解析参数,咱们能够直接把文件清空或将咱们的内容添加到文件末尾便可

[root@mail ~]# vim /etc/named.rfc1912.zones
zone "heimatengyun.com" IN {
        type master;
        file "heimatengyun.com.zone";
        allow-update {none;};
};

直接在文件末尾添加上述配置,保存并退出。

(4)域名数据文件配置

建立前一步中配置的数据文件:heimatengyun.com.zone

[root@mail ~]# cp -a /var/named/named.localhost /var/named/heimatengyun.com.zone
[root@mail ~]# vim /var/named/heimatengyun.com.zone

> 注意使用cp命令时记得添加-a参数,保留原始文件的全部者、所属组、权限等信息。这样bind服务程序才能顺利读取文件内容。

按照以下提示根据自身须要修改便可

如上配置,对应的服务器主机名即为mail.heimatengyun.com,而邮件域为#heimatengyun.com。

> 须要注意,域名后有一个点,若是配置文件配错了会致使后边重启bind服务的时候启动不起来。若是遇到启动不起来的状况请仔细检查配置文件。

配置好后须要重启bind服务使其生效。

[root@mail ~]# systemctl restart named 
[root@mail ~]# systemctl enable named
ln -s '/usr/lib/systemd/system/named.service' '/etc/systemd/system/multi-user.target.wants/named.service'
[root@mail ~]#

(5)DNS服务器地址配置

经过nmtui命令将DNS服务器地址配置为本地的IP地址。忘记操做步骤的请看“linux入门系列11--Centos7网络服务管理”2.2节。

修改完成后重启网络服务使配置生效。

[root@mail ~]# systemctl restart network
2.1.4 测试域名解析

经过nslookup命令测试本地DNS是否生效

[root@mail ~]# nslookup 
> mail.heimatengyun.com
Server:         192.168.0.101
Address:        192.168.0.101#53
Name:   mail.heimatengyun.com
Address: 192.168.0.101
> exit
[root@mail ~]#

说明本地DNS解析服务已经生效了,接下来就开始部署电子邮件系统了。

2.2 Postfix发件系统

Postfix是一款由IBM资助研发的免费开源电子邮件服务程序,可以很好地兼容 Sendmail 服务程序,由许多小模块组成,每一个小模块均可以完成特定的功能,所以可在生产工做环境中根据需求灵活搭配它们。

2.2.1 安装Postfix服务
[root@mail ~]# rpm -q postfix
postfix-2.10.1-6.el7.x86_64
[root@mail ~]#

能够看到,在RHEL7中已经默认安装了Postfix。

防火墙禁用

2.2.2 配置Postfix服务

主配置文件为/etc/postfix/main.cf,其中主要的参数以下:

参数 做用
myhostname 邮局系统的主机名
mydomain 邮局系统的域名
myorigin 从本机发出邮件的域名名称
inet_interfaces 监听的网卡接口
mydestination 可接收邮件的主机名或域名
mynetworks 设置可转发哪些主机的邮件
relay_domains 设置可转发哪些网域的邮件
[root@mail ~]# vim /etc/postfix/main.cf

总共有5处须要修改,分别以下:

myhostname = mail.heimatengyun.com

此处定义一个myhostname 的变量,用来保存服务器的主机名称,以供后边的参数调用。

mydomain = heimatengyun.com

定义一个名为 mydomain 的变量,用来保存邮件域的名称,以供后边的参数调用。

myorigin = $mydomain

调用前面的mydomain变量,用来定义发出邮件的域。这样经过调用变量的好处是避免重复写入信息,以及便于往后统一修改。

inet_interfaces = all

定义网卡监听地址,能够指定要使用服务器的哪些IP地址对外提供电子邮件服务;也能够写成 all,表明全部IP地址都能提供电子邮件服务。

mydestination = $myhostname , $mydomain

定义可接收邮件的主机名或域名列表。这里能够直接调用前面定义好的 myhostname 和 mydomain变量。

2.2.3 建立电子邮件系统登陆用户

与以前提到的vsftp服务程序同样,postfix可使用本地系统的帐号密码进行登陆。(建立的建立应该添加nologin禁止登录,但此处为了后边方便演示,使其容许登陆)

[root@mail ~]# useradd heima
[root@mail ~]# echo "123456" | passwd --stdin heima 
Changing password for user heima.
passwd: all authentication tokens updated successfully.
2.2.4 重启服务并加入开机启动
[root@mail ~]# systemctl restart postfix
[root@mail ~]# systemctl enable postfix

2.3 Dovecot收件系统

Dovecot是一款可以为Linux系统提供IMAP和POP3电子邮件服务的开源服务程序,安全性高、配置简单、执行速度快而且占用资源少,推荐使用。

2.3.1 安装Dovecot
[root@mail ~]# yum install dovecot
...省略部份内容
Installed:
  dovecot.x86_64 1:2.2.36-3.el7_7.1                                         
Complete!
[root@mail ~]#
2.3.2 配置Dovecot

(1)主配置文件

Dovecot服务程序的主配置文件为/etc/dovecot/dovecot.conf 。

[root@mail ~]# vim /etc/dovecot/dovecot.conf

通常状况下有2处须要修改

第一处:

protocols = imap pop3 lmtp
disable_plaintext_auth = no

找到以上行并取消注释,并在其下添加一行,容许用户使用明文进行密码验证。

> 之因此这样操做,是因 为 Dovecot 服务程序为了保证电子邮件系统的安全而默认强制用户使用加密方式进行登陆, 而因为当前尚未加密系统,所以须要添加该参数来容许用户的明文登陆。

第二处:

#login_trusted_networks =192.168.78.0/24

找到login_trusted_networks,根据须要来选择取消注释并配置容许登陆的网段地址。咱们能够在这里限制只有来自于某个网段的用户才能使用电子邮件系统。若是想容许全部人都能使用,则不用修改本参数。

为了演示方便,此处咱们不修改,使其容许全部人都能使用。

(2)其余配置文件

将配置文件/etc/dovecot/conf.d/10-ssl.conf的ssl设置为no

[root@mail ~]# vim /etc/dovecot/conf.d/10-ssl.conf 
...省略部份内容
ssl = no

> 这步若是不设置的话,客户端经过outlook没法接受邮件。我在这里踩了个大坑,但愿你们注意。

2.3.3 配置邮件格式与存储路径

在子配置文件/etc/dovecot/conf.d/10-mail.conf 中,找到mail_location并把注释去掉便可

[root@mail ~]# vim /etc/dovecot/conf.d/10-mail.conf 
mail_location = mbox:~/mail:INBOX=/var/mail/%u

修改后保存并退出。

切换到刚才创建的heima帐号,并在其家目录中建立用于保存邮件的目录。

[root@mail ~]# su - heima
[heima@mail ~]$ mkdir -p mail/.imap/INBOX
[heima@mail ~]$ exit
logout
[root@mail ~]#

最后记得重启dovecot服务

[root@mail ~]# systemctl restart dovecot
[root@mail ~]# systemctl enable dovecot
ln -s '/usr/lib/systemd/system/dovecot.service' '/etc/systemd/system/multi-user.target.wants/dovecot.service'
[root@mail ~]#

至此基本的电子邮件系统就安装完毕,接下来进行测试收发电子邮件。

2.4 测试收发邮件

通过上边的操做,基本的电子邮件系统以及构建好了,如何验证该电子邮件系统是否可用呢?如下三种方法中根据我的喜爱选取一种便可,为了保持完整性,分别进行了测试。

2.4.1 采用mail命令简单测试收发

用mial命令就能够实现收发邮件,不一样用户登陆到系统中用mail命令,就能够看到收发的邮件了。理论上不一样用户登陆系统只能看到本身的邮件,好比当前用户若是是root,那他只能看到别人发给他的邮件(一种特殊状况是能够设置邮件别名,这样就能够看到其余人的邮件),若是当前用户是heima,那也只能看到它本身的邮件。

用root用户分别给本身发邮件并查看

[root@mail ~]# echo "msg" | mail -s "first email to root" root@heimatengyun.com
[root@mail ~]# mail
... 省略部份内容
 N 10 root                  Tue Feb  4 22:22  18/609   "first email to root"
& exit
You have mail in /var/spool/mail/root
[root@mail ~]#

root给heima发邮件并切换到heima帐户查看邮件

[root@mail ~]# echo "msg" | mail -s "first email to heima" heima@heimatengyun.com
[root@mail ~]# su - heima
Last login: Tue Feb  4 15:43:52 CST 2020 on :1
ABRT has detected 1 problem(s). For more info run: abrt-cli list --since 1580802239
[heima@mail ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/heima": 2 messages 1 new
    1 Mail System Internal  Tue Feb 04 20:15  13/562   "DON'T DELETE THIS MES"
>N  2 root                  Tue Feb  4 22:22  18/613   "first email to heima"
& exit
You have mail in /var/spool/mail/heima
[heima@mail ~]$ exit
logout
[root@mail ~]#

能够看到收件和发件都正常。

可是这样还不够,这是在Centos服务器内部,还须要客户端进行测试,如下outlook和foxmail任选其一便可

2.4.2 采用outlook测试

在win7上安装outlook2007来进行测试,先将win7的dns设置为centos的ip地址,即192.168.0.101

安装并配置outlook,过程以下:

(1)运行outlook

点击下一步按钮

(2)配置电子邮件,保持默认便可

点击下一步按钮

(3)选择电子邮件服务协议类型,保持默认便可

点击下一步按钮

(4)填写帐户信息

姓名任意取,电子邮件为前边建立的系统用户heima加上发件域,即为:heima#heimatengyun.com,密码为heima帐户的登陆密码。

点击下一步按钮

(5)电子邮件服务登陆验证

以前咱们配置Dovecot为使用明文登陆电子邮件服务,而Outlook软件默认会经过SSL加密协议尝试登陆,所以会提示加密链接不可用。

再次点击“下一步”按钮。

顺利的话,就会出现这个配置成功的界面。实际可能你的操做过程当中会遇到一些问题,此处若是帐号密码有问题或者登录远程邮件系统有问题都会弹出测试界面,若是遇到问题请严格按照前边的步骤进行检查。笔者此处就曾遇到只能发件不能收件的问题,缘由是因为未开启ssl,须要在docovet中将其关闭。

添加成功后,就能够像本身以及向root用户发送邮件了。其操做步骤给发qq邮件是一直的,相信你们必定用过qq邮件,因此就不在多嘴了。

截图为证

2.4.3 采用foxmail测试

在win10上安装foxmail进行测试,同理先将win10dns设置为centos的ip地址。

foxmail官方地址:https://www.foxmail.com/

(1)安装foxmail

很是简单,直接根据向导便可。

(2)设置邮件帐号

安装完成后,设置邮件帐号,选择“其余邮箱”

输入帐号密码

点击建立按钮,在界面中选择接收服务器类型为POP3

点击建立按钮

点击完成按钮,便可完成安装和设置。

设置成功后就能够正常收发邮件了。

截图为证

经过对比,我的感受foxmail不如outlook稳定,而且收件较慢。

经过本文的演示,你们应该理解电子邮件系统的基本原理和流程,并能够在局域网搭建一个基本的电子邮件收发系统。

下一篇文章将演示apache服务搭建静态web网站。

相关文章
相关标签/搜索