文章目录

  • 一、邮件服务器简介
  • 二、邮件服务器传递邮件的过程
  • 三、邮件传输需要的组件及协议
  • 四、邮件转发过程
  • 发邮件的过程
  • 收邮件的过程
  • 五、搭建邮件服务器
  • 配置test邮件服务器
  • (1)配置postfix
  • (2)配置dovecot
  • (3)配置sasl
  • (4)测试
  • 配置example邮件服务器
  • (1)配置postfix
  • (2)配置dovecot
  • (3)配置sasl
  • (4)测试
  • 配置DNS服务器
  • 域间测试
  • 六、群发邮件
  • 七、虚拟别名域群发


一、邮件服务器简介

我们通常接收到的E-mail都是使用“账号@主机名”的方式来处理的,由于恶意的邮件和垃圾邮件的泛滥等种种原因,导致我们不被允许直接利用主机的ip地址来发送邮件,所以说,邮件服务器一定要有一个合法注册过的主机名。既然用到了主机名,也就是在DNS的查询当中你的主机名需要拥有一个A标志。对于一般的服务器来说只要使用正解让客户端可以正确找到我们服务器的IP即可,由于目前收信端的邮件服务器会针对邮件的来源IP进行反解,而如果你的邮件服务器的地址不是固定IP时,该种IP在ISP方面通常会以xxx.dynamic.xxx之类的主机名来管理,偏偏这样的主机名会被主要的大型邮件服务器视为垃圾邮件,所以你的邮件服务器发出的邮件将可能会被丢弃。因此我们最好向ISP申请IP反解。

二、邮件服务器传递邮件的过程

1.通过邮箱地址的主机名查询DNS的MX记录
2.选取MX记录优先级最低的主机名发送
例如:
要将邮件发送给redhat@test.com
1.首先查询DNS获得如下记录

test.com	IN	MX	10	mail1.test.com	
test.com	IN	MX	20	mail2.test.com
test.com	IN	A	192.168.19.2

2.将邮件发送到mail1.test.com
3.若mail1.test.com未能收到则发送给mail2.test.com
4.若mail2.test.com未能收到则发送给test.com这台dns服务器

三、邮件传输需要的组件及协议

邮箱服务架构 邮件服务器设计_邮箱服务架构


解释:

MUA:(Mail User Agent,邮件用户代理人)

收取邮件主机的电子邮件,以及提供用户浏览与编写邮件。接收邮件所使用的客户端软件,例如foxmail,outlook。使用SMTP、IMAP或POP3协议与服务器通信。

MRA:(Mail Retrieval Agent,邮件检索代理人)

邮件服务器上验证MUA用户的账号和密码没有问题后,会前往该用户的Mailbox取得用户的邮件并发送到用户的MUA软件上,一般使用IMAP(端口号143)协议,这个协议可以让你将mailbox的数据存储到你主机上的用户主目录内,即客户端收取邮件后邮件依旧保留在服务器上。

MTA:(Mail Transfer Agent,邮件发送代理人)

MUA将用户的邮件发送到邮件主机上,如果这台邮件主机能够帮用户将这封邮件寄出去,那它就是一个MTA。Mail server就是一个MTA,MTA使用的协议是SMTP(Simple Mail Transfer Protocol)。MTA所使用的软件有sendmail,postfix等。

功能:

(1)接收邮件:

MTA会将来自客户端或是其它MTA的邮件收下来。这个时候MTA用的是SMTP协议,端口号为25.

(2)转发邮件

如果该封邮件的目的地并不是本身的用户,且该封邮件的相关数据符合使用MTA的权力,那么MTA就会将该封邮件再转发到下一台主机上。这是中继转发(Relay)的功能。

MDA:(Mail Delivery Agent,邮件投递代理人)

实际上MDA是挂在MTA下面的一个小程序,最主要的功能是:分析由MTA所收到的邮件表头或内容等数据,来决定这封邮件的去向。MDA分析之后发现这封邮件的目标是MTA,那么MDA会将这封邮件放到用户的邮箱(Mailbox)中;如果不是,就准备转发出去。

四、邮件转发过程

邮箱服务架构 邮件服务器设计_邮箱服务架构_02

发邮件的过程

1、客户端MUA登陆,由MRA验证账号合法性。
2、用户在MUA上编写完邮件后,发送至MTA上,使用SMTP协议。
3、由MDA判断该邮件目标是本域还是其他域,是本域则把邮件放到本域目标用户的Mailbox去,是其他域则进行邮件转发(由MTA转发),转发到目标的MTA上去,使用SMTP协议。

收邮件的过程

