00:00/00:00

本章节已编写及校对完毕,现有奖征集建议、若您发现本章中有错别字或补充欢迎联系刘遄老师QQ:5604241。

章节概述:

电子邮件系统是咱们日常生活中最常用的网络服务之一,本章节将从电子邮件系统的创始起源故事开始引入主题,让同学们了解熟悉SMTP、POP3、IMAP4等常见的电子邮件协议、理解MUA、MTA、MDA三种服务角色的作用,完整演示在Linux系统中使用Postfix和Dovecot服务程序配置电子邮件系统服务的方法,重点讲解常用的配置文件参数,并且结合Bind服务程序提供的DNS域名解析服务来验证客户主机与服务器之间的邮件收发功能,章节最后还增添了电子邮件系统中设置用户别名的内容,帮助同学们在今后生产环境中更好的管理控制邮件帐号及邮箱地址,这是一项非常实用的技术。

15.1 电子邮件系统

20世纪60年代正处在美苏两国的冷战时期,美国军方认为应该在科技技术上持续占据领先地位,这样有助于在未来的战争中取得优势,因此便由美国国防部资助并发起了一项叫做ARPANET的科研项目,这项科研项目即是大家所熟知的阿帕网计划,也就是当今互联网技术的雏形,阿帕网计划实现了人类首次意义上的封包交换网络,但很快在1971年就遇到了严峻问题,如图15-1所示,参于阿帕网科研项目的科学家工作在美国不同地区,甚至还因为时差的影响而不能及时的分享各自的研究成果,因此科学家们迫切的需要一种能够借助于网络且建立在计算机之间的传输数据的方法。

虽然用咱们《Linux就该这么学》书籍的第10章和第11章学习的WEB网站服务或FTP文件传输服务也能够实现数据交换,但这些传输方式都要像打电话一样,双方都必须同时在线才能完成传输工作,如果对方的主机宕机或科研人员临时离开,就有可能错过某些科研结果了。好在当时麻省理工学院的Ray Tomlinson博士也参与到了阿帕网计划的科研项目中,他觉得有必要设计一种类似于“信件”的传输服务,准备一个信箱,这样即便对方临时不在线也能够完成数据的接收,当对方上线后再来处理就可以了,于是Ray Tomlinson博士用了将近一年的时间就完成了Email电子邮件的设计,并在1971年秋天使用SNDMSG软件向自己的另一台电脑发送出了人类历史上第一封Email电子邮件,它标志着邮件系统在人类互联网中诞生了。

图15-1 1971年阿帕网科研项目运营情况历史资料图片

既然要在互联网中给其他人发送电子邮件,那么对方用户的昵称代号必须是具有唯一性的,否则这封邮件可能会同时发给多个重名的用户,也或者干脆谁都收不到了。因此当时Ray Tomlinson博士决定选择用“姓名@电脑主机名称”的格式来规范电子邮箱的名称,而选择用@符号做间隔符的原因其实也很简单,因为Ray Tomlinson博士觉得人类的姓名和电脑主机名称中应该不会有这么一个@符号吧~所以具有了相对的唯一性,就选择了这个符号!~

电子邮件系统的传输基于邮件协议完成,常见的邮件协议包括SMTP简单邮件传输协议,用于发送和中转发出的电子邮件,占用服务器的25/TCP端口号,POP3第三版邮局协议,用于将服务器上把邮件存储到本地主机,占用服务器的110/TCP端口号,IMAP4第四版互联网信息访问协议,用于在本地主机上访问邮件,占用服务器的143/TCP端口号。

在电子邮件系统服务中用于为用户收发邮件的服务器被叫做MUA用户代理(Mail User Agent),另外既然电子邮件系统能够让客户不在线的情况下依然可以完成数据传输,那肯定要有一个用于帮助用户临时保存邮件数据的“信箱”服务器吧,这个用于保存用户邮件的服务器叫做MDA邮件投递代理(Mail Delivery Agent),它的工作主要是将来自于MTA的邮件保存到本机的收件箱中,而不同的电子邮件服务供应商之间发送邮件还要经过MTA邮件传输代理(Mail Transfer Agent)的转发处理,它的工作就是将来自于MUA的邮件转发至合适的MTA服务器中,例如从新浪邮箱发送一封邮件到谷歌邮件,那么电子邮件传送到您手中大致经过了如图15-2所示的过程。

