Linux的邮件服务器深度学习_linux mail server-程序员宅基地

技术标签: Linux服务器搭建  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地址
当有一封信要传给[email protected]时,
①由于MX记录标志最低者优先,所以该封信会先发送到mail1.lxb.com这个主机上面。
②如果mail1.lxb.com由于种种原因未能收下这封信,
该封信将以第二优先的MX主机来传送,也就是mail2.lxb.com。
③如果所有的MX主机都无法负责的话,那么该封信会以A的标志,直接传送给自己

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

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

  • 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的支持就可以了。

 client1向client2发送邮件:

MUA:client1 ---> client2

mua首先得向MTA注册

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

MTA进行判断:[email protected] ---> 收件人是属于谁MTA管理,当前MTA是163.com,

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

②和发件人不是同一个服务器(收件人是qq.com)--->属于qq.com这个MTA,此时163.com这个MTA会把client1发送给client2的邮件投递给qq.com的MTA,而此时qq的MTA查看的[email protected]属于它管理,则会将它放入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" [email protected]
                           #邮件信息   #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" [email protected]
[root@localhost ~]# echo "nihao" | mail -s "new from root" [email protected]

//此时分别打开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"  [email protected]


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

//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地址则为[email protected]  --- 密码为123 

 此时进入设置协议号,

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

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

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

可以看到有信息接受 

  • 域间互相发送邮件

//配置两个虚拟机的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
[email protected]  client1,client2,server1,[email protected]
        #本域用户不需要加后缀,而其他域需要加后缀
        #所有发给AAA@new1的邮件都会被转发给client1,client2server1,server2这几个用户
[email protected]  client1,client3,server1,[email protected]
        #所有发给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
[email protected]  client1,client2,server1,[email protected]
[email protected]  client1,client3,server1,[email protected]

[root@localhost ~]# postmap /etc/postfix/virtual
[root@localhost ~]# systemctl reload postfix 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44685426/article/details/122154951

智能推荐

class和struct的区别-程序员宅基地

文章浏览阅读101次。4.class可以有⽆参的构造函数,struct不可以,必须是有参的构造函数,⽽且在有参的构造函数必须初始。2.Struct适⽤于作为经常使⽤的⼀些数据组合成的新类型,表示诸如点、矩形等主要⽤来存储数据的轻量。1.Class⽐较适合⼤的和复杂的数据,表现抽象和多级别的对象层次时。2.class允许继承、被继承,struct不允许,只能继承接⼝。3.Struct有性能优势,Class有⾯向对象的扩展优势。3.class可以初始化变量,struct不可以。1.class是引⽤类型,struct是值类型。

android使用json后闪退,应用闪退问题:从json信息的解析开始就会闪退-程序员宅基地

文章浏览阅读586次。想实现的功能是点击顶部按钮之后按关键字进行搜索,已经可以从服务器收到反馈的json信息,但从json信息的解析开始就会闪退,加载listview也不知道行不行public abstract class loadlistview{public ListView plv;public String js;public int listlength;public int listvisit;public..._rton转json为什么会闪退

如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet-程序员宅基地

文章浏览阅读219次。如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet

系统项目报表导出功能开发_积木报表 多线程-程序员宅基地

文章浏览阅读521次。系统项目报表导出 导出任务队列表 + 定时扫描 + 多线程_积木报表 多线程

ajax 如何从服务器上获取数据?_ajax 获取http数据-程序员宅基地

文章浏览阅读1.1k次,点赞9次,收藏9次。使用AJAX技术的好处之一是它能够提供更好的用户体验,因为它允许在不重新加载整个页面的情况下更新网页的某一部分。另外,AJAX还使得开发人员能够创建更复杂、更动态的Web应用程序,因为它们可以在后台与服务器进行通信,而不需要打断用户的浏览体验。在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种常用的技术,用于在不重新加载整个页面的情况下,从服务器获取数据并更新网页的某一部分。使用AJAX,你可以创建异步请求,从而提供更快的响应和更好的用户体验。_ajax 获取http数据

Linux图形终端与字符终端-程序员宅基地

文章浏览阅读2.8k次。登录退出、修改密码、关机重启_字符终端

随便推点

Python与Arduino绘制超声波雷达扫描_超声波扫描建模 python库-程序员宅基地

文章浏览阅读3.8k次,点赞3次,收藏51次。前段时间看到一位发烧友制作的超声波雷达扫描神器,用到了Arduino和Processing,可惜啊,我不会Processing更看不懂人家的程序,咋办呢?嘿嘿,所以我就换了个思路解决,因为我会一点Python啊,那就动手吧!在做这个案例之前先要搞明白一个问题:怎么将Arduino通过超声波检测到的距离反馈到Python端?这个嘛,我首先想到了串行通信接口。没错!就是串口。只要Arduino将数据发送给COM口,然后Python能从COM口读取到这个数据就可以啦!我先写了一个测试程序试了一下,OK!搞定_超声波扫描建模 python库

凯撒加密方法介绍及实例说明-程序员宅基地

文章浏览阅读4.2k次。端—端加密指信息由发送端自动加密,并且由TCP/IP进行数据包封装,然后作为不可阅读和不可识别的数据穿过互联网,当这些信息到达目的地,将被自动重组、解密,而成为可读的数据。不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。2.使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。_凯撒加密

工控协议--cip--协议解析基本记录_cip协议embedded_service_error-程序员宅基地

文章浏览阅读5.7k次。CIP报文解析常用到的几个字段:普通类型服务类型:[0x00], CIP对象:[0x02 Message Router], ioi segments:[XX]PCCC(带cmd和func)服务类型:[0x00], CIP对象:[0x02 Message Router], cmd:[0x101], fnc:[0x101]..._cip协议embedded_service_error

如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控件中的MFC类_vs添加mfc库-程序员宅基地

文章浏览阅读2.4k次,点赞9次,收藏13次。有时候我们在MFC项目开发过程中,需要用到一些微软已经提供的功能,如VC++使用EXCEL功能,这时候我们就能直接通过VS2019到如EXCEL.EXE方式,生成对应的OLE头文件,然后直接使用功能,那么,我们上篇文章中介绍了vs2017及以前的版本如何来添加。但由于微软某些方面考虑,这种方式已被放弃。从上图中可以看出,这一功能,在从vs2017版本15.9开始,后续版本已经删除了此功能。那么我们如果仍需要此功能,我们如何在新版本中添加呢。_vs添加mfc库

frame_size (1536) was not respected for a non-last frame_frame_size (1024) was not respected for a non-last-程序员宅基地

文章浏览阅读785次。用ac3编码,执行编码函数时报错入如下:[ac3 @ 0x7fed7800f200] frame_size (1536) was not respected for anon-last frame (avcodec_encode_audio2)用ac3编码时每次送入编码器的音频采样数应该是1536个采样,不然就会报上述错误。这个数字并非刻意固定,而是跟ac3内部的编码算法原理相关。全网找不到,国内音视频之路还有很长的路,音视频人一起加油吧~......_frame_size (1024) was not respected for a non-last frame

Android移动应用开发入门_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量-程序员宅基地

文章浏览阅读230次,点赞2次,收藏2次。创建Android应用程序一个项目里面可以有很多模块,而每一个模块就对应了一个应用程序。项目结构介绍_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量

推荐文章

热门文章

相关标签