序言

相信读者都有自己的邮箱吧,先在咱的工作真是离不开邮箱啦,电子邮件系统的产生便利了我们的通信交流,电邮的工作模型来源于传统邮局的工作模型,想想当初通信业还不发达的时候,我们都是使用书信来进行交流,大致的工作流程如下图所示

clip_image002

电邮的产生将一切需要人力传播信件的事情全部都分发给协议来做了 ,以前用户去邮局寄信的工作由SMTP(简单邮件传输协议)来做了,邮递员给用户送信的工作由POP2/POP3/IMAP4协议来做了,这样一来所有的信件都通过网络来传输,那效率便是极高的了,当今的电邮系统大都支持MIME,所以信件的内容就丰富了,可以有音频、图片、视频等,但是读者应该知道,一切内容到达网络都将存在安全隐患,上述所列的协议在传输信息的时候都是使用的明文,这可不能行啊,还有就是垃圾邮件和病毒的烦恼,那么如何来解决,读者现在是不是觉得电邮系统问题多多啊,别急,小编在这篇博客中将详细的来实现一个电邮系统,从简单到复杂,帮助读者来详细了解电邮系统的搭建。

电邮系统的组成

1. 服务器

  • 发送服务器(MTA):为了实现发送服务器不同的OS下都有相应的软件

     Windows下:电子邮件服务、 exchange(需要结合域)

     Linux下:sendmail 【无验证、无防垃圾、无防病毒】 、postfix、 extmail,虽然sendmail有很多的缺点,但是由于它是最早出现的,目前任然有很大的用户群

     还有第三方下的qmail

  • 接收服务器(MRA):

     Windows下:电子邮件服务

     Linux下:dovecot {能实现pop3 imap4 pop3s imaps}

2. 邮件分拣 MDA

maildrop procmail

3. 客户端(MUA)

Windows下:outlook、foxmail

Linux下:mutt、mail、evolution、thunderbird

4. 电邮安全

  • 中继

     邮件中继(SMTP Relay Service)指在不改变用户邮件地址(发 件人)的前提下,将用户邮件通过多链路SMTP邮件转发服务器 投递到收件人邮件服务器。

  • 反垃圾邮件

     常用软件:asf、 spamassian

  • 防病毒

     常用软件:clamav

接下来的工作就是小编来实现电邮系统,整个过程相当的长啊,小编使用word文档写了整整59页啦,因为觉得很有意义,所以分享给读者,读者在看的时候一定要有耐心啦,如果有啥不明白的请及时联系小编哈。。

Project 1:简单电邮系统实现

需求描述:

现有两公司,公司之间业务来往频繁,两公司希望建立邮件系统来方便员工之间的通信,根据需求,实现拓扑如下

clip_image004

准备工作:

小编使用vm虚拟机来完成案例

两台服务器软件需求一致server linux 5.4

Bind-9.3.6-4.P1.el5

bind-chroot- 9.3.6-4.P1.el5

caching-nameserver

sendmail-8.13.8-2.el5

sendmail-cf-8.13.8-2.el5

sendmail-devel-8.13.8-2.el5

dovecot-1.0.7-7.el5

上述软件包,linux镜像中带得都有啦,读者可以直接使用yum安装就是了,因为电邮系统也会用到域名解析,所以DNS的搭建是必不可少的

公司一服务器配置(先实现一个公司内部能相互发送邮件)

Step 1:首先是网卡参数的配置,服务器是有两块网卡的,eth0是内网卡,eth1是外网卡,网卡参数的配置文件在/etc/sysconfig/network-scripts/目录下,分别为ifcfg-eth0和ifcfg-eth1

# vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改添加一下内容即可BOOTPROTO=static

IPADDR=192.168.111.20

NETMASK=255.255.255.0

 

 # vim /etc/sysconfig/network-scripts/ifcfg-eth1BOOTPROTO=static

IPADDR=10.0.0.1

NETMASK=255.255.255.0

修改完成之后重新启动网络服务

 # service network restart

因为两块网卡涉及到网络数据转发问题,所以要打开数据转发选项(这里是为后续的两个公司之间的电邮通信做准备的)

  # vim /etc/sysctl.conf

 net.ipv4.ip_forward = 1

