Linux的邮件服务器深度学习

  • 电子邮箱发送过程

        电子邮箱是一种利用网络传递信息给远程服务器的信息传递行为。我们通常使用的E-mail都是使用“账号@主机名”的。但是由于"恶意的邮件"和"垃圾邮件的泛滥"等原因,我们不被允许直接利用主机的ip地址来发送邮件。所以说,邮件服务器一定要有一个合法注册过的主机名。

  • 而通常一封正常的邮件是传输是有两个部分组成的,发邮件和收邮件。

A发送信息给B
A.qq.com  --- > B.qq.com 
===> A发邮件给qq.com这个邮件服务器,A的邮件服务器再发送给B所在邮件服务器,然后B从它的邮件服务器取邮件
  • 邮件服务器是如何通过DNS的信息来进行邮件的传递:

当我们在发送一封邮件的时候,主机首先会先分析那封信的目标主机的DNS,
先取得MX标志,然后以最优先(最小)MX主机为准将信发送出去。

假设我们找到的目标主机DNS有如下信息:
lxb.com  IN MX  10  mail1.lxb.com
lxb.com  IN MX  20  mail2.lxb.com
lxb.com  IN A       ip地址
当有一封信要传给XXX@lxb.com时,
①由于MX记录标志最低者优先,所以该封信会先发送到mail1.lxb.com这个主机上面。
②如果mail1.lxb.com由于种种原因未能收下这封信,
该封信将以第二优先的MX主机来传送,也就是mail2.lxb.com。
③如果所有的MX主机都无法负责的话,那么该封信会以A的标志,直接传送给自己

A@qq.com发送的信息 --->  发件人A + 邮件服务器qq.com 
qq.com  +  邮件    --->  通过MX的记录mail.qq.com(比较优先级)
然后将邮件发送给mail.qq.com这个邮件服务器

Linux的邮件服务器深度学习

  • 邮件传输所需要的组件以及相关协议

  • MUA

        MUA(Mail User Agent,邮件用户代理人)客户端要发送邮件有两种办法,第一种直接登录上邮件服务器(例如ssh)来主动发出邮件第二种就是需要通过MUA来帮你把信送给邮件服务器。MUA使用SMTP、IMAP或POP3协议与服务器通信MUA的主要功能就是收取邮件主机的电子邮件,以及提供用户浏览与编写邮件

  • WebMail

       WebMail 基于Web的电子邮件收发系统,扮演邮件用户代理角色。WebMail系统提供邮件收发、用户在线服务和系统服务管理等功能。WebMail的界面直观、友好,不需要借助客户端,免除了用户对E-mail客户软件进行配置时的麻烦,只要能上网就能使用WebMail,方便用户对邮件进行接收和发送。

  • MTA

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

  • MTA的功能:

  • 接收邮件MTA会将来自客户端或是其它MTA的邮件收下来。这个时候MTA用的是SMTP协议,端口号为25.
  • 转发邮件:如果该封邮件的目的地并不是本身的用户,且该封邮件的相关数据符合使用MTA的权力,那么MTA就会将该封邮件再转发到下一台主机上。这是中继转发(Relay)的功能。
  • MDA

        MDA(Mail Delivery Agent,邮件投递代理人)实际上MDA是挂在MTA下面的一个小程序最主要的功能是:分析由MTA所收到的邮件表头或内容等数据,来决定这封邮件的去向

         MDA分析之后发现这封邮件的目标是MTA,那么MDA会将这封邮件放到用户的邮箱中;如果不是,就准备转发出去

        MDA还有分析与过滤邮件的功能:

  • 过滤垃圾邮件
  • 自动回复

不过各主要的MTA程序都有自己的MDA功能。