1、目标MTA收到邮件后由MRA发送给目标MUA客户端,使用IMAP协议或POP3协议。
注:两个不同域之间转发邮件需要查询DNS服务器通过主机名来获得对端的邮件服务器域名

五、搭建邮件服务器

rhel7默认提供postfix,它主要的配置文件在/etc/postfix/
搭建两台邮件服务器属于不同的域example.com和test.com
需要使用三台服务器,且在同一网段保证互相通信,其中一台为DNS服务器。

配置test邮件服务器

(1)配置postfix

编辑postfix主配置文件
[root@test ~]# vim /etc/postfix/main.cf

76 myhostname = mail.test.com	//主机名
 83 mydomain = test.com			//域名
 99 myorigin = $mydomain		//发送邮件时显示的域名
113 inet_interfaces = all		//监听所有接口,同时注释掉116行
164 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain	//指定别人给你发邮件应该写什么主机名,比如写test@mail.test.com或test@test.com
264 mynetworks = 192.168.0.0/16, 127.0.0.0/8	//信任的客户端网段
296 relay_domains = $mydestination				//可以帮忙转发的MTA主机

(2)配置dovecot

MUA收邮件时使用IMAP或POP3协议,此协议的支持需要安装dovecot
[root@test ~]# yum install dovecot -y 编辑dovecot的配置文件
[root@test ~]# vim /etc/dovecot/dovecot.conf

24 protocols = imap pop3 lmtp	//允许的协议
 48 login_trusted_networks = 192.168.0.0/16		//信任的网段

设置用户邮件所在地址
[root@test ~]# vim /etc/dovecot/conf.d/10-mail.conf

25    mail_location = mbox:~/mail:INBOX=/var/mail/%u

(3)配置sasl

使用MUA收发邮件需要登录到邮件服务器,所以服务端需开启sasl认证(Simple Authentication and Security Layer)
[root@test ~]# yum install cyrus-sasl* -y 编辑postfix主配置文件,追加以下内容

685 broken_sasl_auth_clients = yes				//启用sasl对客户端进行认证
686 smtpd_sasl_auth_enable = yes				//启用sasl认证
687 smtpd_sasl_security_options = noanonymous	//不允许匿名登陆
688 smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination  //定义收件人限定

(4)测试

重启服务

[root@test ~]# systemctl restart postfix dovecot saslauthd 添加测试用户

[root@test ~]# useradd test1

[root@test ~]# useradd test2

更改文件权限,保证foxmail可以收取到邮件

[root@test ~]# chmod 600 /var/mail/test1

[root@test ~]# chmod 600 /var/mail/test2

域内测试

使用foxmail登陆test1和test2

邮箱服务架构 邮件服务器设计_主机名_03


邮箱服务架构 邮件服务器设计_邮件服务器_04


邮箱服务架构 邮件服务器设计_邮箱服务架构_05

配置example邮件服务器

(1)配置postfix

编辑postfix主配置文件
[root@example ~]# vim /etc/postfix/main.cf

76 myhostname = mail.test.com	//主机名
 83 mydomain = test.com			//域名
 99 myorigin = $mydomain		//发送邮件时显示的域名
113 inet_interfaces = all		//监听所有接口,同时注释掉116行
164 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain	//指定别人给你发邮件应该写什么主机名,比如写test@mail.test.com或test@test.com
264 mynetworks = 192.168.0.0/16, 127.0.0.0/8	//信任的客户端网段
296 relay_domains = $mydestination				//可以帮忙转发的MTA主机

(2)配置dovecot

MUA收邮件时使用IMAP或POP3协议,此协议的支持需要安装dovecot
[root@example ~]# yum install dovecot -y 编辑dovecot的配置文件
[root@example ~]# vim /etc/dovecot/dovecot.conf

24 protocols = imap pop3 lmtp	//允许的协议
 48 login_trusted_networks = 192.168.0.0/16		//信任的网段

设置用户邮件所在地址
[root@example ~]# vim /etc/dovecot/conf.d/10-mail.conf

25    mail_location = mbox:~/mail:INBOX=/var/mail/%u

(3)配置sasl

使用MUA收发邮件需要登录到邮件服务器,所以服务端需开启sasl认证(Simple Authentication and Security Layer)
[root@example ~]# yum install cyrus-sasl* -y 编辑postfix主配置文件,追加以下内容

685 broken_sasl_auth_clients = yes				//启用sasl对客户端进行认证
686 smtpd_sasl_auth_enable = yes				//启用sasl认证
687 smtpd_sasl_security_options = noanonymous	//不允许匿名登陆
688 smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination  //定义收件人限定

(4)测试

重启服务

[root@example ~]# systemctl restart postfix dovecot saslauthd 添加测试用户