还要添加默认路由能让两个公司之间互通

 # route add –net default gw 10.0.0.1

要注意的是,这里的路由是临时路由每当网络服务重启的时候都要重新手工添加,当然读者也可以添加永久静态路由

step 2:修改主机名,sendmail会检查主机名的设置,这一步很重要,不然后面启动sendmail的时候会很慢 

 # vim /etc/sysconfig/network

HOSTNAME=zzu.com

# vim /etc/hosts

192.168.111.20 zzu.com

最好重新启动让主机名生效,这里还有简洁的一招就是临时修改主机名

 # hostname zzu.com

Step 3:DNS服务器的搭建,使用yum分别将Bind-9.3.6-4.P1.el5、bind-chroot- 9.3.6-4.P1.el5、caching-nameserver安装好,bind的配置文件在/var/named/chroot/etc/目录下,官方给了一个样例文件,这里直接拷贝修改即可 

# cd /var/named/chroot/etc/

# cp -p named.caching-nameserver.conf named.conf //这里读者一定要加上“-p”参数将文件的权限带过来

# vim named.conf //修改以下几选项(读者如果复制粘贴的话要注意符号)

listen-on port 53 { any; };

allow-query { any; };

allow-query-cache { any; };

match-clients { any; };

match-destinations { any; };

然后编辑区域配置文件

 # vim named.rfc1912.zones

zone "zzu.com" IN {

type master;

file "zzu.com.zone";

allow-update { none; };

};

之后创建区域文件

# cd /var/named/chroot/var/named/

# cp -p localhost.zone zzu.com.zone

# vim zzu.com.zone

$TTL 86400

@ IN SOA ns.zzu.com. root (

42 ; serial (d. adams)

3H ; refresh

15M ; retry

1W ; expiry

1D ) ; minimum

@ IN NS ns.zzu.com.

ns IN A 192.168.111.20

mail IN A 192.168.111.20

pop3 IN CNAME mail

smtp IN CNAME mail

@ IN MX 10 mail

这里可以看到小编的MX记录了吧

接下来启动named服务

 # service named start //如果启动失败要读者要认真看日志,最常见的错误就是符号问题或者时文件的权限问题

将服务器的域名解析服务器指向192.168.111.20

 # vim /etc/resolv.conf

nameserver 192.168.111.20

在服务器测试看看可以使用

 # nslookup

clip_image006

好啦,到这里dns服务器计算搭建完了

Step 4:Sendmail发送服务器的搭建 

# yum install sendmail

# yum install sendmail-cf //实现sendmail.mc转向sendmail.cf

sendmail的配置文件在/etc/mail目录下,这里会涉及到修改access(用于实现中继,修改完后会转为)、local-host-names(设置sendmail承认的主机名)、sendmail.mc(配置文件,配置完成之后在sendmail-cf工具的帮助下自动转为sendmail.cf)

 # vim access //添加一下两行,具体的解释小编在后面的安全性会介绍到

Connect:192.168.111 RELAY

zzu.com OK

# vim local-host-names //添加本机主机名即可

zzu.com

# vim sendmail.mc //找到116行,修改成以下内容

DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

看到了吧,smtp协议,小编将监听地址改为0.0.0.0,两块网卡都能够监听到

到这里发送服务器就算配置完成了,启动sendmail服务并查看端口的监听状态

 # service sendmail start

# netstat –tupln | grep sendmail

clip_image008

Step 5:Dovecot接收服务器的搭建

 # yum install dovecot

dovecot的配置文件在/etc目录下叫dovecot.conf读者这里不用修改即可使用

启动dovecot服务并查看端口监听状态

 # service dovecot start

# netstat –tupln |grep dovecot

clip_image010

到这里单边的为实现一个公司内部能邮件通讯的无加密的简单电邮系统就搭建完成了

邮件系统还要提供合法的账户给用户通讯使用

 # useradd user1

# passwd user1

 

# useradd user2

# passwd user2

Step 6:客户端(MUA)配置实现

小编这里的邮件客户端用的是微软的outlook

第一步修改网卡参数

clip_image012

第二步创建账户

clip_image014