常用的MDA有:ProcMail(postfix默认的邮件投递工具)、MailDrop(相对比较专业的投递代理工具)

  • Mailbox

        Mailbox电子信箱,就是某个账号专用的邮件收取文件。linux里面默认的系统邮箱是放在/var/spool/mail/用户账号中的。

  • 通过本地端的MUA将邮件发送到对方的邮件邮箱中去的过程:

        ①本地端的MUA想要使用MTA来发送邮件时,首先必须得取得MTA的权限,即需要向MTA注册一个邮箱账号。

        ②用户在MUA上编写完邮件后,发送至MTA上,邮件的数据主要有邮件标题和邮件内容,当你按下发送键后,你的这封邮件就会被放置到MTA的队列当中并等待发送。

  • 如果该封邮件的目标是本地端MTA自己的账号,那么MDA会将这封信送到相应用户的Mailbox去。
  • 如果该封邮件的目标是其它目标MTA,则开始中继转发的流程。
    • MTA会先判断该封包是否具有合法性,若具有权限时,则MDA会开始进行邮件转发,也就是该封邮件会通过我们的MTA向下一台MTA(SMTP(port 25))发送出去。
    • 如果该封邮件顺利地发出去了,那么就在队列中删除这封邮件。

        ③远程的MTA会收到我们的MTA所发出的那封信,并将该邮件放置到正确的邮箱当中,等待用户来读取或者下载。

        此时,这封邮件是留在对方的MTA上,而不是MUA上。

  • 用户收信的过程:

  • MRA

        MRA(Mail Retrieval Agent)用户可以通过MRA服务器提供的POP来接收自己的邮件,也可以通过IMAP协议将自己的邮件保留在邮件主机上面,并进一步进行建立邮件数据文件夹等高级工作。

        *POP:Post Office Protocol,邮政服务协议        

        *IMAP:Intenet Message Access Protocol,交互式数据消息访问协议

  • 使用POP3协议接收邮件

    • MUA通过POP3的协议连接到MRA的port110,并且输入账号与密码来取得正确的认证与授权。
    • MRA确认该用户的账号和密码没有问题后,会前往该用户的Mailbox取得用户的邮件并发送到用户的MUA软件上。
    • 当所有的邮件传送完毕后,用户的Mailbox内的数据将会被删除。

        由于使用POP3协议会将已经接收到的邮件删除,因此,出现了IMAP(端口号143),这个协议可以让你将mailbox的数据存储到你主机上的用户主目录内,即客户端收取邮件后邮件依旧保留在服务器上。

        SMTP、POP3、IMAP这三种通信协议全部都是明文传输,尤其是在POP3和IMAP这两个通信协议中,用户必须要输入账号和密码才能收发邮件。所以就有了POP3s,IMAPs通信协议的出现,他们是通过ssl加密实现的。

        由于POP3、IMAP只与MRA和自己的用户有关,因此只要设定好用户和服务器使用的MRA协议一致即可,并不会影响到其他的服务器。但是MTA就不同了,因为MTA必须与其他的MTA沟通,因此,若你使用了SMTPs,那么全世界要与你的MTA沟通,就全部需要改变为SMTPs通信协议才行,那么这是目前没有办法实现的。如果是特殊情况,可以将数据加密后,再由MTA转交即可。

  • Relay与认证机制的重要性

        当需要MTA帮你将邮件转发到下一台MTA去时,这个操作就成为邮件中继转发。当所有人都可以通过这一台MTA帮忙进行Relay时,这个情况称之为Open Relay的操作。当MTA发生Open Relay且该MTA是连上因特网的,很可能会产生如下问题:

  • 主机所在网络正常使用的连接速度将会变慢,因为网络带宽都被广告、垃圾邮件耗光了。
  • 主机可能由于大量发送邮件导致主机资源被耗尽,容易产生宕机之类的问题。
  • 本地MTA将会被因特网社会定义为“黑名单”,从此很多正常的邮件就会无法收发。

        所以,目前所有的distributions几乎都将MTA默认启动为仅监听内部循环接口,而且也将Open Relay的功能取消了。所以你要使用MTA的转发功能时,必须要取得合法使用这个MTA的权限。通常设置Relay的方法有以下几种:

  • 规定某一个特定客户端的IP或网段可使用Relay。
  • 若客户端的IP不固定可以利用认证机制来处理
  • 将MUA搭建在MTA上面,例如OpenWebMail之类的Web接口的MUA功能。

        认证机制上面常见的有SMTP邮件认证机制,以及SMTP after POP两种,不论是哪一种机制,基本上都是通过让用户输入认证用的账号与密码,来确定他有合法使用该MTA的权限,然后针对通过认证的用户开启relay的支持就可以了。

Linux的邮件服务器深度学习

 client1向client2发送邮件:

MUA:client1 ---> client2

mua首先得向MTA注册

在MUA上client1写好邮件,传递给MTA

