上一篇文章演示了通过Samba和NFS进行文件共享。本文演示使用Postfix和Dovecot在局域网中实现一个邮件收发系统。电子邮件系统是我们日常生活和工作中非常重要的网络服务。Windows下有很多用于发送和接收电子邮件系统的工具。本文介绍如何在Linux下部署Postfix和Dovecot收发邮件。1.电子邮件系统的前世今生1.1背景我们今天所知道的互联网起源于美国的ARPANET科研计划,这是美国国防部在1960年代发起的一项科研计划。Arpanet是当今互联网的原型,也是世界上第一个可操作的分组交换网络。Arpanet经过几年的发展,在1971年遇到了严重的问题。当时参与该项目的科学家分布在美国不同地区,不同地区存在时间差异,导致无法及时分享各自的科研成果,因此需要一种能够通过网络在计算机之间传输数据的方法。看到这里,估计很多同学都一头雾水。上一篇不就是讲了ftp文件传输和文件共享吗?是的,虽然都可以实现文件传输,但是使用场景是不一样的。它们就像打电话一样,需要服务端和客户端同时在线才能完成数据传输。手机上的语音信箱相信大家都用过吧?邮件系统类似于语音邮件。即使您的手机没电或关机,再次开机仍可第一时间收到语音信息。基于这样的背景,当时参与Arpanet项目的成员之一是来自麻省理工学院的教授。完成电子邮件的设计花了将近一年的时间。发送了人类历史上的第一封电子邮件。1.2电子邮件相关概念1.2.1电子邮件地址就像收发快递一样,要想准确地向他人发送电子邮件,就需要对方提供一个明确且唯一的收件地址。设计者规定电子邮件格式为“姓名@计算机主机名”。之所以选择@符号作为分隔符,是因为设计者认为人名和计算机主机名不应该包含特殊字符@。这个很好理解,比如我们平时看到的邮箱:xxxx@qq.com,xxx@163.com等等。1.2.2电子邮件协议电子邮件系统基于电子邮件协议完成电子邮件的传输。常见的电子邮件协议包括:SMTP、POP3、IMAP4等。SMTP(SimpleMailTransferProtocol):简单邮件传输协议,用于发送和传输外发邮件,占用TCP25端口POP3(PostOfficeProtocol3):邮局协议版本3,用于将邮件存储到本地主机,占用TCPport110.IMAP4(InternetMessageAccessProtocol4):InternetMessageAccessProtocolversion4,用于访问本地主机上的邮件,占用TCP143端口。1.2.3E-mail传输过程E-mail涉及几个角色传输过程:MUA、MTA、MDA。MUA(MailUserAgent):MailUserAgent,充当为用户收发邮件的服务器。MTA(MailTransferAgent):邮件传输代理,作用是在不同邮件服务商之间转发和处理邮件,将邮件从MUA转发到合适的MTA服务器。MDA(MailDeliveryAgent):邮件投递代理,作用是将邮件从MTA保存到本地收件箱。例如,假设你使用新浪邮箱向谷歌邮箱发送邮件,发送过程如下图所示:前面提到,邮件系统不同于文件发送,需要双方在线同一时间。当用户发送电子邮件时,无需等待交付作业完成即可离线。上图中假设如果对方的邮件服务器(谷歌的MTA)宕机或离线,发送服务器(新浪的MTA)会自动将要发送的内容临时保存在本地,等到对方的邮件服务器被恢复。投递,然后收件人(MUA)就可以在自己的邮箱中找到邮件了。1.2.4Linux下的电子邮件收发程序一个基本的电子邮件系统至少要提供发送服务和接收服务。Linux下使用基于SMTP协议的Postfix服务程序提供发送服务功能,使用基于POP3协议的Dovecot服务程序提供接收服务功能。部署好Postfix和Dovecot服务程序后,就可以使用邮件客户端(如Foxmail、Outlook等)收发邮件了。在RHEL5、6及更早的Linux系统中,默认的发送服务是Sendmail,在RHEL7系统中被Postfix取代。相对而言,Postfix在稳定性和并发性方面有了很大的提升,减少了很多不必要的配置步骤,使用起来更加方便。2.Linux局域网部署邮件系统2.1准备工作2.1.0主机规划和邮件系统架构(1)主机和网络规划在开始之前,我们的邮件系统规划如下:主机名操作系统IP地址邮件系统和DNS服务器Centos7192。168.0.101客户端主机(outlook)win7192.168.0.111客户端主机(foxmail)win10192.168.0.112域名采用heimatengyun.com(由于本次演示是在局域网内,自行点击DNS服务器,所以域名可以随便写)centos7是虚拟机,win10是虚拟机的宿主机,win7是另外一台物理机,它们组成一个局域网。虚拟机centos7作为邮件系统和DNS服务器,其网络模式设置为:桥接模式,目的是直接连接宿主机物理网络,组成局域网。(2)邮件系统基础设施如1.2.4所述,我们使用Postfix和Dovecot来搭建一个基础的邮件系统。工作流程如下:通常我们的邮箱地址应该是这样的:test@heimatengyun.com是按照“用户名@主机地址或域名”的格式规范的。为了提高可读性,没有直接使用ip地址形式如:test@192.168.0.1。ip地址这种方式因为不好记,容易被误解(有点像SSH远程连接的地址),所以我们还需要部署bind服务程序,为邮件提供NDS服务器和客户端域名解析服务。限于篇幅,这里不具体分析Bind服务的使用和配置,只给出具体的操作步骤。下面是绑定服务程序的配置和管理的演示。2.1.1配置服务器的主机名,需要保证centos服务器的主机名与发送域名一致[root@email~]#hostnamectlset-hostnamemail.heimatengyun.com[root@email~]#hostnamemail.heimatengyun.com[root@mail~]#cat/etc/hostnamemail.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使用绑定服务为邮件系统提供域名解析(1)安装绑定服务[root@mail~]#yuminstallbind-chrootLoadedplugins:fastestmirror,langpacksLoadingmirrorspeedsfromcachedhostfile...省略部分内容完成![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.zoneszone"heimatengyun.com"IN{typemaster;文件“heimatengyun.com.zone”;允许更新{无;};};直接在文件末尾添加以上配置,保存退出。(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~]#systemctlrestartnamed[root@mail~]#systemctlenablenamedln-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~]#systemctlrestartnetwork2.1.4测试域名解析使用nslookup命令测试本地DNS是否生效[root@mail~]#nslookup>mail.heimatengyun.com服务器:192.168.0.101地址:192.168。0.101#53Name:mail.heimatengyun.comAddress:192.168.0.101>exit[root@mail~]#表示本地DNS解析服务已经生效,接下来会部署邮件系统。2.2Postfix发送系统Postfix是由IBM资助的免费开源电子邮件服务程序。与Sendmail服务程序兼容良好。它由许多小模块组成,每个模块都可以完成特定的功能,因此在生产工作环境中,可以根据需要灵活搭配。2.2.1安装Postfix服务[root@mail~]#rpm-qpostfixpostfix-2.10.1-6.el7.x86_64[root@mail~]#可以看到RHEL7已经默认安装了Postfix。关闭防火墙2.2.2配置Postfix服务的主配置文件为/etc/postfix/main.cf,主要参数如下:参数作用myhostname邮局系统主机名mydomain域名邮局系统myorigin本机发邮件的域名nameinet_interfaces监听网卡接口的主机名或域名mydestination可以接收邮件mynetworks设置可以转发哪些主机的邮件转发[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创建email系统登录用户postfix和前面提到的vsftp服务程序一样,可以使用本地系统的账号密码登录。(创建的创建要加上nologin禁止登录,后面为了演示方便,允许登录)[root@mail~]#useraddheima[root@mail~]#echo"123456"|passwd--stdinheimaChangingpasswordforuserheima.passwd:allauthenticationtokensupdatedsuccessfully.2.2.4重启服务并将其添加到boot[root@mail~]#systemctlrestartpostfix[root@mail~]#systemctlenablepostfix2.3Dovecot接收系统Dovecot是一个开源服务程序,可以为Linux系统提供IMAP和POP3电子邮件服务。安全性高,配置简单,执行速度快,资源消耗少。推荐使用。2.3.1安装Dovecot[root@mail~]#yuminstalldovecot...省略部分内容Installed:dovecot.x86_641:2.2.36-3.el7_7.1Complete![root@mail~]#2.3.2配置Dovecot(一)主配置文件Dovecot服务程序的主配置文件是/etc/dovecot/dovecot.conf。[root@mail~]#vim/etc/dovecot/dovecot.conf一般情况下,有2个地方需要修改。第一处:protocols=imappop3lmtpdisable_plaintext_auth=no找到上面这一行,取消注释,在下面加一行,允许Users使用明文进行密码认证。原因是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.confmail_location=mbox:~/mail:INBOX=/var/mail/%u修改后保存退出。切换到刚刚创建的heima账号,在其home目录下创建一个用于保存邮件的目录。[root@mail~]#su-heima[heima@mail~]$mkdir-pmail/.imap/INBOX[heima@mail~]$exitlogout[root@mail~]#最后记得重启dovecot服务[root@邮件~]#systemctlrestartdovecot[root@mail~]#systemctlenabledovecotln-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"firstemailtoroot"root@heimatengyun.com[root@mail~]#mail...省略部分内容N10rootTueFeb422:2218/609"firstemailtoroot"&exitYouhavemailin/var/spool/mail/root[root@mail~]#root发邮件给heima,然后切换到heima账户查看邮件[root@mail~]#echo"msg"|mail-s"firstemailtoheima"heima@heimatengyun.com[root@mail~]#su-heima上次登录:2020年2月4日星期二15:43:52CST:1ABRT检测到1个问题。有关更多信息,请运行:abrt-clilist--since1580802239[heima@mail~]$mailHeirloom邮件版本12.57/5/10。类型?寻求帮助。"/var/spool/mail/heima":2条消息1条新消息1条邮件系统内部TueFeb0420:1513/562"DON'TDELETETHISMES">N2rootTueFeb422:2218/613"firstemailtoheima"&exit你在/var/spool/mail/heima[heima@mail~]$exitlogout[root@mail~]#可以看到收发邮件正常。但这还不够。这个是centos服务器里面的,客户端需要测试。您可以选择以下outlook和foxmail之一。2.4.2使用outlooktest在win7上安装outlook2007进行测试。centos的ip地址为192.168.0.101,安装并配置outlook,过程如下:(1)运行outlook,点击下一步(2)配置邮箱,保持默认,点击下一步(3)选择邮箱服务协议类型,保持默认,点击下一步按钮(4)填写账户信息和姓名,邮箱为上面创建的系统用户heima加上发件域,即:heima@heimatengyun.com,以及密码是黑马账号的登录密码。在点击下一步按钮(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服务搭建静态网站。