clip_image016

clip_image018

clip_image020

clip_image022

clip_image024

clip_image026

clip_image028

clip_image030

针对于user2用户的主机配置大致和user1的相同

网卡参数

clip_image032

添加账户的部分将user1改为user2即可

Step 7:客户端之间相互邮件通讯试试

User1发信给user2

clip_image034

在服务器端监控sendmail日志

 # tail –f /var/log/maillog

clip_image036

这只是发到服务器啦,user2还要接收一下啦

clip_image038

clip_image040

打开看看

clip_image042

再看看服务器日志

clip_image044

用user2 回复一下啦

clip_image046

在user1上收一下

clip_image048

监控日志

clip_image050

这样一来,公司一内部邮件通信无障碍了吧

Project 2:不同区域邮件互通实现

实现两个公司相互通信

这里就要涉及到邮件中继的啦,邮件中继(SMTP Relay Service)指在不改变用户邮件地址(发件人)的前提下,将用户邮件通过多链路SMTP邮件转发服务器投递到收件人邮件服务器。

公司二服务器配置

Step 1:首先是网卡参数的配置,服务器是有两块网卡的,eth0是内网卡,eth1是外网卡,网卡参数的配置文件在/etc/sysconfig/network-scripts/目录下,分别为ifcfg-eth0和ifcfg-eth1

 # vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改添加一下内容即可

BOOTPROTO=static

IPADDR=192.168.112.20

NETMASK=255.255.255.0

# vim /etc/sysconfig/network-scripts/ifcfg-eth1

BOOTPROTO=static

IPADDR=10.0.0.2

NETMASK=255.255.255.0

修改完成之后重新启动网络服务

 # service network restart

因为两块网卡涉及到网络数据转发问题,所以要打开数据转发选项

 # vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

还要添加默认路由能让两个公司之间互通

 # route add –net default gw 10.0.0.2

要注意的是,这里的路由是临时路由每当网络服务重启的时候都要重新手工添加,当然读者也可以添加永久静态路由

Step 2:修改主机名,sendmail会检查主机名的设置,这一步很重要,不然后面启动sendmail的时候会很慢

 # vim /etc/sysconfig/network

HOSTNAME=ruanjian.com

# vim /etc/hosts

192.168.112.20 ruanjian.com

最好重新启动让主机名生效,这里还有简洁的一招就是临时修改主机名

 # hostname ruanjian.com

Step 3:DNS服务器的搭建,使用yum分别将Bind-9.3.6-4.P1.el5、bind-chroot- 9.3.6-4.P1.el5、caching-nameserver安装好,bind的配置文件在/var/named/chroot/etc/目录下,官方给了一个样例文件,这里直接拷贝修改即可

 # cd /var/named/chroot/etc/

# cp -p named.caching-nameserver.conf named.conf //这里读者一定要加上“-p”参数将文件的权限带过来

# vim named.conf //修改以下几选项(读者如果复制粘贴的话要注意符号)

listen-on port 53 { any; };

allow-query { any; };

allow-query-cache { any; };

match-clients { any; };

match-destinations { any; };

然后编辑区域配置文件

 # vim named.rfc1912.zones

zone "ruanjian.com" IN {

type master;

file "ruanjian.com.zone";

allow-update { none; };

 

};

之后创建区域文件

 # cd /var/named/chroot/var/named/

# cp -p localhost.zone ruanjian.com.zone

# vim ruanjian.com.zone

$TTL 86400

@ IN SOA ns. ruanjian.com. root (

42 ; serial (d. adams)

3H ; refresh

15M ; retry

1W ; expiry

1D ) ; minimum

@ IN NS ns. ruanjian.com.

ns IN A 192.168.112.20

mail IN A 192.168.112.20

pop3 IN CNAME mail

smtp IN CNAME mail

@ IN MX 10 mail

这里可以看到小编的MX记录了吧

接下来启动named服务

# service named start //如果启动失败要读者要认真看日志,最常见的错误就是符号问题或者时文件的权限问题

将服务器的域名解析服务器指向192.168.112.20

 # vim /etc/resolv.conf

nameserver 192.168.112.20

在服务器测试看看可以使用

 # nslookup