邮件投递工程

图15-2 电子邮件收发流程拓扑图

总结来说,一般的网络服务程序传输信息就像拨打电话一样,需要对方当前也保持在线,否则会报错连接超时,而电子邮件系统的用户在发送邮件后就不必需要等待投递工作完成再下线,因为如果对方主机宕机或临时离开了,那么发件服务器就会把要发送的内容自动的暂时保存到本地,检测到对方服务器恢复后会立即再次投递,这期间一般无需运维人员操作。另外如果同学们有兴趣学完之后在生产环境中部署一个企业级的电子邮件系统,刘遄老师给大家总结了四点需要注意的事项,首先是反垃圾与反病毒模块,它能够很有效的阻止垃圾邮件或病毒邮件对企业邮箱的干扰,其次是邮件加密,有效保护企业内邮件内容不被骇客盗取和篡改,而邮件监控审核模块则是很好的监管措施,有效的监控全体职员邮件内容中有无敏感词,透露企业资料等违规行为,最后就是要强调下稳定性了,电子邮件系统的稳定性至关重要,运维人员应做到保证电子邮件系统的稳定运行,并及时做好防范DDOS分布式拒绝服务攻击的准备。

15.2 部署基础电子邮件系统

一个最基础的电子邮件系统肯定要包括有发件服务和收件服务,因此咱们需要使用基于SMTP协议的Postfix服务程序来提供发件服务功能,以及用基于POP3协议的Dovecot服务程序来提供收件服务功能,这样客户端在使用类似于OutLook Express或Foxmail的客户端服务程序时就可以正常的收发信件了,电子邮件系统的工作拓扑如图15-3所示。

邮局系统流程图

图15-3 电子邮件系统的工作拓扑图

红帽RHEL5、红帽RHEL6及诸多早期Linux系统中默认使用的发件服务是由sendmail服务程序来提供的,而在红帽RHEL7系统中已经替换成了Postfix服务程序,Postfix相比Sendmail给我最大的感觉就是配置变得简单了,减少了很多不必要的配置步骤,而且在稳定性、并发量等方面确实也有很大的改进,刘遄老师相信Postfix服务程序会一直保留下去的,同学们要好好学习啦~

咱们生活中的邮箱地址一般都是类似于“root@linuxprobe.com” 这样的样子,也就是按照“用户名@主机地址(域名)”格式规范的,如果给我一串“root@192.168.10.10”的信息,刘遄老师可能猜不到是个邮箱地址,觉得更像是SSH协议的连接信息吧,因此咱们为了更好的检验配置电子邮件系统的效果,需要先把bind服务程序部署起来,为咱们的服务器和客户端提供DNS域名解析的服务。

第1步:配置服务器主机名称,需要保证咱们的服务器主机名称与发信域名保持一致:

[root@linuxprobe ~] # vim /etc/hostname
mail.linuxprobe.com
[root@linuxprobe ~] # hostname
mail.linuxprobe.com