MTA进行判断:client2@163.com ---> 收件人是属于谁MTA管理,当前MTA是163.com,

①和发件人是同一个服务器 ---> MTA会将client1发送的邮件,放入邮件服务器中的client2的mailbox

②和发件人不是同一个服务器(收件人是qq.com)--->属于qq.com这个MTA,此时163.com这个MTA会把client1发送给client2的邮件投递给qq.com的MTA,而此时qq的MTA查看的client2@qq.com属于它管理,则会将它放入client2的邮件列表中

!!!配置邮件服务器,/home/下的用户的权限必须为600,否则无法正常收发邮件!!!

  • 配置邮件服务器:

  •  postfix文件

//下载邮件服务器
[root@localhost etc]# yum install postfix -y
//此时postfix包内存在多个服务文件,其中主配置文件在/etc/postfix中

/etc/postfix/master.cf     
    主要规定了postfix每个程序的工作参数,这个文件默认已经好了,通常不需要更改

/etc/postfix/access        
    可以设置开放Relay或拒绝连接的来源或目标地址等信息的外部配置文件,不过该文件在/etc/postfix/main.cf启动之后才生效,而且设置完毕后需要以postmap来处理成为数据库文件

/etc/aliases                作为邮件别名的用途,也可以作为邮件组的设置

/usr/sbin/postconf            
这个命令可以列出你的postfix的详细设置数据,只想要查看修改过的某些默认参数和非默认值的数据,可以使用postconf -n

/usr/sbin/postfix         postfix的主要执行文件,可以使用这个命令来启动或重新读取配置文件
postfix check             检查postfix相关的文件、权限等是否正确
postfix start/stop/reload
postfix flush             强制将目前正在邮件队列的邮件寄出

/etc/sbin/postalias         
        设置别名数据库的命令,因为MTA读取数据库格式的文件效率较好,所以要将ASCII格式的文件重建为数据库。
在postfix中,这个命令主要用于转换/etc/aliases成为数据库文件。postaliases hash:/etc/aliases(hash为一种数据库格式,然后/etc/aliases就会自动被更新)

/usr/sbin/postcat        主要用于检查放在队列当中的邮件内容
/usr/sbin/postmap        转换/etc/postfix/access文件的数据库
/usr/sbin/postqueue      类似mailq的输出结果,例如postqueue -p

设置主配置文件的要求:
“#”符号是注释;
每一行第一个字符不可以是空白符,设置的方法    “参数 = 设置值”等号两边要有空格符;
可以使用“$”来引用变量值,例如myorigin = $myhostname;
如果该参数支持两个以上的数据,则使用空格符或逗号来分隔;
可使用多行表示同一个设置值,只要在第一行有逗号,且第二行开头为空格符,即可将数据延伸到第二行继续写;若重复设置某一项目,则以较晚出现的设置值为准

要使postfix可以收发邮件,需要启动以下参数:
myhostname          主机名,mydomain设置默认取$myhostname第一个小数点之后的名称
myorigin            发信时“发信源主机”,也就是代表本MTA传出去的邮件将以此设置值为准
inet_interfaces    
设置postfix的监听接口,默认情况下你的postfix只会监听本机接口(127.0.0.1),如果开放全部的接口可写为all
inet_protocol      设置postfix监听IP协议,如果想监听ipv4地址可写inet_protocols = ipv4
mydestination      
    设置收信的主机名,也就是说别人给你发邮件应该写成什么主机名。如果DNS里的设置有MX标志的话,最好将那个主机名写在mydestination内,否则很容易出现错误信息。
mynetworks:       规定信任的客户端。
relay_domains:    
    规范可以帮忙relay的下一台MTA主机地址,在默认情况下,这个设置值是$mydestination。
日志文件:/var/log/maillog
  •  mail文件

[root@localhost ~]#yum install mailx -y

mailx 对应的是 mua
mailx命令相关命令的有:mail,sendmail.
    语法:    mailx [选项] [名字]
    [root@localhost ~]# echo "nihao" | mail -s "new from root" lxb@openlab.com
                           #邮件信息   #mail    #邮件内容       #发送的服务器
说明:
本命令用于发送和接收邮件,名字是收信人的用户名,本命令有许多内部命令,选项说明如下:

