赞
踩
我们通常接收到的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)中;如果不是,就准备转发出去。
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服务器。
编辑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主机
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
使用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 //定义收件人限定
重启服务
[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
编辑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主机
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
使用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 //定义收件人限定
重启服务
[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
域内测试
配置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
example1发给test2
在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
在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
example1发给123@work.com
注:只在example域的邮件服务器上做了虚拟别名,因此只有此域上的用户可以向admin@group.com和123@work.com发送邮件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。