Linux就該這么學》最新正式版已出版上市,同學們可在線上京東網當當網淘寶網亞馬遜等電商平臺購買。

*亦可就近在新華書店購買*

章節概述:

電子郵件系統是我們在日常工作、生活中最常用的一個網絡服務,本章將首先介紹電子郵件系統的起源,然后介紹SMTP、POP3、IMAP4等常見的電子郵件協議,以及MUA、MTA、MDA這三種服務角色的作用。本章將完整地演示在Linux系統中使用Postfix和Dovecot服務程序配置電子郵件系統服務的方法,并重點講解常用的配置參數,此外還將結合BIND服務程序提供的DNS域名解析服務來驗證客戶端主機與服務器之間的郵件收發功能。本章最后還介紹了如何在電子郵件系統中設置用戶別名,以幫助大家在生產環境中更好地控制、管理電子郵件賬戶以及信箱地址。

15.1 電子郵件系統

20世紀60年代,美蘇兩國正處于冷戰時期。美國軍方認為應該在科學技術上保持其領先的地位,這樣有助于在未來的戰爭中取得優勢。美國國防部由此發起了一項名為ARPANET的科研項目,即大家現在所熟知的阿帕網計劃。阿帕網是當今互聯網的雛形,它也是世界上第一個運營的封包交換網絡。但是很快在1971年阿帕網遇到了嚴峻的問題,如圖15-1所示,參與阿帕網科研項目的科學家分布在美國不同的地區,甚至還會因為時差的影響而不能及時分享各自的研究成果,因此科學家們迫切需要一種能夠借助于網絡在計算機之間傳輸數據的方法。

盡管本書第10章和第11章介紹的Web服務和FTP文件傳輸服務也能實現數據交換,但是這些服務的數據傳輸方式就像“打電話”那樣,需要雙方同時在線才能完成傳輸工作。如果對方的主機宕機或者科研人員因故離開,就有可能錯過某些科研成果了。好在當時麻省理工學院的Ray Tomlinson博士也參與到了阿帕網計劃的科研項目中,他覺得有必要設計一種類似于“信件”的傳輸服務,并為信件準備一個“信箱”,這樣即便對方臨時離線也能完成數據的接收,等上線后再進行處理即可。于是,Ray Tomlinson博士用了近一年的時間完成了電子郵件(Email)的設計,并在1971年秋天使用SNDMSG軟件向自己的另一臺計算機發送出了人類歷史上第一封電子郵件—電子郵件系統在互聯網中由此誕生!

圖15-1? 1971年阿帕網科研項目運營情況歷史資料圖片

既然要在互聯網中給他人發送電子郵件,那么對方用戶用于接收電子郵件的名稱必須是唯一的,否則電子郵件可能會同時發給多個重名的用戶,也或者干脆大家都收不到郵件了。因此,Ray Tomlinson博士決定選擇使用“姓名@計算機主機名稱”的格式來規范電子信箱的名稱。選擇使用@符號作為間隔符的原因其實也很簡單,因為Ray Tomlinson博士覺得人類的名字和計算機主機名稱中應該不會有這么一個@符號,所以就選擇了這個符號。

電子郵件系統基于郵件協議來完成電子郵件的傳輸,常見的郵件協議有下面這些。

簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP):用于發送和中轉發出的電子郵件,占用服務器的25/TCP端口。

郵局協議版本3(Post Office Protocol 3):用于將電子郵件存儲到本地主機,占用服務器的110/TCP端口。

Internet消息訪問協議版本4(Internet Message Access Protocol 4):用于在本地主機上訪問郵件,占用服務器的143/TCP端口。

在電子郵件系統中,為用戶收發郵件的服務器名為郵件用戶代理(Mail User Agent,MUA)。另外,既然電子郵件系統能夠讓用戶在離線的情況下依然可以完成數據的接收,肯定得有一個用于保存用戶郵件的“信箱”服務器,這個服務器的名字為郵件投遞代理(Mail Delivery Agent,MDA),其工作職責是把來自于郵件傳輸代理(Mail Transfer Agent,MTA)的郵件保存到本地的收件箱中。其中,這個MTA的工作職責是轉發處理不同電子郵件服務供應商之間的郵件,把來自于MUA的郵件轉發到合適的MTA服務器。例如,我們從新浪信箱向谷歌信箱發送一封電子郵件,這封電子郵件的傳輸過程如圖15-2所示。