-A:执行帐户的命令的名称启动文件被读取之后
-a:给定的文件附加到邮件中
-B:使标准输入和标准输出线-缓冲
-b:发送密件副本列表。列表应该是一个逗号分隔的名称列表
-c:送炭复制到地址列表
-D:开始在断开模式; 看到断开的变量的描述选项
-d:启用调试消息和关闭消息的实际交付。 不像-v,此选项仅用于开发目的
-e:只是检查是否有邮件系统邮箱。 如果是,返回零,否则,一个非零值退出状态
-E:如果传出消息,不包含在它的第一个或唯一的消息部分的任何文字,不要把它丢弃,但它静静地,有效地设置在程序启动时的skipemptybody变量。这是一个从发送消息有用 的脚本由启动cron的
-f:阅读在用户的邮箱中的内容(或文件时 ,如果指定)进行处理; 当mailx的是退出,将其写入未删除的邮件恢复该文件。 该字符串作为文件处理描述为文件夹命令如下
-F:保存要发送的消息中的第一个收件人的地址的本地部分命名的文件
-H:打印头汇总所有消息并退出
-h:调用的sendmail与指定的跃点数。此选项没有在使用SMTP发送邮件的效果
-i:TTY忽略中断信号。使用mailx的对噪音的电话线时,这是非常有用的
-I:显示了“ 新闻组:'或' 文章ID:'在标题汇总字段。只有在与-f结合使用时适用
-n:禁止阅读/etc/mail.rc启动时。这个选项应该适用于对多台计算机调用mailx的脚 本来启动,因为文件的内容,它们之间可能有所不同
-N:阅读邮件或编辑邮件文件夹时禁止消息头的初始显示
-q:启动与指定的文件的内容的消息。 可仅在发送模式给出
-r:设置发件人地址。忽略任何从指定的变量环境变量或启动文件。波浪号逃逸被禁用。该-r地址选项被传递到邮件传输代理,除非使用SMTP。此选项存在唯一的相容性;它建议,而不是直接设置从变量
-R:如果打开文件夹的只读打开它们
-s:指定主题的命令行(仅后-s标志作为主题的第一个参数,要注意引用包含空格的科目)
-S:设置内部选项变量变量的可选值的价值 
-T:写“ 邮件ID:”和“ 文章ID:'读入文件名 ??的每个消息头字段。暗示我压缩文件的处理所描述的文件夹命令如下
-t:要发送的消息,预计将包含一个消息头“收件人:”,“抄送”或“密件抄送:”字段给收件人。 在命令行上指定的收件人将被忽略
-u:读取用户的用户的邮箱
-v:详细模式。 递送的详细信息显示在用户的终端上
-V:显示版本信息并退出
- ?:启用波浪逃逸 ,即使不是在交互模式
  • mail文件在虚拟机的操作: 

               mail commands
type <message list>             type messages
next                            goto and type next message
from <message list>             give head lines of messages
headers                         print out active message headers
delete <message list>           delete messages
undelete <message list>         undelete messages
save <message list> folder      append messages to folder and mark as saved
copy <message list> folder      append messages to folder without marking them
write <message list> file       append message texts to file, save attachments
preserve <message list>         keep incoming messages in mailbox even if saved
Reply <message list>            reply to message senders
reply <message list>            reply to message senders and all recipients
mail addresses                  mail to specific recipients
file folder                     change to another folder
quit                            quit and apply changes to folder
xit                             quit and discard changes made to folder
!                               shell escape
cd <directory>                  chdir to directory or home if none given
list                            list names of all available commands

A <message list> consists of integers, ranges of same, or other criteria
separated by spaces.  If omitted, mail uses the last message typed.
& 
  • 配置简单linux服务器

  • 使用邮件服务器的root用户给client用户发邮件

//首先配置主配置程序(去掉这几行注释)
[root@localhost postfix]# vim main.cf
myhostname = mail.new.com                    //邮箱服务器
mydomain = new.com                            //域名
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
inet_interfaces = all
inet_protocols = all
mynetworks = 192.168.220.0/24, 127.0.0.0/8            //允许ip段
relay_domains = $mydestination                        //接受domain

//然后配置dns服务器(我这边将DNS服务的邮箱设置为虚拟机本地ip)
[root@localhost postfix]# nslookup mail.new.com
Server:		192.168.220.134
Address:	192.168.220.134#53