clip_image052

好啦,到这里dns服务器计算搭建完了

Step 4:Sendmail发送服务器的搭建

 # yum install sendmail

# yum install sendmail-cf

sendmail的配置文件在/etc/mail目录下,这里会涉及到修改access(用于实现中继,修改完后会转为)、local-host-names(设置sendmail承认的主机名)、sendmail.mc(配置文件,配置完成之后在sendmail-cf工具的帮助下自动转为sendmail.cf)

 # vim access

Connect:192.168.112 RELAY

ruanjian.com OK

# vim local-host-names //添加本机主机名即可

ruanjian.com

# vim sendmail.mc //找到116行,修改成以下内容

DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

看到了吧,smtp协议,小编将监听地址改为0.0.0.0,两块网卡都能够监听到

到这里发送服务器就算配置完成了,启动sendmail服务并查看端口的监听状态

 # service sendmail start

# netstat –tupln | grep sendmail

clip_image054

Step 5:Dovecot接服务器的搭建

 # yum install dovecot

dovecot的配置文件在/etc目录下叫dovecot.conf读者这里不用修改即可使用

启动dovecot服务并查看端口监听状态

 # service dovecot start

# netstat –tupln |grep dovecot

clip_image056

到这里单边的为实现一个公司内部能邮件通讯的无加密的简单电邮系统就搭建完成了

邮件系统还要提供合法的账户给用户通讯使用

 # useradd user1

# passwd user1

# useradd user2

# passwd user2

客户端的配置与公司一客户端配置相似,这里小编就不细讲了

Step 6:开启两端服务器的邮件中继功能,修改sendmail的access文件

a) 公司一服务器,在access文件添加一下几行

 Connect:192.168.111 RELAY

zzu.com OK

ruanjian.com RELAY

b) 公司二服务器,在access文件添加一下几行

 Connect:192.168.112 RELAY

zzu.com RELAY

ruanjian.com OK

还有要注意的是,原来单方邮局内的用户是可以相互邮件通信的,当邮局收到客户端发往其他邮局信件的时候,并不知道另一方邮局是谁,如何解决呢,这里用到DNS区域传输,让两个邮局之间的区域相互传输就是了,这样当一个区域的邮局问另一个邮局在哪的时候就知道了对方邮局的IP,这还不算完事,当信件发到对方服务器,sendmail是根据域名来接受信件的,所以对方邮局还要做反向DNS解析。

配置对于两端服务器是相互的

Step 7:公司一服务器,DNS服务器增加配置

 # vim /var/named/chroot/etc/named.conf //在options节点中添加

forwarders { 10.0.0.2; };

# vim /var/named/chroot/etc/named.rfc1912.zones //添加以下区域

zone "112.168.192.in-addr.arpa" IN {

type master;

file "192.168.112.local";

allow-update { none; };

};

zone "0.0.10.in-addr.arpa" IN {

type master;

file "10.0.0.local";

allow-update { none; };

};

两个反向区域文件的内容

 # cd /var/named/chroot/var/named/

# vim 192.168.112.local

$TTL 86400

@ IN SOA 112.168.192. root.localhost. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS 112.168.192.

20 IN PTR mail.ruanjian.com.

# vim 10.0.0.loacl

$TTL 86400

@ IN SOA 0.0.10. root.localhost. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS 0.0.10.

1 IN PTR mail.zzu.com.

2 IN PTR mail.ruanjian.com.

Step 8:公司二服务器,DNS服务器增加配置

 # vim /var/named/chroot/etc/named.conf //在options节点中添加

forwarders { 10.0.0.1; };

# vim /var/named/chroot/etc/named.rfc1912.zones //添加以下区域

zone "111.168.192.in-addr.arpa" IN {

type master;

file "192.168.111.local";

allow-update { none; };

};

zone "0.0.10.in-addr.arpa" IN {

type master;

file "10.0.0.local";

allow-update { none; };

};

两个个反向区域文件的内容

 # cd /var/named/chroot/var/named/

# vim 192.168.111.local

$TTL 86400

@ IN SOA 111.168.192. root.localhost. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS 111.168.192.

20 IN PTR mail.zzu.com.

