1.邮件服务器采用的是C/S工作模式,通过SMTP,POP,IMAP协议来是实现邮件的发送和接收的。
2.每个邮件系统主要由3部分组成 (3个代理角色):
MUA (mail user Agent) 负责写信收信(邮件用户代理);
MDA (mail Delivery Agent) 投递者负责将信件放在指定的目的地 (识别源地址和目标地址);
MTA(mail transferAgent)负责信件寄送(负责具体的传输信息)。
3.邮件服务相关的常用端口我们一定要熟记:
25----------smtp:发送邮件
110---------pop3:接收邮件
143---------imap:接收邮件
995---------pop3s:安全的接收邮件
993---------imaps:安全的接收邮件
465---------smtps:安全的发送邮件
4.邮件相关的三种协议
4.1POP3协议,是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读、删除邮件等操作),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有被移动的。也就是客户端在下载邮件之后对邮件进行的任何操作都仅仅是在客户端,与服务器没有关系。
4.2IMAP协议,是Internet Mail Access Protocol的简称,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等操作,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
IMAP的优点:将邮件留在服务器端直接对邮件进行管理、操作,比POP3更先进的是支持邮件头部预览主题来源,基于TCP/IP,使用143端口。
4.3POP3协议与IMAP协议同为邮件接受协议,那么它们之间的区别是什么呢?
1)IMAP客户端上收取邮件后邮件依旧保留在服务器上,同时在客户端上的操作也会反馈、保留在服务器端上,POP3不会。
2)IMAP更好的支持从多个设备中随时访问新邮件。
3)IMAP提供的摘要浏览功能可以让你阅读邮件到达时间、主题、发件人、大小等信息后才做出是否下载的决定(可以避免接受垃圾邮件)。
4)POP3需要下载所有的邮件,IMAP不能将所有的邮件下载,而是通过客户端直接对服务器上的邮件进行操控。同时所有的IMAP可以对数据进行加密从而保证通信安全。
5)IMAP整体上为用户带来了更为便捷和可靠的的体验,而POP3更容易丢失邮件或者多次重复下载相同的邮件。
4.4SMTP协议,是“Simple Mail Transfer Protocol”的简称,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它可以帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了用户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
ESMTP:(Extended SMTP) 是对标准 SMTP 协议进行的扩展。它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时,服务器会要求用户提供用户名和密码,以便验证身份。在所有的验证机制中,信息全部采用Base64编码。验证之后的邮件发送过程与SMTP 方式没有两样。
5.邮件传递的过程:
如图所示,我们以红色框中的主机来进行简单的描述,首先本地客户端是MUA(负责信息收信,我们可以将本地客户机理解为你自己,你可以写一封信同时你也可以收一封信)代理的角色,本地用户使用的邮件主机是MTA(负责信件的传递,我们可以将其理解为邮局)代理的角色,同时本地邮件主机还担任着MDA(负责将邮件送到指定的目的地,我们可以将其理解为送信的邮差)的代理角色。
现在我本地客户端有一封邮件往出发,这封邮件会先到达本地用户使用的邮件主机上,邮件主机首先查看该邮件的目的地是不是与本主机在同一域之中,如果在同一个域中,再查看是本域中的哪个用户,找到该用户完成相应转发。如果邮件服务器发现该邮件与本主机处于不同域之中,那么就需要发起DNS请求,请求DNS服务器完成相应的解析,得到目标的IP地址,最终根据IP地址在网络中进行转发。
6.Linux操作系统下,利用两台主机(当然三台最好,单独一台出来模拟DNS服务器),完成邮件服务器的搭建,实现域内、域间的邮件收发功能。
实验规划:我是利用两台主机来进行操作的,一台主机模拟baidu.com域,另一台主机模拟qq.com域,同时baidu.com域的主机模拟DNS服务器,给baidu.com域中添加用户dadou、xiaodou、doudou,给qq.com域中添加用户dazhang、xiaozhang。
6.1首先安装邮件发送、接受对应的程序包:
[root@localhost ~]# yum install postfix –y
[root@localhost ~]# yum install dovecot –y
6.2配置邮件发送对应的主配置文件:
[root@localhost ~]# vim /etc/postfix/main.cf
在主配置文件下做以下配置:
#配置邮件服务器主机名
#配置域名(即这个邮件服务器管理的是哪个区域范围的邮件发送)
#指定邮件发送时的域名(即对方收到邮件后清楚你来自于哪一个域,这里的$mydomain是变量引用,引用了我们配置的baidu.com这个域)
#指定网络接口(默认只监听本地接口,但是如果要与外界通信那么就要监听所有地址,监听所有接口的同时要将监听本地接口注释掉)
#指定服务器的目标区域,设置邮件可以发送到哪些域名(这一步我们也可以通过编辑164行来添加我们所允许的baidu域,也可以注释掉164行,直接取消165行的注释,165行默认通过变量引用引用了我当前域)
#指定允许网络网段地址,设置信任的邮件客户端地址,即我的邮件哪个网段内的人能接收
#转发域(设置邮件转发到哪去,这里也是变量引用)
6.3配置完邮件发送的主配置文件,接下来我们来配置邮件接收服务dovecot的主配置文件:
[root@localhost ~]# vim /etc/dovecot/dovecot.conf
#允许哪些邮件接受协议,一般都允许
#允许哪些网段可以登录接收邮件
6.4配置dovecot服务的子配置文件,设定收件箱对应的用户都有谁:
[root@localhost ~]# vim /etc/dovecot/conf.d/10-mail.conf
%u可以理解为变量,包括当前用户/var/mail下的所有用户。
6.5更改/val/mail目录下所有用户的权限,让每个用户只对自己接收到的邮件有读写权限,而无法看到其他人接收到的邮件。
[root@localhost ~]# chmod 0600 /var/mail/*
6.6重启邮件服务:
[root@localhost ~]# systemctl restart postfix.service
[root@localhost ~]# systemctl restart dovecot
切记:一定要关闭Linux操作系统的防火墙和SELinux后再用客户端进行测试。
[root@localhost ~]# systemctl restart firewalld
[root@localhost ~]# setenforce 0
6.6测试本域内邮件的收发是否成功,下载客户端Foxmail,手动在Foxmail上添加baidu.com域的用户dadou、xiaodou、doudou,三个用户之间发送邮件进行测试。
6.7baidu.com域测试成功后,在另一台主机上按上述步骤进行qq.com域邮件服务器的搭建,并且测试本域用户间能否正常收发邮件。
6.8配置DNS服务器来解析,使不同域的用户可以进行邮件的收发,因为我这里是以两台虚机进行实现,所以就以baidu.com域的主机来充当DNS服务器,假设你是利用三台虚机的话,那么单独一台为DNS服务器是最好的。
[root@localhost ~]# vim /etc/named.conf
[root@localhost ~]# vim /var/named/named.baidu.com
[root@localhost ~]# vim /var/named/named.qq.com
6.9修改两台虚机的DNS服务器的地址为baidu.com域主机的IP地址172.16.50.229。修改完毕后,在Foxmail上添加qq.com域的用户dazhang、xiaozhang,利用baidu.com域的用户给qq.com域的用户发送邮件测试是否成功,同时qq.com域的用户给baidu.com域中的用户发邮件,测试是否成功。
7.邮件服务的SSL访问:
[root@localhost ~]# cd /etc/postfix/
#openssl生成CA认证的一个私钥工具;#-keyout 生成证书签署的文件;
[root@localhost postfix]# openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 365
[root@localhost ~]# vim /etc/postfix/main.cf (//编辑主配置文件,追加下列内容)
安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。
(下边的内容一定要清楚)
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_CAfile = /etc/postfix/smtpd.pem
smtpd_tls_cert_file = /etc/postfix/smtpd.pem
smtpd_tls_key_file = /etc/postfix/smtpd.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
运行参数配置文件中打开安全传输的开关:
[root@localhost ~]# vim /etc/postfix/master.cf
配置完成后重启服务,通过Foxmail进行SSL端口的用户添加登录,并进行测试。
注意: 安全传输只是在传输的过程中对信息进行加密,接收方也可以是明文方式进行信息的接收。
8.邮件服务的虚拟别名域:
在两个域的主配置文件中添加如下内容:
[root@localhost ~]# vi /etc/postfix/main.cf
virtual_alias_domains = group.com, work.com //添加虚拟别名域
virtual_alias_maps = hash:/etc/postfix/virtual //映射为相应的数据库文件
在虚拟别名域中添加如下内容
[root@localhost ~]# vim /etc/postfix/virtual
#baidu域的虚拟别名
@group.com @baidu.com //group虚拟别名对应的是baidu域
@work.com @qq.com //work 虚拟别名对应的是qq域
admin@group.com doudou,dadou,xiaozhang@work.com //群发功能的定义
123@group.com doudou,dadou,xiaozhang@work.com //如果是本域用户不需要加后缀
234@work.com doudou@group.com, dadou@group.com ,xiaozhang
qq域中以同样的方式进行qq域虚拟别名的定义,定义完成后执行下列命令:
#重新生成虚拟别名域数据库
[root@localhost ~]# postmap /etc/postfix/virtual
#重启邮件相关的服务
[root@localhost ~]# systemctl restart postfix.service
[root@localhost ~]# systemctl restart dovecot
总结:邮件服务这一部分的内容是一个重点,所以我认为得多多练习,提高我们对技术学习的应用能力,在练习过程中我们应当掌握其中每一步配置的作用是什么,以及一个正确的配置格式是什么。