[root@example ~]# useradd example1

[root@example ~]# useradd example2

更改文件权限,保证foxmail可以收取到邮件

[root@example ~]# chmod 600 /var/mail/example1

[root@example ~]# chmod 600 /var/mail/example2

域内测试

邮箱服务架构 邮件服务器设计_主机名_06


邮箱服务架构 邮件服务器设计_邮件服务器_07


邮箱服务架构 邮件服务器设计_邮件服务器_08

配置DNS服务器

配置dns服务器使域间通信
搭建dns服务器参考这里 装包
[root@dns ~]# yum install bind -y 编辑从配置文件
[root@dns ~]# vim /etc/named.rfc1912.zones

zone "example.com" IN {
        type master;
        file "named.example.com";
};
zone "test.com" IN {
        type master;
        file "named.test.com";
};

编辑数据库文件
[root@dns ~]# vim /var/named/named.example.com

$TTL 1D
@       IN      SOA     @       admin.example.com. (0 1m 1h 1w 3h)
        IN      NS      ns.example.com.
        IN      MX      10 mail.example.com.
ns      IN      A       192.168.1.160
mail    IN      A       192.168.1.232	//example邮件服务器的IP地址

[root@dns ~]# vim /var/named/named.test.com

$TTL 1D
@       IN      SOA     @       admin.test.com. (0 1m 1h 1w 3h)
        IN      NS      ns.test.com.
        IN      MX      10 mail.test.com.
ns      IN      A       192.168.1.160
mail    IN      A       192.168.1.216	//test邮件服务器的IP地址

重启服务
[root@dns ~]# systemctl restart named 设置两台邮件服务器的dns
[root@example ~]# vim /etc/resolv.conf

nameserver 192.168.1.160

[root@test ~]# vim /etc/resolv.conf

nameserver 192.168.1.160

dns解析测试

[root@test ~]# nslookup mail.test.com
Server:         192.168.1.160
Address:        192.168.1.160#53

Name:   mail.test.com
Address: 192.168.1.216

[root@test ~]# nslookup mail.example.com
Server:         192.168.1.160
Address:        192.168.1.160#53

Name:   mail.example.com
Address: 192.168.1.232
[root@example ~]# nslookup mail.test.com
Server:         192.168.1.160
Address:        192.168.1.160#53

Name:   mail.test.com
Address: 192.168.1.216

[root@example ~]# nslookup mail.example.com
Server:         192.168.1.160
Address:        192.168.1.160#53

Name:   mail.example.com
Address: 192.168.1.232

域间测试

test1发给example2

邮箱服务架构 邮件服务器设计_主机名_09


example1发给test2

邮箱服务架构 邮件服务器设计_主机名_10

六、群发邮件

在example域的邮件服务器上做
编辑配置文件
[root@example ~]# vim /etc/aliases

workgroup:      test1@test.com,example2

注:本域用户发给本域(只能发给本域)workgroup@example.com的邮件会发给test1@test.com和example2@example.com,由于example2在本域,故可以省略@example.com

更新数据库

[root@example ~]# postalias /etc/aliases

邮箱服务架构 邮件服务器设计_vim_11


邮箱服务架构 邮件服务器设计_邮件服务器_12


邮箱服务架构 邮件服务器设计_主机名_13

七、虚拟别名域群发

在example域邮件服务器上做
编辑postfix主配置文件
[root@example ~]# vim /etc/postfix/main.cf

virtual_alias_domains = group.com,work.com		//指定虚拟别名域的名称
virtual_alias_maps = hash:/etc/postfix/virtual	//指定含有虚拟别名域定义的文件路径

编辑虚拟别名域的配置文件
[root@example ~]# vim /etc/postfix/virtual

@group.com      @example.com			//发送给group.com域实际上是发送给example.com域
@work.com       @test.com				//发送给work.com域实际上是发送给test.com域
admin@group.com example1,test1@test.com	//发送给admin@group.com的邮件实际上群发给了example1和test1
123@work.com    example2,test2@test.com	//发送给123@work.com的邮件实际上群发给了example2和test2

注:在example域邮件服务器上配置,则群发给本域的用户不需要再加上@example.com

更新数据库

[root@example ~]# postmap /etc/postfix/virtual重启服务

[root@example ~]# systemctl restart postfix

测试

example1发给admin@group.com

邮箱服务架构 邮件服务器设计_vim_14


邮箱服务架构 邮件服务器设计_vim_15


邮箱服务架构 邮件服务器设计_主机名_16


example1发给123@work.com

邮箱服务架构 邮件服务器设计_主机名_17


邮箱服务架构 邮件服务器设计_主机名_18


邮箱服务架构 邮件服务器设计_vim_19