第2步:为电子邮件系统提供域名解析,由于咱们已经在第十三章中详细学习过bind-chroot服务程序的配置方法,因此刘遄老师在此处只提供一下主配置文件、区域配置文件和域名数据文件的配置内容,其余配置步骤请同学们自行完成,忘记了的话就翻回去看下吧~

 [root@linuxprobe ~]# cat /etc/named.conf
 1 //
 2 // named.conf
 3 //
 4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
 5 // server as a caching only nameserver (as a localhost DNS resolver only).
 6 //
 7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
 8 //
 9 
 10 options {
 11 listen-on port 53 { any; };
 12 listen-on-v6 port 53 { ::1; };
 13 directory "/var/named";
 14 dump-file "/var/named/data/cache_dump.db";
 15 statistics-file "/var/named/data/named_stats.txt";
 16 memstatistics-file "/var/named/data/named_mem_stats.txt";
 17 allow-query { any; };
 18 
 ………………省略部分输出信息………………
[root@linuxprobe ~]# cat /etc/named.rfc1912.zones
zone "linuxprobe.com" IN {
type master;
file "linuxprobe.com.zone";
allow-update {none;};
};
[root@linuxprobe ~]# cat /var/named/linuxprobe.com.zone
$TTL 1D
@ IN SOA linuxprobe.com. root.linuxprobe.com. (
0;serial
1D;refresh
1H;retry
1W;expire
3H;minimum
NS ns.linuxprobe.com.
ns IN A 192.168.10.10
@ IN MX 10 mail.linuxprobe.com.
mail IN A 192.168.10.10

请同学们记得配置好DNS服务后自行重启一下bind服务程序,这样咱们电子邮件系统所对应的主机名即为mail.linuxprobe.com,而邮件域为@linuxprobe.com,然后将服务器网卡的DNS地址修改成本地IP地址,如图15-4所示:

图15-4 配置服务器网卡DNS地址

15.2.1 配置Postfix服务程序

Postfix是一款由IBM集团出资研发的免费开源电子邮件服务程序,能够很好的兼容Sendmail服务程序,也就是说Sendmail用户可以很方便的迁移到新的服务上面,Postfix服务的收件、发件性能确实强过Sendmail服务,并且能够自动增加、减少进程的数量来保证电子邮件系统的高性能与稳定性,另外Postfix服务程序是由诸多的小模块组成,每个小模块都可以完成特定的功能,因此同学们在今后的生产工作环境中可以灵活搭配它们。

第1步:安装Postfix服务程序,当然这一步在红帽RHEL7系统中是多余的,刘遄老师把步骤写下来的目的是为了让同学们读完这本《Linux就该这么学》后不仅能够掌握红帽RHEL系统,还能立即上手fedora、centos等等主流的Linux系统,当那些系统没有Postfix服务程序的时候也不用慌~对了,最后记得把iptables防火墙给禁用掉,否则会导致外部用户访问不了咱们的电子邮件系统。

[root@linuxprobe ~]# yum install postfix
Loaded plugins: langpacks, product-id, subscription-manager
rhel7 | 4.1 kB 00:00
(1/2): rhel7/group_gz | 134 kB 00:00
(2/2): rhel7/primary_db | 3.4 MB 00:00
Package 2:postfix-2.10.1-6.el7.x86_64 already installed and latest version
Nothing to do
[root@linuxprobe ~]# systemctl disable iptables

第2步:配置Postfix服务程序,对于初次看到Postfix服务程序主配置文件(/etc/postfix/main.cf)的同学一定会被吓到吧,竟然足足有679行左右呢,但其实不必担心,这里面绝大多数的内容依然是注释信息,而且刘遄老师一直在强调Linux系统正确的学习方法,负责任的好老师不应只是做书本的搬运工,更应该做一名优质内容的提炼着,因此刘遄老师翻遍了配置参数介绍,以及结合运维工作经验最终给同学们总结出了最应该掌握的七个参数:

参数 作用
myhostname 邮局系统的主机名。
mydomain 邮局系统的域名。
myorigin 从本机寄出邮件的域名名称。
inet_interfaces 监听的网卡接口。
mydestination 可接收邮件的主机名或域名。
mynetworks 设置可转发那些主机的邮件。
relay_domains 设置可转发那些网域的邮件

Postfix服务程序总共需要修改五处,首先是在约76行左右定义有一个名称为myhostname的变量,用来保存咱们服务器的主机名称,记住这个变量的名称,下边参数需要调用它:

[root@linuxprobe ~] # vim /etc/postfix/main.cf
# INTERNET HOST AND DOMAIN NAMES
# 
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
#myhostname = host.domain.tld
myhostname = mail.linuxprobe.com

第二处是约83行左右定义有一个名称为mydomain的变量,用来保存邮件域的名称,同学们也要记住这个变量名称,下面来调用它:

# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component.
# $mydomain is used as a default value for many other configuration
# parameters.
#
mydomain = linuxprobe.com

第三处是约99行左右调用前面的mydomain变量,用来定义寄出邮件的域,调用变量的好处是避免重复写入信息以及便于今后统一进行修改:

# SENDING MAIL
# 
# The myorigin parameter specifies the domain that locally-posted
# mail appears to come from. The default is to append $myhostname,
# which is fine for small sites. If you run a domain with multiple
# machines, you should (1) change this to $mydomain and (2) set up
# a domain-wide alias database that aliases each user to
# user@that.users.mailhost.
#
# For the sake of consistency between sender and recipient addresses,
# myorigin also specifies the default domain name that is appended
# to recipient addresses that have no @domain part.
#
#myorigin = $myhostname
myorigin = $mydomain

第四处是约116行左右定义的网卡监听地址,您可以指定要由服务器的那些IP地址对外提供电子邮件服务,也可以干脆写成all,代表所有网卡都能向客户提供电子邮件服务:

# The inet_interfaces parameter specifies the network interface
# addresses that this mail system receives mail on. By default,
# the software claims all active interfaces on the machine. The
# parameter also controls delivery of mail to user@[ip.address].
#
# See also the proxy_interfaces parameter, for network addresses that
# are forwarded to us via a proxy or network address translator.
#
# Note: you need to stop/start Postfix when this parameter changes.
#
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
inet_interfaces = all

最后第五处是约164行左右定义的可接收邮件的主机名或域名列表,此处咱们可以直接调用前面两个定义好的myhostname,mydomain变量即可(当然同学们不想调用变量,直接写名称信息的话也可以):

# The mydestination parameter specifies the list of domains that this
# machine considers itself the final destination for.
#
# These domains are routed to the delivery agent specified with the
# local_transport parameter setting. By default, that is the UNIX
# compatible delivery agent that lookups all recipients in /etc/passwd
# and /etc/aliases or their equivalent.
#
# The default is $myhostname + localhost.$mydomain. On a mail domain
# gateway, you should also include $mydomain.
#
# Do not specify the names of virtual domains - those domains are
# specified elsewhere (see VIRTUAL_README).
#
# Do not specify the names of domains that this machine is backup MX
# host for. Specify those names via the relay_domains settings for
# the SMTP server, or use permit_mx_backup if you are lazy (see
# STANDARD_CONFIGURATION_README).
#
# The local machine is always the final destination for mail addressed
# to user@[the.net.work.address] of an interface that the mail system
# receives mail on (see the inet_interfaces parameter).
#
# Specify a list of host or domain names, /file/name or type:table
# patterns, separated by commas and/or whitespace. A /file/name
# pattern is replaced by its contents; a type:table is matched when
# a name matches a lookup key (the right-hand side is ignored).
# Continue long lines by starting the next line with whitespace.
#
# See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
#
mydestination = $myhostname, localhost.$mydomain, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydestination = $myhostname, $mydomain

第3步:创建电子邮件系统的登陆帐号,Postfix与Vsftpd服务程序一样都可以调用本地系统帐号和密码,因此在本地进行常规帐号创建即可,最后再把配置妥当的postfix服务重启,加入到开机启动项中就大功告成了!~

[root@linuxprobe ~] # useradd boss
[root@linuxprobe ~] # echo "linuxprobe" | passwd --stdin boss
Changing password for user boss. passwd: all authentication tokens updated successfully.
[root@linuxprobe ~] # systemctl restart postfix
[root@linuxprobe ~] # systemctl enable postfix
ln -s '/usr/lib/systemd/system/postfix.service' '/etc/systemd/system/multi-user.target.wants/postfix.service'
15.2.2 配置Dovecot服务程序

Dovecot是一款能够为Linux系统提供IMAP和POP3电子邮件服务的开源软件程序,拥有极高的安全性,并且配置起来也十分简单,执行效率很快,而且占用的服务器硬件资源也较少,是非常推荐的电子邮件系统的收件服务软件。

第1步:安装Dovecot服务程序软件包,请同学们先自行配置yum软件仓库、挂载光盘镜像到指定目录,然后输入要安装的dovecot软件包名称即可:

[root@linuxprobe ~]# yum install dovecot
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel | 4.1 kB 00:00 
Resolving Dependencies
--> Running transaction check
---> Package dovecot.x86_64 1:2.2.10-4.el7 will be installed
--> Processing Dependency: libclucene-core.so.1()(64bit) for package: 1:dovecot-2.2.10-4.el7.x86_64
--> Processing Dependency: libclucene-shared.so.1()(64bit) for package: 1:dovecot-2.2.10-4.el7.x86_64
--> Running transaction check
---> Package clucene-core.x86_64 0:2.3.3.4-11.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package Arch Version Repository Size
================================================================================
Installing:
 dovecot x86_64 1:2.2.10-4.el7 rhel 3.2 M
Installing for dependencies:
 clucene-core x86_64 2.3.3.4-11.el7 rhel 528 k
Transaction Summary
================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 3.7 M
Installed size: 12 M
Is this ok [y/d/N]: y
Downloading packages:
--------------------------------------------------------------------------------
Total 44 MB/s | 3.7 MB 00:00 
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
 Installing : clucene-core-2.3.3.4-11.el7.x86_64 1/2 
 Installing : 1:dovecot-2.2.10-4.el7.x86_64 2/2 
 Verifying : 1:dovecot-2.2.10-4.el7.x86_64 1/2 
 Verifying : clucene-core-2.3.3.4-11.el7.x86_64 2/2 
Installed:
 dovecot.x86_64 1:2.2.10-4.el7 
Dependency Installed:
 clucene-core.x86_64 0:2.3.3.4-11.el7 
Complete!

第2步:配置部署Dovecot服务程序,对Dovecot服务程序的主配置文件需要修改2-3处,首先是在主配置文件中的约24行左右,把Dovecot服务程序支持的电子邮件协议修改为imap、pop3和lmtp,然后在该行的下面添加一行参数来允许客户使用明文进行密码验证,这是由于Dovecot服务程序为了保证电子邮件系统安全而默认强制客户必须使用加密方式进行登陆,而当前由于咱们没有加密系统的支持,因此需要添加参数来允许客户的明文登陆行为。

[root@linuxprobe ~] # vim /etc/dovecot/dovecot.conf
# Protocols we want to be serving.
protocols = imap pop3 lmtp
disable_plaintext_auth = no

最后是在主配置文件中的约48行左右,设置允许登陆的网段地址,也就是说同学们可以在这里限制只有来自于某个网段的客户才能使用咱们的电子邮件系统,如果想允许所有人都能来使用,可以不用修改本条参数:

# Space separated list of trusted network ranges. Connections from these
# IPs are allowed to override their IP addresses and ports (for logging and
# for authentication checks). disable_plaintext_auth is also ignored for
# these networks. Typically you'd specify your IMAP proxy servers here.
login_trusted_networks = 192.168.10.0/24

第3步:配置邮件格式与存储路径,需要编辑dovecot服务程序单独的子配置文件,定义要将收到的邮件信息保存到服务器本地的路径,而这个路径默认已经是被定义好的,咱们只需要将此配置文件中第25行前面的#(井号)注释信息去掉即可:

[root@linuxprobe ~] # vim /etc/dovecot/conf.d/10-mail.conf
##
## Mailbox locations and namespaces
##
# Location for users' mailboxes. The default is empty, which means that Dovecot
# tries to find the mailboxes automatically. This won't work if the user
# doesn't yet have any mail, so you should explicitly tell Dovecot the full
# location.
#
# If you're using mbox, giving a path to the INBOX file (eg. /var/mail/%u)
# isn't enough. You'll also need to tell Dovecot where the other mailboxes are
# kept. This is called the "root mail directory", and it must be the first
# path given in the mail_location setting.
#
# There are a few special variables you can use, eg.:
#
# %u - username
# %n - user part in user@domain, same as %u if there's no domain
# %d - domain part in user@domain, empty if there's no domain
# %h - home directory
#
# See doc/wiki/Variables.txt for full list. Some examples:
#
# mail_location = maildir:~/Maildir
  mail_location = mbox:~/mail:INBOX=/var/mail/%u
# mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
………………省略部分输出信息………………

然后切换到该用户身份后在家目录中建立用于保存邮件的目录,记得重启一下服务并加入到开机启动项就完成了对Dovecot服务程序的全部配置部署步骤:

[root@linuxprobe ~] # su - boss
Last login: Sat Aug 15 16:15:58 CST 2015 on pts/1
[boss@mail ~]$ mkdir -p mail/.imap/INBOX
[boss@mail ~]$ exit
[root@linuxprobe ~] # systemctl restart dovecot 
[root@linuxprobe ~] # systemctl enable dovecot 
ln -s '/usr/lib/systemd/system/dovecot.service' '/etc/systemd/system/multi-user.target.wants/dovecot.service'
15.2.3 客户使用电子邮件系统

如何得知电子邮件系统已经能够正常收发信件了呢?咱们可以用目前最常用的Windows7系统来进行验证,刘遄老师选择用Windows系统自带的Outlook软件进行收发信件测试,当然或许很多同学都已经在工作中习惯Foxmail之类的软件来管理邮件,这都是没影响的,不论是什么邮件管理软件都能登陆到咱们的电子邮件系统中来。另外请同学们自行配置Windows7系统网卡参数以及DNS地址为服务器地址(192.168.10.10),这样才能正常的解析邮件域名,如图15-5所示:

主机名称 操作系统 IP地址
电子邮件系统及DNS服务器 红帽RHEL7操作系统 192.168.10.10
用户端主机 微软Windows7系统 192.168.10.30


配置客户机IP地址

图15-5 配置Windows7系统网卡参数

第1步:在Windows7系统中运行Outlook软件程序,软件下载后只要在Windows7系统中一路猛敲下一步就能安装好,初次运行软件会出现邮箱设置向导来帮助咱们填写相关电子邮箱登陆信息,如图15-6所示:

图15-6 运行Outlook 2007软件程序

第2步:开始配置电子邮件帐户,确认默认选项为“是(Y)”后点击下一步按钮,如图15-7所示。

图15-7 开始配置电子邮件帐户

第3步:选择电子邮件服务的协议类型,默认的POP3、IMAP协议就可以,因此可直接再次点击下一步按钮,如图15-8所示。

图15-8 选择电子邮件服务的协议类型

第4步:填写电子邮件帐号信息,此处的姓名可自定义,而电子邮件地址则应是服务器系统内的帐户名加上发件域,该用户的邮件密码也就是该用户在服务器内的登陆密码,填写好电子邮件帐户信息后可继续点击下一步按钮,如图15-9所示。

图15-9 填写电子邮件帐号信息

第5步:进行电子邮件服务登陆验证,由于咱们当前没有可用的SSL加密服务,因此在Dovecot服务程序配置文件中写入了一条参数来让客户可以使用明文登陆到电子邮件服务中,而Outlook软件默认会通过SSL加密协议尝试登陆到电子邮件服务,所以经过如图15-10所示的连接请求后会出现登陆失败的报错信息,此时只需再次点击下一步按钮,即可让Outlook软件通过非加密的方式验证登陆,如图15-11所示:

图15-10 进行电子邮件服务验证登陆

图15-11 使用非加密的方式进行电子邮件服务验证登陆

第6步:发送新邮件给其他邮箱,在Outlook软件中登陆成功后即可尝试写新邮件了,如图15-12所示,只需要在空白处点击鼠标右键,在弹出的菜单选项中点击新邮件按钮,然后如图15-13所示,填写收件人邮箱地址以及完整的邮件内容后点击发送按钮:

图15-12 发送新邮件给其他邮箱

图15-13 填写收件人邮箱地址以及完整的邮件内容

当同学们使用Outlook软件成功发送邮件后便可以在电子邮件服务器上面使用mail命令查看到新邮件提醒了,而如果想查看邮件的完整内容只需输入前面的编号即可。

[root@linuxprobe ~] # mail
Heirloom Mail version 12.5 7/5/10.Type ? for help.
"/var/mail/root": 3 messages 3 unread >
U 1 user@localhost.com Fri Jul 10 09:58 1631/123113 "[abrt] full crash r" 
U 2 Anacron Sat Aug 15 13:33 18/624 "Anacron job 'cron.dai" 
U 3 boss Sat Aug 15 19:02 118/3604 "Hello~" 
&> 3
Message 3:
From boss@linuxprobe.com Sat Aug 15 19:02:06 2015 
Return-Path:  
X-Original-To: root@linuxprobe.com 
Delivered-To: root@linuxprobe.com 
From: "boss" 
To: 
Subject: Hello~
Date: Sat, 15 Aug 2015 19:02:06 +0800
Content-Type: text/plain; charset="gb2312" 
当您收到这封邮件时,证明我的邮局系统实验已经成功!
> quit 
Held 3 messages in /var/mail/root

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

15.3 设置用户别名邮箱

用户别名功能是一项简便好用的邮件帐号伪装技术,咱们可以设置多个虚拟邮箱帐号来接受他人邮件,以保证真实邮件地址不被泄露,同时还可以用于接收多个邮箱的信件内容,例如咱们刚刚已经顺利的向root用户发送了邮件,那就再来向bin用户再发送一封邮件吧,如图15-14所示:
向用户bin发送邮件

图15-14 向服务器bin用户发送邮件

邮件发送后登陆到服务器,然后尝试切换至bin用户身份,但由于bin用户是系统帐号,默认的SHELL终端是/sbin/nologin,因此切换操作会被提示有当前帐号不可用的报错,但很奇怪的是超级管理员帐户提示收到了新邮件,使用mail命令后即查看到了这封原本要发送给bin用户的邮件已经被存放到了root用户的信箱中:

[root@linuxprobe ~]# su - bin 
This account is currently not available. 
[root@linuxprobe ~]# mail
Heirloom Mail version 12.5 7/5/10. 
Type ? for help. 
"/var/mail/root": 4 messages 4 new > 
U 1 user@localhost.com Fri Jul 10 09:58 1630/123103 "[abrt] full crash r" 
U 2 Anacron Wed Aug 19 17:47 17/619 "Anacron job 'cron.dai" 
U 3 boss Sat Aug 15 19:02 118/3604 "Hello~" U 
4 boss Wed Aug 19 18:49 116/3231 "你好,用户Bin。" 
&> 4 
Message 4: 
From boss@linuxprobe.com Wed Aug 19 18:49:05 2015 
Return-Path: <boss@linuxprobe.com> 
X-Original-To: bin@linuxprobe.com 
Delivered-To: bin@linuxprobe.com 
From: "boss" <boss@linuxprobe.com> 
To: <bin@linuxprobe.com>
Subject: 你好,用户Bin。 
Date: Wed, 19 Aug 2015 18:49:05 +0800 
Content-Type: multipart/alternative; boundary="----=_NextPart_000_0006_01D0DAAF.B9104E90" 
X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AdDabKrQzUHVBTgRQMaCtUsVtqfL1Q== Content-Language: zh-cn Status: R Content-Type: text/plain; charset="gb2312" 
这是一封发给用户Bin的文件。 
&> quit
Held 4 messages in /var/mail/root

那这真是好奇怪!这封明明发送给bin用户的邮件为什么会被root管理员帐户收到呢?其实这就是由邮件别名技术实现的,同学们看一下aliases邮件别名服务的配置文件估计就能猜出来了,配置文件中定义了大量用户名称,而这些用户名称大多都是咱们Linux系统本地的系统帐户,而在:(冒号)间隔符后面所对应的root用户则是用来接收这些用户邮件的人,用户的别名可以是系统内的本地用户,也可以是完全虚构的用户名字:

[root@linuxprobe ~]# cat /etc/aliases
#
# Aliases in this file will NOT be expanded in the header from
# Mail, but WILL be visible over networks or from /bin/mail.
#
# >>>>>>>>>> The program "newaliases" must be run after
# >> NOTE >> this file is updated for any changes to
# >>>>>>>>>> show through to sendmail.
#
# Basic system aliases -- these MUST be present.
mailer-daemon: postmaster
postmaster: root
# General redirections for pseudo accounts.
bin: root
daemon: root
adm: root
lp: root
sync: root
shutdown: root
halt: root
mail: root
news: root
uucp: root
operator: root
games: root
gopher: root
ftp: root
nobody: root
radiusd: root
nut: root
dbus: root
vcsa: root
canna: root
wnn: root
rpm: root
nscd: root
pcap: root
apache: root
webalizer: root
dovecot: root
fax: root
quagga: root
radvd: root
pvm: root
amandabackup: root
privoxy: root
ident: root
named: root
xfs: root
gdm: root
mailnull: root
postgres: root
sshd: root
smmsp: root
postfix: root
netdump: root
ldap: root
squid: root
ntp: root
mysql: root
desktop: root
rpcuser: root
rpc: root
nfsnobody: root
ingres: root
system: root
toor: root
manager: root
dumper: root
abuse: root
newsadm: news
newsadmin: news
usenet: news
ftpadm: ftp
ftpadmin: ftp
ftp-adm: ftp
ftp-admin: ftp
www: webmaster
webmaster: root
noc: root
security: root
hostmaster: root
info: postmaster
marketing: postmaster
sales: postmaster
support: postmaster
# trap decode to catch security attacks
decode: root
# Person who should get root's mail
#root: marc

现在同学们大概能猜出是怎么一回事了吧,原来这是一个用于定义用户别名和邮件接受人的配置文件,除了用系统帐户的名称外,咱们自己还可以去定义一些别名来接受邮件的~例如创建一个名为xxoo的用户,而真正接受他邮件的人其实是root管理员帐号:

[root@linuxprobe ~]# cat /etc/aliases
#
# Aliases in this file will NOT be expanded in the header from
# Mail, but WILL be visible over networks or from /bin/mail.
#
# >>>>>>>>>> The program "newaliases" must be run after
# >> NOTE >> this file is updated for any changes to
# >>>>>>>>>> show through to sendmail.
#
# Basic system aliases -- these MUST be present.
mailer-daemon: postmaster
postmaster: root
# General redirections for pseudo accounts.
xxoo: root
bin: root
daemon: root
adm: root
lp: root
………………省略部分输出信息………………

退出并保存好邮件别名配置文件后需要再执行一下newaliases命令,这样做的目的是让新的用户别名配置文件立即生效,再次尝试发送一下邮件吧,如图15-15所示:
向用户xxoo发送邮件

图15-15 向服务器xxoo用户发送邮件

这时使用root超级管理员身份在服务器上面执行下mail命令就能够看到这封原本要发送给xxoo用户的邮件啦~是不是很有意思,另外刘遄老师跟同学们再罗嗦一句,邮件帐户别名技术不仅应用广泛,而且配置起来十分简单,因此同学们今后千万不要因为看到有些网站上提供了很多客服邮件就轻易相信别人,也许幕后只有一个人在操作呢~

[root@linuxprobe ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/mail/root": 5 messages 1 new 4 unread
U 1 user@localhost.com Fri Jul 10 09:58 1631/123113 "[abrt] full crash report"
U 2 Anacron Wed Aug 19 17:47 18/629 "Anacron job 'cron.daily' on mail.linuxprobe.com"
U 3 boss Wed Aug 19 18:44 114/2975 "hello"
4 boss Wed Aug 19 18:49 117/3242 "你好,用户Bin。"
>N 5 boss Wed Aug 19 19:18 115/3254 "这是一封发送给xxoo用户的邮件。"

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

本章节的复习作业(答案就在问题的下一行哦,用鼠标选中即可看到的~)

1:请您简述电子邮件服务与Http、Ftp、NFS等服务的最大区别。

答案:当对方服务器宕机或用户不在线时也能发送数据。

2:常见的电子邮件协议包括有那些?

答案:SMTP简单邮件传输协议、POP3第三版邮局协议和IMAP4第四版互联网信息访问协议。

3:请简述电子邮件系统中MUA、MTA、MDA三种服务角色的用处。

答案:MUA用于收发邮件、MTA用于转发邮件、MDA用于保存邮件。

4:使用Postfix与Dovecot部署电子邮件系统前需要先做什么?

答案:需要先配置部署DNS域名解析服务,以便于提供邮箱地址解析功能。

5:能否在dovecot程序的配置文件中限制允许连接的主机范围?

答案:可以,在Dovecot服务程序的配置文件中修改login_trusted_networks参数的值即可,这样可在不修改防火墙策略的情况下依然能够限制来访主机范围。

6:使用outlook软件连接时提示找不到服务器或连接超时,最可能是什么原因呢?

答案:极大可能是DNS域名解析问题引起的连接超时,可在服务器与客户端本地分别执行ping mail.linuxprobe.com 命令来自测是否能正常解析出IP地址。

7:简述如何定义邮件用户别名邮箱以及让其立即生效?

答案:管理邮件用户别名可直接修改别名配置文件,保存退出文件后执行newaliases命令即让新的邮件别名生效。