# vim 10.0.0.loacl

$TTL 86400

@ IN SOA 0.0.10. root.localhost. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS 0.0.10.

1 IN PTR mail.zzu.com.

2 IN PTR mail.ruanjian.com.

Step 9:测试两公司之间员工通信情况

公司一的user1用户给公司二的user1用户发信

clip_image058

收到了吧

clip_image060

回复邮件试试

clip_image062

公司一的user1收信看看

clip_image064

成功了吧

Project 3:实现邮件的安全通信

经过上面的两大步实验,小编已经实现了不同邮局之间的邮件通信,可是安全么,还记得小编在最先前提的smtp和pop3都是明文传输的么,有多可怕,小编这里就以实验证明,小编就来在公司一服务器的eth0接口抓一下数据包来看看,这里用到的软件是linux5.4自带的wireshark,如果没安装的话可以使用yum安装啦

因为这里sendmail的发送服务器,在发送邮件的时候是没有认证的,没有账号和密码,那小编就不抓smtp协议的数据啦,抓一下pop3的数据吧

 # tshark -ni eth0 -R "tcp.port eq 110" //pop3使用的是tcp110端口

clip_image066

看到了吧用户名和密码都抓到了,这还了得,为了解决安全隐患,人们加入了ssl来帮助解决

Smtp+ssl=smtps 465端口

Pop3+ssl=pop3s 995端口

Imap+ssl=imaps 993端口

要想实现ssl,那就得有根CA啦,这个CA的搭建小编在前面的博客中已经使用N多次了,这里两边的服务器都得做

公司一服务器以及客户端的配置

Step 1:根CA的搭建

 # cd /etc/pki/

# vim tls/openssl.cnf

clip_image068

clip_image070

clip_image072

然后就是三个文件夹,两个文件

 # cd /etc/pki/CA

# mkdir certs crl newcerts

# touch index.txt serial

# echo "01" >>serial

生成私钥

 # openssl genrsa 1024 >> private/cakey.pem

# chmod 600 private/cakey.pem
 

提取证书

# openssl req –new –key private/cakey.pem –x509 –out cacert.pem

clip_image074

Step 2:为smtp生成证书

 # mkdir /etc/mail/certs/

# cd /etc/mail/certs/

# openssl genrsa 1024 > sendmail.key

# chomd 600 sendmail.key

# openssl req –new –key sendmail.key –out sendmail.csr

clip_image076

这里的域名要和DNS记录里的对应

 # openssl ca -in sendmail.csr -out sendmail.crt

Step 3:Smtp+ssl

 # cd /etc/mail/

# vim sendmail.mc

clip_image078

打开smtps协议

clip_image080

重新启动sendmail服务

 # service sendmail restart

查看监听端口

clip_image082

Step 4:为pop3生成证书

 # mkdir –p /etc/dovecot/certs

# cd /etc/dovecot/certs

# openssl genrsa 1024 > dovecot.key

# chomd 600 dovecot.key

# openssl req -new -key dovecot.key -out pop3.csr

clip_image084

这里的域名要和DNS记录里的对应

 # openssl ca -in pop3.csr -out pop3.crt

Step 5:Pop3+ssl

 # vim /etc/dovecot.conf

clip_image086

Step 6:公司一客户机单边测试,user1和user2都使用smtps和pop3s进行邮件通信

修改user1的账户属性

clip_image088

user2的账户属性和user1相同

使用user1向user2发信

clip_image090

clip_image092

user2收信看看

clip_image094

同时服务器使用wireshark抓pop3s的包看看

clip_image096

Step 7:为imap生成证书

小编在以前配置DNS的时候别名记录少加了一条别名记录,读者加上啦(zzu.com.zone),不然证书和域名对不上号,会出错的

 imap IN CNAME mail

# cd /etc/dovecot/certs

# openssl req -new -key dovecot.key -out imap.csr

clip_image098

 # openssl ca -in imap.csr -out imap.crt

Step 8:Imap+ssl

 # vim /etc/dovecot.conf //添加

ssl_cert_file = /etc/dovecot/certs/imap.crt

ssl_key_file = /etc/dovecot/certs/dovecot.key

重新启动dovecot服务

 # service dovecot restart