Name:	mail.new.com
Address: 192.168.220.134

[root@localhost postfix]# vim main.cf
[root@localhost postfix]# nslookup mail.new.com
Server:		192.168.220.134
Address:	192.168.220.134#53

Name:	mail.new.com
Address: 192.168.220.134

//然后去配置一个新用户
[root@localhost ~]# useradd client
[root@localhost ~]# echo "123" | passwd --stdin client
Changing password for user client.
passwd: all authentication tokens updated successfully.

//然后去下载邮箱mail插件并配置重启服务
[root@localhost ~]# yum install mail -y
[root@localhost postfix]# systemctl restart postfix

//先在主机查看mail邮件
[root@localhost ~]# mail
No mail for root

//然后在root下编写邮件
[root@localhost ~]# echo "nihao" | mail -s "new from root" client@new.com
[root@localhost ~]# echo "nihao" | mail -s "new from root" lxb@new.com

//此时分别打开lxb和client用户查看邮件
//client用户
[root@localhost ~]# su - client
[client@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/client": 1 message 1 new
>N  1 root                  Sun Dec 26 09:37  18/584   "new from root"
& 

//lxb用户
[root@localhost ~]# su - lxb
[lxb@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/lxb": 5 messages 5 new
>N  1 root                  Sun Dec 26 09:31  18/575   "new from root"
 N  2 root                  Sun Dec 26 09:31  18/575   "new from root"
 N  3 root                  Sun Dec 26 09:31  18/575   "new from root"
 N  4 root                  Sun Dec 26 09:31  18/560   "new from root"
 N  5 root                  Sun Dec 26 09:37  18/575   "new from root"
& 

//此时键入address为查看邮件内容
//而relay为回复内容

//!!!如果没有配置main.cf的参数,将无法成功发送邮件!!!
  • 使用邮件服务器的root用户给wrokgroup组发邮件

//此时是发信息给wrokgroup组,需要先编写组信息
//组信息的配置在/etc/aliases   在最后一行加上组信息
[root@localhost ~]# vim /etc/aliases
wrokgroup:      client1,client2,client3

//此时需要将组信息配置为数据库信息
[root@localhost etc]# postalias /etc/aliases

//此时ls -l 查看
[root@localhost etc]# ls -l aliases*
-rw-r--r--. 1 root root  1569 Dec 27 06:32 aliases
-rw-r--r--. 1 root root 12288 Dec 27 06:32 aliases.db

//然后重启服务,并增加client1,client2和client3用户
[root@localhost ~]# useradd client1
[root@localhost ~]# useradd client2
[root@localhost ~]# useradd client3

//在服务器上发送邮件信息
[root@localhost etc]# echo "group mail" | mail -s "group"  wrokgroup@openlab.com


//此时分别去客户端查看信息

//client1
[root@localhost ~]# su - client1
[client1@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/client1": 2 messages 1 new 2 unread
 U  1 root                  Mon Dec 27 06:37  19/594   "group"
>N  2 root                  Mon Dec 27 06:39  18/590   "group"
& 

//client2
[root@localhost ~]# su - client2
[client2@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/client2": 1 message 1 new
>N  1 root                  Mon Dec 27 06:39  18/590   "group"
& 

//client3
[client3@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/client3": 1 message 1 new
>N  1 root                  Mon Dec 27 06:39  18/590   "group"
& 


//!!!我这边犯错了,将workgroup打错了,使用在导致信息无法发出(后面纠错发现)
[root@localhost ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 6 messages 6 new
>N  1 Mail Delivery System  Mon Dec 27 06:28  76/2427  "Undelivered Mail Returned to Sender"
 N  2 Mail Delivery System  Mon Dec 27 06:29  75/2438  "Undelivered Mail Returned to Sender"
 N  3 Mail Delivery System  Mon Dec 27 06:30  76/2450  "Undelivered Mail Returned to Sender"
 N  4 Mail Delivery System  Mon Dec 27 06:31  76/2450  "Undelivered Mail Returned to Sender"
 N  5 Mail Delivery System  Mon Dec 27 06:32  76/2450  "Undelivered Mail Returned to Sender"
 N  6 Mail Delivery System  Mon Dec 27 06:34  75/2398  "Undelivered Mail Returned to Sender"
& 1
//错误信息
  • 使用MUA代理收发邮件

         使用MUA代理收发邮件,此时需要一个代理邮件的软件,我使用的是FoxmailMUA使用SMTP、IMAP或POP3协议服务器通信。而MUA发送邮件使用的是SMTP协议,也就是MUA与MTA进行通信使用SMTPMUA收邮件时使用的是IMAP或POP3协议与MRA进行通信。启动POP3和IMAP需要安装dovecot这个插件

        使用MUA收发邮件需要登录到邮件服务器,所以服务端需开启sasl认证。sasl是一种用来扩充C/S模式验证能力的机制。在postfix中可以利用SASL来判断用户是否有权使用转发服务,或是辨认谁在使用你的服务器。sasl模块的软件包cyrus-sasl

         postfix则是提供邮件服务器的MTA功能 

         dovecot则是提供邮件服务器的MRA功能        

         sasl模块的软件包cyrus-sasl --- 负责SASL认证

        而MUA是怎么实现收发邮件的呢:

        user1发送邮件,此时通过本地Linux上部署的DNS解析出mail信息,此时邮件服务器收到邮件以后,邮件会被被通过MTA(postfix插件)接受,此时MTA确定邮件的信息,是否属于该DNS的mail的管理域信息,如果是会被放入该用户的邮箱中(/var/spool/mail/user2)。而如果使用的是MUA接受,则邮件还会被MRA的dovecot同步到该用户的家目录下的指定文件中(/home/user2/mail/.imap下的INBOX文件内),而user2通过MUA中从MRA上下载邮件文件,而用户登录MUA需要提供SASL的密码认证。

        而/home/user2/mail/.imap下的INBOX文件需要在Linux上进行自己创建!!!

//配置mua代理邮件需要下载两个插件
//插件①dovecot
[root@localhost /]# yum install dovecot  -y 

//dovecot插件会产生一个/etc/dovecot的文件夹
[root@localhost /]# cd /etc/dovecot/
[root@localhost dovecot]# ll
total 12
drwxr-xr-x. 2 root root 4096 Dec 27 07:25 conf.d
-rw-r--r--. 1 root root 4391 Dec 27 07:25 dovecot.conf
//其中的主配置文件在conf.d的目录下(类似httpd)

//配置dovecot的主配置文件
[root@localhost ~]# vim /etc/dovecot/dovecot.conf 

protocols = imap pop3 lmtp submission            #此时设置允许登录的协议
login_trusted_networks = 192.168.220.0 /24       #设置允许访问的ip


//插件②cyrus-sasl --- 启动sasl认证需要在postfix上修改部分配置
[root@localhost conf.d]# yum install cyrus-sasl* -y

//cyrus-sasl的包主要是进行postmail的加密操作
//配置需要在/etc/postfix/main.cf下,加上
[root@localhost ~]# cd /etc/postfix/
[root@localhost postfix]# vim main.cf

broken_sasl_auth_clients = yes                            #启用sasl对客户端进行认证
smtpd_sasl_auth_enable = yes                              #启用sasl认证
smtpd_client_restrictions = permit_sasl_authenticated     #设置为sasl认证
smtpd_sasl_security_options = noanonymous                 #禁用匿名用户
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination     #定义收件人限定

//此时还需要在/etc/sysconfig/saslauthd 下修改登录格式
[root@localhost dovecot]# vim /etc/sysconfig/saslauthd 
MECH=shadow                                    #设置为密码登录

//然后编辑用户邮件所在地址
[root@localhost ~]# vim /etc/dovecot/conf.d/10-mail.conf

mail_location = mbox:~/mail:INBOX=/var/mail/%u    #这个就是MRA文件存放的位置,需要去创建

//再添加几个带密码的用户
//重启服务  --- 此时需要重启三个服务
[root@localhost ~]# systemctl restart postfix
[root@localhost ~]# systemctl restart dovecot
[root@localhost ~]# systemctl restart saslauthd

//此时启用为IAMP服务,域名为new.com

//而为了方便,我设置了物理机上的缓存 --- 产生对应映射
192.168.220.134    mail.new.com

此时去Foxmail上登录查看:我们使用的本地DNS设置的mail网络

此时我们的E-mail地址则为client1@new.com  --- 密码为123 

Linux的邮件服务器深度学习

 此时进入设置协议号,

  • IMAP为接受邮件的协议           ---   ip地址设置为mail的地址 --- 原因:之前设置的映射
  • SMTP则是发送邮件的协议      ---   ip地址设置为mail的地址 --- 原因:之前设置的映射
  • 此时我们直接输入Linux上的用户和密码

Linux的邮件服务器深度学习

此时登录成功,查看账号信息: 

Linux的邮件服务器深度学习

通过之前的设置,此时已经完成邮箱服务的设置(主要是INBOX文件夹的设置)

可以看到有信息接受 Linux的邮件服务器深度学习

  • 域间互相发送邮件

//配置两个虚拟机的DNS和mail邮件
mail.new.com的主机无需配置
mail.old.com的主机配置如下:
[root@localhost ~]# yum install dovecot -y
[root@localhost ~]# yum install cyrus-sasl* -y
[root@localhost ~]# vim /etc/postfix/main.cf
myhostname = mail.ceshi.com
mydomain = ceshi.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, $mydomain
mynetworks = 192.168.220.0/24
relay_domains = $mydestination
#开启SASL认证
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
 
[root@localhost ~]# vim /etc/dovecot/dovecot.conf 
protocols = imap pop3 lmtp
login_trusted_networks = 192.168.220.0/24
[root@localhost ~]# vim /etc/dovecot/conf.d/10-mail.conf 
     mail_location = mbox:~/mail:INBOX=/var/mail/%u
 
[root@localhost ~]# systemctl restart postfix
[root@localhost ~]# systemctl restart dovecot
[root@localhost ~]# systemctl restart saslauthd
[root@localhost ~]# systemctl stop firewalld 
[root@localhost ~]# setenforce 0
[root@localhost ~]# chmod 0600 /var/mail/*
 
//然后配置DNS服务器
[root@localhost ~]# yum install bind -y

[root@localhost ~]# vim /var/named/chroot/etc/named.conf 
zone "old.com" IN  {
	type master ;
	file "old.zone";
};

[root@localhost named]# vim /var/named/chroot/var/named/old.zone
$TTL 1D
@  IN  SOA  dns1.old.com. lianxi.163.com. (
                                     10
                                     1D
                                     1H
                                     1W
                                     3H )

        IN   NS dns1.old.com.
        IN   MX  10  mail.old.com.
dns1    IN   A  192.168.220.234
www.openlab.com.  IN   A  192.168.220.234
web     IN   CNAME  www
mail    IN   A     192.168.220.234

//重启NDS,postfix,dovecot,sal服务
  •  虚拟别名域

[root@localhost ~]# vim /etc/postfix/main.cf
virtual_alias_domains = new1.com,old1.com
        #该参数指定虚拟别名域的名称
virtual_alias_maps = hash:/etc/postfix/virtual
        #该参数用来指定含有虚拟别名域定义的文件路径

在new.com域的虚拟机上做如下操作:
[root@localhost ~]# vim /etc/postfix/virtual 
添加如下内容
@new1.com       @new.com
        #表示将发送给虚拟域new1.com的邮件实际投递到真实的本地域new.com
@old1.com       @old.com
        #表示将发送给虚拟域old1.com的邮件实际投递到真实的本地域old.com
AAA@new1.com  client1,client2,server1,server2@old.com
        #本域用户不需要加后缀,而其他域需要加后缀
        #所有发给AAA@new1的邮件都会被转发给client1,client2server1,server2这几个用户
BBB@old1.com  client1,client3,server1,server2@old.com
        #所有发给BBB@old1的邮件都会被转发给client1,client3,server1,server2这几个用户

//转化虚拟域
[root@localhost ~]# postmap /etc/postfix/virtual 
//重启服务
[root@localhost ~]# systemctl restart postfix

//然后在old.com域上做配置:
[root@localhost ~]# vim /etc/postfix/virtual
添加如下内容
@new1.com       @new.com
@old1.com       @old.com
AAA@new1.com  client1,client2,server1,server2@old.com
BBB@old1.com  client1,client3,server1,server2@old.com

[root@localhost ~]# postmap /etc/postfix/virtual
[root@localhost ~]# systemctl reload postfix 
上一篇:权限冒险位


下一篇:FreeBSD MySQL 8.X