總的來說,一般的網絡服務程序在傳輸信息時就像撥打電話,需要雙方同時保持在線,而在電子郵件系統中,當用戶發送郵件后不必等待投遞工作完成即可下線。如果對方郵件服務器(MTA)宕機或對方臨時離線,則發件服務器(MTA)就會把要發送的內容自動的暫時保存到本地,等檢測到對方郵件服務器恢復后會立即再次投遞,期間一般無需運維人員維護處理,隨后收信人(MUA)就能在自己的信箱中找到這封郵件了。

郵件投遞工程

圖15-2? 電子郵件的傳輸過程

大家在生產環境中部署企業級的電子郵件系統時,有4個注意事項請留意。

  1. 添加反垃圾與反病毒模塊:它能夠很有效地阻止垃圾郵件或病毒郵件對企業信箱的干擾。
  2. 對郵件加密:可有效保護郵件內容不被黑客盜取和篡改。
  3. 添加郵件監控審核模塊:可有效地監控企業全體員工的郵件中是否有敏感詞、是否有透露企業資料等違規行為。
  4. 保障穩定性:電子郵件系統的穩定性至關重要,運維人員應做到保證電子郵件系統的穩定運行,并及時做好防范分布式拒絕服務(Distributed Denial of Service,DDoS)攻擊的準備。

15.2 部署基礎的電子郵件系統

一個最基礎的電子郵件系統肯定要能提供發件服務和收件服務,為此需要使用基于SMTP協議的Postfix服務程序提供發件服務功能,并使用基于POP3協議的Dovecot服務程序提供收件服務功能。這樣一來,用戶就可以使用Outlook Express或Foxmail等客戶端服務程序正常收發郵件了。電子郵件系統的工作流程如圖15-3所示。

郵局系統流程圖

圖15-3? 電子郵件系統的工作流程

在RHEL 5、RHEL 6以及諸多早期的Linux系統中,默認使用的發件服務是由Sendmail服務程序提供的,而在RHEL 7系統中已經替換為Postfix服務程序。相較于Sendmail服務程序,Postfix服務程序減少了很多不必要的配置步驟,而且在穩定性、并發性方面也有很大改進。

一般而言,我們的信箱地址類似于“[email protected]”這樣,也就是按照“用戶名@主機地址(域名)”格式來規范的。如果您給我一串“[email protected]”的信息,我可能猜不到這是一個信箱地址,沒準會將它當作SSH協議的連接信息。因此,要想更好地檢驗電子郵件系統的配置效果,需要先部署bind服務程序,為電子郵件服務器和客戶端提供DNS域名解析服務。

第1步:配置服務器主機名稱,需要保證服務器主機名稱與發信域名保持一致:

[[email protected] ~]# vim /etc/hostname
mail.linuxprobe.com
[[email protected] ~]# hostname
mail.linuxprobe.com

第2步:清空iptables防火墻默認策略,并保存策略狀態,避免因防火墻中默認存在的策略阻止了客戶端DNS解析域名及收發郵件:

[[email protected]?~]#?iptables?-F
[[email protected]?~]#?service?iptables?save
iptables:?Saving?firewall?rules?to?/etc/sysconfig/iptables:[??OK??]

第3步:為電子郵件系統提供域名解析。由于第13章已經講解了bind-chroot服務程序的配置方法,因此這里只提供主配置文件、區域配置文件和域名數據文件的配置內容,其余配置步驟請大家自行完成。