为了测试,在服务器端添加user3

 # useradd user3

# passwd user3

Step 9:在客户机建立接收账户user3

clip_image100

clip_image102

clip_image104

clip_image106

clip_image108

修改user3的属性

clip_image110

clip_image112

保存之后

clip_image114

选择是

clip_image116

使用这个证书

clip_image118

然后转到收件箱

clip_image120

因为目前没有信件就是空的,现在让user2用户给user3用户发信件

clip_image122

user3用户这边不用手动收信就能接收到信件,打开看看

clip_image124

成功了吧

如果公司一邮件服务器以及客户端的搭建读者你已经完全的掌握,那么“比着葫芦画瓢“,公司二的邮件服务器以及客户端的配置也是很容易的了,这些任务都交给读者啦,算是一种考验吧

小编这里将验证结果附上,公司一的user1同公司二的user1通信使用smtps和pop3s,公司一的user2和公司二的user2通信使用smtps和imaps

公司一的user1发信给公司二的user1

clip_image126

收到信件

clip_image128

公司二的user1回信给公司一的user1

clip_image130

公司一的user1收信

clip_image132

公司一的user2 发信给公司二的user2

clip_image134

公司二的user2收到信件

clip_image136

回复公司一的user2

clip_image138

公司一的user2收到信件

clip_image140

好啦,到这里,证书配合协议的使用已经全部实现啦,这样一来信件的信息都是加密的啦

Step 10:账号认证机制实现

能看到这里的读者,说明读者你很有耐心啊,我表示当小编写到这里的时候已经快崩溃啦,哎,不过小编有读者的支持,加油啦。

读者你估计在上面的实验中会发现,当我们有smtp或者smtps协议发信的过程中是不是没有账号认证啊,读者会问了,那我们建立了账号了啊,咋会没有账号认证呢,在细细想想,是不是我们在接收信件的过程中有账户的认证过程,这个问题很严重啊,想过没有,一个在服务器不存在的用户也能在客户端发信呢,那么小编来试一试就成了

在公司一的客户端随便建立一个zzu.com域的账户,然后试着发信给两个公司的已经存在的用户试试

clip_image142

clip_image144

那user1@zzu.com用户能不能收到呢

clip_image146

哎呦我去,居然收到啦,这还了得,再送给公司二的user1@ruanjian.com

clip_image148

clip_image150

再到公司二的客户端去看看user1@ruanjain.com的收信情况

clip_image152

这下我表示无语啦,这还了得,这样垃圾邮件不就泛滥啦,而且还找不到来源,咋办呢,别急我们可以结合sasl协议(简单安全认证层)来解决这个问题啦,在linux 5.4的光盘镜像中有一个软件叫cyrus-sasl,使用这个东东就能解决账号认证问题了,小编这里直接使用yum安装一下,改软件的配置文件叫Sendmail.conf,不过不用修改啦,服务控制叫saslauthd

 # yum install cyrus-sasl

# rpm -ql cyrus-sasl //查询一下软件产生的文件

clip_image154

在sendmail配置文件中开启账号认证功能

 # vim /etc/mail/sendmail.mc

打开52和53行的注释

clip_image156

clip_image158

之后重新启动sendmail服务

 # service sendmail restart

启动sasl服务

 # service saslauthd start

之后再使用那个不合法的用户test给user1@zzu.com发邮件试试

clip_image160

这里说明要使用账号认证,那么小编就给test账户使用认证功能啦

clip_image162

再试试

应该会弹出以下界面

clip_image164

当你点击确定登录的时候会发现怎么都登录不上,但是其他合法的用户修改完用户认证后依然能够正常使用

clip_image166

clip_image168

之后发信给其他用户就能正常使用了,这里读者可能会问了smtps不是使用的465端口么,你真是把小编问倒了,这个问题小编我也没解决啊,不过读者你放心啦,小编一定会找到一个好的解决方案啦,目前就先这么着吧

至于公司二服务器的配置也是相同的啦

OK啦,算是大功告成了,非常感谢读者能看完这篇博客,你的支持将是小编无限的动力啦,敬请关注小编的其他博文~\(≧▽≦)/~啦啦啦