?[[email protected]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 
 ………………省略部分輸出信息………………
[[email protected] ~]# cat /etc/named.rfc1912.zones
zone "linuxprobe.com" IN {
type master;
file "linuxprobe.com.zone";
allow-update {none;};
};
[[email protected] ~]# 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

[[email protected]?~]#?systemctl?restart?named
[[email protected]?~]#?systemctl?enable?named
ln?-s?'/usr/lib/systemd/system/named.service'?
'/etc/systemd/system/multi-user.target.wants/named.service'

修改好配置文件后記得重啟bind服務程序,這樣電子郵件系統所對應的服務器主機名即為mail.linuxprobe.com,而郵件域為@linuxprobe.com。把服務器的DNS地址修改成本地IP地址,如圖15-4所示。

圖15-4? 配置服務器的DNS地址

15.2.1 配置Postfix服務程序

Postfix是一款由IBM資助研發的免費開源電子郵件服務程序,能夠很好地兼容Sendmail服務程序,可以方便Sendmail用戶遷移到Postfix服務上。Postfix服務程序的郵件收發能力強于Sendmail服務,而且能自動增加、減少進程的數量來保證電子郵件系統的高性能與穩定性。另外,Postfix服務程序由許多小模塊組成,每個小模塊都可以完成特定的功能,因此可在生產工作環境中根據需求靈活搭配它們。

第1步:安裝Postfix服務程序。這一步在RHEL7系統中是多余的。劉遄老師之所以還要寫上這一步驟,其目的是讓大家在學完本書之后不但能掌握RHEL系統,還能立即上手Fedora、CentOS等主流Linux系統。這樣,既然這些系統沒有默認安裝Postfix服務程序,我們也可以自行搞定。在安裝完Postfix服務程序后,需要禁用iptables防火墻,否則外部用戶無法訪問電子郵件系統。

[[email protected] ~]# 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
[[email protected] ~]# systemctl disable iptables

第2步:配置Postfix服務程序。大家如果是首次看到Postfix服務程序主配置文件(/etc/ postfix/main.cf),估計會被679行左右的內容給嚇到。其實不用擔心,這里面絕大多數的內容依然是注釋信息。劉遄老師在本書中一直強調正確學習Linux系統的方法,并堅信“負責任的好老師不應該是書本的搬運工,而應該一名優質內容的提煉者”,因此在翻遍了配置參數的介紹,以及結合多年的運維經驗后,最終總結出了7個最應該掌握的參數,如表15-1所示。

表15-1??????????????????????????????? Postfix服務程序主配置文件中的重要參數

參數 作用
myhostname 郵局系統的主機名
mydomain 郵局系統的域名
myorigin 從本機發出郵件的域名名稱
inet_interfaces 監聽的網卡接口
mydestination 可接收郵件的主機名或域名
mynetworks 設置可轉發哪些主機的郵件
relay_domains 設置可轉發哪些網域的郵件

在Postfix服務程序的主配置文件中,總計需要修改5處。首先是在第76行定義一個名為myhostname的變量,用來保存服務器的主機名稱。請大家記住這個變量的名稱,下邊的參數需要調用它:

[[email protected] ~]# vim /etc/postfix/main.cf
………………省略部分輸出信息………………
68 # INTERNET HOST AND DOMAIN NAMES
69 # 
70 # The myhostname parameter specifies the internet hostname of this
71 # mail system. The default is to use the fully-qualified domain name
72 # from gethostname(). $myhostname is used as a default value for many
73 # other configuration parameters.
74 #
75 #myhostname = host.domain.tld
76 myhostname = mail.linuxprobe.com
………………省略部分輸出信息………………

然后在第83行定義一個名為mydomain的變量,用來保存郵件域的名稱。大家也要記住這個變量名稱,下面將調用它:

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

在第99行調用前面的mydomain變量,用來定義發出郵件的域。調用變量的好處是避免重復寫入信息,以及便于日后統一修改:

85 # SENDING MAIL
86 # 
87 # The myorigin parameter specifies the domain that locally-posted
88 # mail appears to come from. The default is to append $myhostname,
89 # which is fine for small sites. If you run a domain with multiple
90 # machines, you should (1) change this to $mydomain and (2) set up
91 # a domain-wide alias database that aliases each user to
92 # [email protected]
93 #
94 # For the sake of consistency between sender and recipient addresses,
95 # myorigin also specifies the default domain name that is appended
96 # to recipient addresses that have no @domain part.
97 #
98 #myorigin = $myhostname
99 myorigin = $mydomain

第4處修改是在第116行定義網卡監聽地址。可以指定要使用服務器的哪些IP地址對外提供電子郵件服務;也可以干脆寫成all,代表所有IP地址都能提供電子郵件服務:

103 # The inet_interfaces parameter specifies the network interface
104 # addresses that this mail system receives mail on. By default,
105 # the software claims all active interfaces on the machine. The
106 # parameter also controls delivery of mail to [email protected][ip.address].
107 #
108 # See also the proxy_interfaces parameter, for network addresses that
109 # are forwarded to us via a proxy or network address translator.
110 #
111 # Note: you need to stop/start Postfix when this parameter changes.
112 #
113 #inet_interfaces = all
114 #inet_interfaces = $myhostname
115 #inet_interfaces = $myhostname, localhost
116 inet_interfaces = all

最后一處修改是在第164行定義可接收郵件的主機名或域名列表。這里可以直接調用前面定義好的myhostname和mydomain變量(如果不想調用變量,也可以直接調用變量中的值):

133 # The mydestination parameter specifies the list of domains that this
134 # machine considers itself the final destination for.
135 #
136 # These domains are routed to the delivery agent specified with the
137 # local_transport parameter setting. By default, that is the UNIX
138 # compatible delivery agent that lookups all recipients in /etc/passwd
139 # and /etc/aliases or their equivalent.
140 #
141 # The default is $myhostname + localhost.$mydomain. On a mail domain
142 # gateway, you should also include $mydomain.
143 #
144 # Do not specify the names of virtual domains - those domains are
145 # specified elsewhere (see VIRTUAL_README).
146 #
147 # Do not specify the names of domains that this machine is backup MX
148 # host for. Specify those names via the relay_domains settings for
149 # the SMTP server, or use permit_mx_backup if you are lazy (see
150 # STANDARD_CONFIGURATION_README).
151 #
152 # The local machine is always the final destination for mail addressed
153 # to [email protected][the.net.work.address] of an interface that the mail system
154 # receives mail on (see the inet_interfaces parameter).
155 #
156 # Specify a list of host or domain names, /file/name or type:table
157 # patterns, separated by commas and/or whitespace. A /file/name
158 # pattern is replaced by its contents; a type:table is matched when
159 # a name matches a lookup key (the right-hand side is ignored).
160 # Continue long lines by starting the next line with whitespace.
161 #
162 # See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
163 #
164 mydestination = $myhostname , $mydomain
165 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
166 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,

第3步:創建電子郵件系統的登錄賬戶。Postfix與vsftpd服務程序一樣,都可以調用本地系統的賬戶和密碼,因此在本地系統創建常規賬戶即可。最后重啟配置妥當的postfix服務程序,并將其添加到開機啟動項中。大功告成!

[[email protected] ~]# useradd boss
[[email protected]?~]# echo "linuxprobe" | passwd --stdin boss
Changing password for user boss. passwd: all authentication tokens updated successfully.
[[email protected]?~]# systemctl restart postfix
[[email protected]?~]# 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軟件包名稱即可:

[[email protected] ~]# 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服務程序的主配置文件中進行如下修改。首先是第24行,把Dovecot服務程序支持的電子郵件協議修改為imap、pop3和lmtp。然后在這一行下面添加一行參數,允許用戶使用明文進行密碼驗證。之所以這樣操作,是因為Dovecot服務程序為了保證電子郵件系統的安全而默認強制用戶使用加密方式進行登錄,而由于當前還沒有加密系統,因此需要添加該參數來允許用戶的明文登錄。

[[email protected] ~]# vim /etc/dovecot/dovecot.conf
………………省略部分輸出信息………………
23 # Protocols we want to be serving.
24 protocols = imap pop3 lmtp
25 disable_plaintext_auth = no
………………省略部分輸出信息………………

在主配置文件中的第48行,設置允許登錄的網段地址,也就是說我們可以在這里限制只有來自于某個網段的用戶才能使用電子郵件系統。如果想允許所有人都能使用,則不用修改本參數:

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

第3步:配置郵件格式與存儲路徑。在Dovecot服務程序單獨的子配置文件中,定義一個路徑,用于指定要將收到的郵件存放到服務器本地的哪個位置。這個路徑默認已經定義好了,我們只需要將該配置文件中第24行前面的井號(#)刪除即可。

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

然后切換到配置Postfix服務程序時創建的boss賬戶,并在家目錄中建立用于保存郵件的目錄。記得要重啟Dovecot服務并將其添加到開機啟動項中。至此,對Dovecot服務程序的配置部署步驟全部結束。

[[email protected] ~]# su - boss
Last login: Sat Aug 15 16:15:58 CST 2017 on pts/1
[[email protected] ~]$ mkdir -p mail/.imap/INBOX
[[email protected] ~]$ exit
[[email protected] ~]# systemctl restart dovecot 
[[email protected] ~]# systemctl enable dovecot 
ln -s '/usr/lib/systemd/system/dovecot.service' '/etc/systemd/system/multi-user.target.wants/dovecot.service'
15.2.3 客戶使用電子郵件系統

如何得知電子郵件系統已經能夠正常收發郵件了呢?可以使用Windows操作系統中自帶的Outlook軟件來進行測試(也可以使用其他電子郵件客戶端來測試,比如Foxmail)。請按照表15-2來設置電子郵件系統及DNS服務器和客戶端主機的IP地址,以便能正常解析郵件域名。設置后的結果如圖15-5所示。

表15-2??????????????????????????????????? 服務器與客戶端的操作系統與IP地址

主機名稱 操作系統 IP地址
電子郵件系統及DNS服務器 RHEL 7 192.168.10.10
客戶端主機 Windows 7 192.168.10.30

圖15-5? 配置Windows 7系統的網絡參數

第1步:在Windows 7系統中運行Outlook軟件程序。由于各位讀者使用的Windows7系統版本不一定相同,因此劉遄老師決定采用Outlook 2007版本為對象進行實驗。如果您想要與這里的實驗環境盡量保持一致,可在本書配套站點的軟件資源庫頁面(http://www. linuxprobe.com/ tools)下載并安裝。在初次運行該軟件時會出現一個“Outlook 2007啟動”頁面,引導大家完成該軟件的配置過程,如圖15-6所示。

圖15-6? Outlook 2007啟動向導

第2步:配置電子郵件賬戶。在圖15-7所示的“賬戶設置”頁面中單擊“是”單選按鈕,然后單擊“下一步”按鈕。

圖15-7? 配置電子郵件賬戶

第3步:選擇電子郵件服務的協議類型。在圖15-8所示的頁面中接受默認設置,然后單擊“下一步”按鈕。

圖15-8? 選擇電子郵件服務的協議類型

第4步:填寫電子郵件賬戶信息,在圖15-9所示的頁面中,“您的姓名”文本框中可以為自定義的任意名字,“電子郵件地址”文本框中則需要輸入服務器系統內的賬戶名外加發件域,“密碼”文本框中要輸入該賬戶在服務器內的登錄密碼。在填寫完畢之后,單擊“下一步”按鈕。

圖15-9? 填寫電子郵件賬戶信息

第5步:進行電子郵件服務登錄驗證。由于當前沒有可用的SSL加密服務,因此在Dovecot服務程序的主配置文件中寫入了一條參數,讓客戶可以使用明文登錄到電子郵件服務。Outlook軟件默認會通過SSL加密協議嘗試登錄電子郵件服務,所以在進行圖15-10所示的“搜索[email protected]服務器設置”大約30~60秒后,系統會出現登錄失敗的報錯信息。此時只需再次單擊“下一步”按鈕,即可讓Outlook軟件通過非加密的方式驗證登錄,如圖15-11所示。

圖15-10? 進行電子郵件服務驗證登錄

圖15-11? 使用非加密的方式進行電子郵件服務驗證登錄

第6步:向其他信箱發送郵件。在成功登錄Outlook軟件后即可嘗試編寫并發送新郵件了。只需在軟件界面的空白處單擊鼠標右鍵,在彈出的菜單中選擇“新郵件”命令(見圖15-12),然后在郵件界面中填寫收件人的信箱地址以及完整的郵件內容后單擊“發送”按鈕,如圖15-13所示。

圖15-12? 向其他信箱發送郵件

圖15-13? 填寫收件人信箱地址并編寫完整的郵件內容

當使用Outlook軟件成功發送郵件后,便可以在電子郵件服務器上使用mail命令查看到新郵件提醒了。如果想查看郵件的完整內容,只需輸入收件人姓名前面的編號即可。

[[email protected] ~]# mail
Heirloom Mail version 12.5 7/5/10.Type ? for help.
"/var/mail/root": 3 messages 3 unread >
U 1 [email protected] 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 [email protected] Sat Aug 15 19:02:06 2017 
Return-Path: 
X-Original-To: [email protected] 
Delivered-To: [email protected] 
From: "boss" 
To: 
Subject: Hello~
Date: Sat, 15 Aug 2017 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賬戶在Linux系統中是系統賬戶,默認的Shell終端是/sbin/nologin,因此在以bin賬戶登錄時,系統會提示當前賬戶不可用。但是,在電子郵件服務器上使用mail命令后,卻看到這封原本要發送給bin賬戶的郵件已經被存放到了root賬戶的信箱中。

[[email protected] ~]# su - bin 
This account is currently not available. 
[[email protected] ~]# mail
Heirloom Mail version 12.5 7/5/10. 
Type ? for help. 
"/var/mail/root": 4 messages 4 new > 
U 1 [email protected] 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 [email protected] Wed Aug 19 18:49:05 2017 
Return-Path: <[email protected]> 
X-Original-To: [email protected] 
Delivered-To: [email protected] 
From: "boss" <[email protected]> 
To: <[email protected]>
Subject: 你好,用戶Bin。 
Date: Wed, 19 Aug 2017 18:49:05 +0800 
Content-Type: multipart/alternative; boundary="----=_NextPart_000_0006_01D0DAAF.
B9104E90" 
X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AdDabKrQzUHVBTgRQMaCtUs
VtqfL1Q== 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賬戶則是用來接收這些賬戶郵件的人。用戶別名可以是Linux系統內的本地用戶,也可以是完全虛構的用戶名字。

下述命令會顯示大量的內容,考慮到篇幅限制,這里已經做了部分刪減,其實際的輸出名單將是這里的兩倍多。

[[email protected] ~]# 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

現在大家能猜出是怎么一回事了吧。原來aliases郵件別名服務的配置文件是專門用來定義用戶別名與郵件接收人的映射。除了使用本地系統中系統賬戶的名稱外,我們還可以自行定義一些別名來接收郵件。例如,創建一個名為xxoo的賬戶,而真正接收該賬戶郵件的應該是root賬戶。

[[email protected] ~]# 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
………………省略部分輸出信息………………

保存并退出aliases郵件別名服務的配置文件后,需要再執行一下newaliases命令,其目的是讓新的用戶別名配置文件立即生效。然后再次嘗試發送郵件,如圖15-15所示: 向用戶xxoo發送郵件

圖15-15? 向服務器上的xxoo賬戶發送郵件

這時,使用root賬戶在服務器上執行mail命令后,就能看到這封原本要發送給xxoo賬戶的郵件了。最后,劉遄老師再啰嗦一句,用戶別名技術不僅應用廣泛,而且配置也很簡單。所以更要提醒大家的是,今后千萬不要看到有些網站上提供了很多客服信箱就輕易相信別人,沒準發往這些客服信箱的郵件會被同一個人收到。

[[email protected] ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/mail/root": 5 messages 1 new 4 unread
U 1 [email protected] 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和MAP4。

3.電子郵件系統中MUA、MTA、MDA三種服務角色的用途分別是什么?

答:MUA用于收發郵件、MTA用于轉發郵件、MDA用于保存郵件。

4.使用Postfix與Dovecot部署電子郵件系統前,需要先做什么?

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

5.能否讓Dovecot服務程序限制允許連接的主機范圍?

答:可以,在Dovecot服務程序的主配置文件中修改login_trusted_networks參數值即可,這樣可在不修改防火墻策略的情況下限制來訪的主機范圍。

6.使用Outlook軟件連接電子郵件服務器的地址mail.linuxprobe.com時,提示找不到服務器或連接超時,這可能是什么原因導致的呢?

答:很有可能是DNS域名解析問題引起的連接超時,可在服務器與客戶端分別執行ping mail.linuxprobe.com 命令,測試是否可以正常解析出IP地址。

7.如何定義用戶別名信箱以及讓其立即生效?

答:可直接修改郵件別名服務的配置文件,并在保存退出后執行newaliases命令即可讓新的用戶別名立即生效。

本文原創地址:http://www.52437949.com/chapter-15.html編輯:劉遄,審核員:暫無