基于Postfix的大型郵件系統(tǒng)
原創(chuàng)【51CTO原創(chuàng)】Postfix是目前流行的一套郵件傳輸代理軟件(MTA),其作者Wietse Venema最初開發(fā)這套軟件時(shí)就對總體設(shè)計(jì)、擴(kuò)展能力、可用性及系統(tǒng)安全等方面進(jìn)行了充分的考慮。由于Postfix在穩(wěn)定、效率、安全和可用性上的優(yōu)勢,使得很多大型的郵件服務(wù)提供商都從原有的MTA軟件向Postfix過度,而新近誕生的郵件產(chǎn)品也大都采用了Postfix。網(wǎng)易、Tom和新浪都將原來的Qmail更換為Postfix,可見,Postfix在大規(guī)模郵件系統(tǒng)中有比較普遍的應(yīng)用。當(dāng)然,Postfix也完全適用設(shè)計(jì)中小型的郵件系統(tǒng),因?yàn)镻ostfix在保證了效率、安全、擴(kuò)展等方面優(yōu)勢的同時(shí),還具有配置簡單的特點(diǎn)。如何選擇一個好的郵件系統(tǒng)建立一個功能強(qiáng)大且性能穩(wěn)定的郵件服務(wù)器成為企業(yè)關(guān)注的問題,本文就介紹在Red Hat AS 5.4中如何安裝和配置Postfix,其中涵蓋了比較基本的防范垃圾和病毒的配置、管理等工作,讓大家領(lǐng)略Postfix系統(tǒng)的易用性及其強(qiáng)大性能,***介紹如何利用Postfix搭建大型分布式郵件系統(tǒng)。
一、Postfix與其他MTA的對比
眾多的MTA軟件中,最為有影響的應(yīng)該是Sendmail、Qmail和Postfix。Sendmail是最古老的MTA之一,也擁有一批固定的使用者;Qmail是新生一代的MTA代表,其特點(diǎn)是速度快、體積小,并且容易配置安裝。Postfix起源于1996年,它采用模塊化設(shè)計(jì),使用了大量優(yōu)秀的技術(shù),以達(dá)到安全高效的目的。Postfix發(fā)展到現(xiàn)在已經(jīng)成為功能非常豐富、擴(kuò)展性和安全性非常強(qiáng)的優(yōu)秀MTA軟件。
■Sendmail
MTA軟件的很多先進(jìn)功能都是在Sendmail上***實(shí)現(xiàn)的。但Sendmail也有典型的歷史問題,主要是整個程序的沒有實(shí)現(xiàn)良好的模塊化,運(yùn)行時(shí)需要SID權(quán)限,以及配置文件復(fù)雜難懂。這些是阻礙Sendmail更好普及應(yīng)用的一些客觀問題。
■Qmail
Qmail是新生一代的MTA代表,實(shí)現(xiàn)了模塊化設(shè)計(jì),避免了SID問題,基本功能齊全,配置較Sendmail簡單,而且用戶也很廣泛。但Qmail最近幾年的開發(fā)工作基本停止,補(bǔ)丁程序也相對零亂,這些都是長期使用Qmail的用戶或者郵件服務(wù)提供商不得不認(rèn)真考慮的問題。另外,Qmail的擴(kuò)展性并不是很好,經(jīng)常需要補(bǔ)丁來完成功能的擴(kuò)展。
■Postfix
Postfix在設(shè)計(jì)上可以說是最為優(yōu)美的,其實(shí)現(xiàn)了良好的模塊化,郵件的處理流程是通過調(diào)用各個功能模塊來完成,在效率、功能、可用性、擴(kuò)展及安全等方面都考慮得比較充分。
接下來將按步驟介紹在Red Hat AS 5下Postfix的安裝與配置,讀者會比較充分地體會到Postfix的易用性。 其中表1對比了Sendmail與Postfix Qmail的一些特點(diǎn)。
MTA |
成熟性 |
安全性 |
特色 |
性能 |
模塊化 |
Sendmail兼容性 |
Sendmail |
高 |
低 |
中 |
低 |
否 |
一般 |
Postfix |
中 |
中 |
中 |
中 |
是 |
支持 |
Qmail |
中 |
高 |
高 |
高 |
是 |
插件實(shí)現(xiàn) |
表1 Sendmail與Postfix Qmail的對比
MTA 成熟性 安全性 特色 性能 模塊化 Sendmail兼容性
Sendmail 高 低 中 低 否 一般
Postfix 中 中 中 中 是 支持
Qmail 中 高 高 高 是 插件實(shí)現(xiàn)
表1 Sendmail與Postfix Qmail的對比#p#
二、基本郵件服務(wù)器搭建
Postfix的安裝與配置
■ 停止已經(jīng)運(yùn)行的MTA并使之失效。安裝Postfix之前,請檢查是否有其他MTA程序在運(yùn)行,如果有則刪除系統(tǒng)原有的MTA,或者停止原有的MTA,并禁止init.d下該MTA的啟動腳本,避免重新引導(dǎo)的時(shí)候再次啟動。操作如下:
[root@cecmail opt]# ps -ef | grep Sendmail
root 1919 1 0 May18 00:00:00 Sendmail: accepting connections
smmsp 1927 1 0 May18 00:00:00 Sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
root 9014 8835 0 22:14 pts/3 00:00:00 grep Sendmail
顯示的信息說明系統(tǒng)正在運(yùn)行Sendmail,可以直接刪除Sendmail。操作如下:
#killall sendmail
Sendmail: no process killed
[root@cecmail ]# rpm -e Sendmail --nodeps
■ 添加組用戶。操作如下:
[root@cecmail opt]# groupadd Postfix
[root@cecmail opt]# groupadd postdrop
[root@cecmail opt]# cat /etc/group
mysql:x:500: www:x:501: luanzhaodong:x:502: Postfix:x:503: postdrop:x:504:
通過查看Group文件,可以判斷添加組是否成功。
■ 添加Postfix用戶。操作如下:
[root@cecmail opt]#useradd Postfix -g Postfix -c "Postfix user" -d /dev/null -s /sbin/nologin
[root@cecmail opt]#cat /etc/passwd mysql:x:500:500::/home/mysql:/bin/bash
www:x:501:501::/home/www:/bin/bash
Postfix:x:502:503:Postfix user:/dev/null:/sbin/nologin
通過查看passwd文件,可以判斷添加用戶是否成功。
■ 到Postfix官方網(wǎng)站(http://www.postfix.org/)下載Postfix源碼文件,并復(fù)制到服務(wù)器的某個目錄下,比如,可以下載到/opt/postfix目錄。操作如下:
[root@cecmail Postfix-2.6.5]# mkdir /opt/postfix/
[root@cecmail Postfix-2.6.5]# /opt/postfix/
[root@cecmail Postfix-2.6.5]# tar xzvf Postfix-2.6.5.tar.gz
■ 編譯安裝Postfix。操作如下:
[root@cecmail Postfix-2.6.5]# cd Postfix-2.6.5
[root@cecmail Postfix-2.6.5]#make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_TLS -DUSE_SASL_AUTH -I/usr/include/sasl' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib -lssl -lcrypto -lsasl2'
查看Makefile文件是否成功生成。
[root@cecmail Postfix-2.6.5]# ls Makefile
Makefile
上面代碼說明Makefile文件已經(jīng)生成??梢赃M(jìn)行編譯及安裝了。
[root@cecmail Postfix-2.6.5]# make
[root@cecmail Postfix-2.6.5]# make install
安裝時(shí)系統(tǒng)會提示用戶輸入一些參數(shù),比如隊(duì)列文件的路徑、戶和組信息,但是,安裝程序本身會提供默認(rèn)的參數(shù),一般情況下不需要手動修改這些默認(rèn)參數(shù),直接回車即可。這樣,Postfix就成功安裝完畢。 ■ 編輯main.cf
在啟動Postfix之前,需要簡單的配置一下Postfix。Postfix的主要配置文件是/etc/Postfix/main.cf,為了實(shí)現(xiàn)最簡單功能,只需修改以下幾個參數(shù)即可:
mydomain
該參數(shù)指明域名,在這里指定:
mydomain = cec-cn.com
myorigin
myorigin參數(shù)指明發(fā)件人所在的域名。如果用戶的郵件地址為user@domain.com,則該參數(shù)指定@后面的域名。這個參數(shù)通常這樣設(shè)置:
myorigin = $mydomain
mydestination
mydestination參數(shù)指定Postfix接收郵件時(shí)收件人的域名。簡單地說,也就是Postfix系統(tǒng)要接收什么樣的郵件,一般只希望接受發(fā)給自己這個域名的郵件,所以,通常mydestination與myorigin一樣:
mydestination = $mydomain
mynetworks 該參數(shù)定義可以使用此SMTP服務(wù)器發(fā)信的客戶IP地址,一般設(shè)置為本機(jī),或者本公司IP段,比如:
mynetworks = 192.168.1.0/24
myhostname
myhostname參數(shù)用于描述運(yùn)行C-Link系統(tǒng)的服務(wù)器所符合規(guī)則的域名全稱。
可以在sh下運(yùn)行命令查看域名:
[root@cecmail Postfix-2.6.5]# hostname Cecmail
本文按照下面內(nèi)容來配置main.cf文件:
myhostname = cecmail
mydomain = cec-cn.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost,
$mydomain
mynetworks = 192.168.1.0/24, 127.0.0.0/8
■ 運(yùn)行Postfix,操作如下:
[root@cecmail Postfix-2.6.5]#/opt/Postfix/Postfix-2.6.5/bin/Postfix start
Postfix/Postfix-script: starting the Postfix mail system
如果是安裝的postfix的rpm包,則
#service postfix start
Starting postfix:[確定]
#service dovecot start
啟動Dovecot Imap:[確定]
■ 測試MTA,操作如下:
[root@cecmail Postfix-2.6.5]# telnet localhost 25
Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 cecmail ESMTP Postfix (2.6.5)----說明連接成功
helo cec-cn.com #向服務(wù)器標(biāo)識用戶身份#
mail from: #標(biāo)明發(fā)信人地址#
250 ok #命令執(zhí)行成功#
rcpt to: #郵件投遞地址 test2@cec-cn.com#
250 ok #命令執(zhí)行成功#
data #數(shù)據(jù)傳輸初始化#
354 End data with . #開始傳輸數(shù)據(jù) #
From: test1@aaa.com
To: test2@cec-cn.com
Subject: test mail
Hi, this is a test . #數(shù)據(jù)內(nèi)容, 包括BASE64加密后的郵件內(nèi)容, 以 CRLF.CRLF 結(jié)束數(shù)據(jù)傳輸#
250 OK: queued as 2F6DE3929 #命令執(zhí)行成功#
Quit #結(jié)束會話#
221 Bye Connection closed by foreign host. #斷開連接#
這樣,Postfix就可以運(yùn)行了。但是,Postfix到底是怎樣處理郵件的呢?Postfix的各個模塊如何對郵件處理流程產(chǎn)生作用呢?下面,本文就從Postfix的機(jī)制上分析這些問題。#p#
三、Postfix常見問題指南
■Postfix中如何讓修改后的配置生效?
以root用戶身份執(zhí)行Postfix的reload命令即可。
■使用Postfix如何刷新郵件隊(duì)列?
以root用戶身份執(zhí)行 Postfix的命令 flush即可。
■如何讓Postfix開機(jī)后自己運(yùn)行,而不必手工啟動?
可以通過ntsysv工具,選中Postfix。
■如何設(shè)置Postfix的隊(duì)列延遲?
可以在Postfix的主要配置文件/etc/postifx/main.cf中修改下列參數(shù):
queue_run_delay (默認(rèn)值 1000秒) 設(shè)置多長時(shí)間隊(duì)列管理進(jìn)程去掃描無法投遞的郵件。
Maximal_queue_lifetime (默認(rèn)值 5天) 設(shè)置郵件在隊(duì)列里的最長時(shí)間。
Minimal_backoff_time (默認(rèn)值 1000秒) 在這個時(shí)間內(nèi),郵件不能夠被鎖定。
Maximal_backoff_time (默認(rèn)值 4000秒) 在這個時(shí)間之后,如果郵件仍然沒有被投遞,就認(rèn)為是無法投遞。
qmgr_message_recipient_limit (默認(rèn)值 1000)。
■ 如何禁止Postfix對客戶端IP做反向域名解析?
以root用戶身份登錄運(yùn)行如下命令:
postconf -e disable_client_ dns_lookup = 1
postfix reload
■ Postfix如何設(shè)置取消Delivered-To頭部信息?
在main.cf中設(shè)置:
smtpd_recipient_restrictions = ... regexp:/etc/postfix/access_regexp ...
smtpd_recipient_restrictions = ... pcre:/etc/postfix/access_regexp ...
/etc/postfix/access_regexp: /^(.*)-outgoing@(.*)/ 554 Use $1@$2 instead prepend_delivered_header配置參數(shù)也控制Delivered-To的使用。缺省的設(shè)置是command、file、forward(在把信件發(fā)送給命令,發(fā)送給文件,或者轉(zhuǎn)發(fā)的時(shí)候使用Delivered-To)。不推薦在轉(zhuǎn)發(fā)郵件的情況下取消Delivered-To頭部信息。
■ 如何讓Postfix支持maildir?
在main.cf中設(shè)置: home_mailbox = Maildir/ 任何相對路徑末尾加上“/”號都表示打開了maildir支持,home_mailbox設(shè)置的值將會追加到用戶的home目錄,也就是如果你指定home_mailbox = mymail/,那么Postfix也認(rèn)為打開了maildir支持,并把信件投遞到用戶home目錄下的mymail目錄中。
■ Postfix如何設(shè)置發(fā)送郵件延遲通知?
在main.cf中設(shè)置: delay_warning_time = 4
■ 如何增加Postfix的進(jìn)程數(shù)?
下面的設(shè)置依賴于內(nèi)核版本:要在引導(dǎo)的時(shí)候修改參數(shù),修改/etc/sysctl.conf添加:
fs.file-max = 16384 kernel.threads-max = 2048
■ 如何在撥號環(huán)境下使用Postfix?
在main.cf中做如下設(shè)置:
relayhost = smtprelay.yourisp.com
defer_transports = smtp
disable_dns_lookups = yes
并在撥號腳本中加入: /usr/sbin/sendmail -q
■ 如何拒收附件某些擴(kuò)展名的郵件?
創(chuàng)建body_checks文件內(nèi)容如下:
# vi /etc/postfix/body_checks /^((Content-(Disposition: attachment;|Type:).*|\ +)| *)(file)?name\ *=\ *"?.*\.(lnk|asd|hlp|ocx|reg|bat|c[ho]m|cmd|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|wmf)"?\ *$/ REJECT attachment type not allowed #p#
四、Postfix的反垃圾配置
SpamAssassin是目前成功的反垃圾框架,它是利用Perl的字符串處理來實(shí)現(xiàn)垃圾郵件判別。通過判斷目標(biāo)郵件是否符合SpamAssassin的規(guī)則配置文件中的各項(xiàng)規(guī)則,并給郵件進(jìn)行評分,SpamAssassin就會告訴用戶哪些郵件是垃圾郵件。而用戶所需要做的只是配置SpamAssassin的規(guī)則集,以及評分標(biāo)準(zhǔn)。
安裝SpamAssassin十分簡單,請參考以下步驟:
■ 下載SpamAssassin。
■解壓縮Mail-SpamAssassin-3.2.5.tar.gz。
■ 用如下命令編譯安裝:
#perl Makefile.PL
#make
#make install SpamAssassin安裝完畢后,就開始配置SpamAssassin的local.cf文件,SpamAssassin就是通過這個配置文件來設(shè)置規(guī)則。并進(jìn)行垃圾郵件評判。如果想仔細(xì)了解SpamAssassin的規(guī)則配置,可以訪問http://spamassassin.apache.org。當(dāng)然,簡單的配置一下這個文件,也會起到一定的反垃圾效果,可以如下修改:
■ 垃圾郵件的評分標(biāo)準(zhǔn),超過該評分即被判別為垃圾郵件。
required_hits 5.0
■ 白名單,用戶可根據(jù)自己的需要配置,比如,如果認(rèn)為來自本域(本文中設(shè)定的#本域是test)的都是安全郵件,那么就可以如下修改。
whitelist_from *@cec-cn.com
■ 在垃圾郵件的主體上做一個標(biāo)記。
rewrite_subject 1
■ 處理垃圾郵件的方式:
#0 將信息寫入郵件頭。
#1 將垃圾郵件作為附件。
#2 垃圾郵件以正文形式存在。
report_safe 0
■ 是否使用貝葉斯運(yùn)算:
use_bayes 1
■ 貝葉斯的存儲信息,根據(jù)用戶自己的實(shí)際情況而定。
bayes_path /var/lib/amavis/.spamassassin/bayes
■ 是否啟用貝葉斯的自動學(xué)習(xí)。
auto_learn 1
■ 是否略過實(shí)時(shí)黑名單的檢查。
skip_rbl_checks 0
■ 檢查是否是本域發(fā)送的郵件,如果是,則認(rèn)為是正常郵件,評分減去50。
header LOCAL_RCVD Received =~ /.*\(\S+\.test\.com\s+\[.*\]\)/
describe LOCAL_RCVD Received from local machine score LOCAL_RCVD -50
配置好的SpamAssassin完全可以由Postfix直接調(diào)用。但是,如果以服務(wù)的形式啟動,即spamd的形式,則可以有效地降低服務(wù)器資源占用。
如下修改/etc/default/SpamAssassin,將ENABLED設(shè)為1,這樣SpamAssassin才可以spamd的形式啟動注。然后,還需要修改 /etc/postfix/master.cf,來通知Postfix去使用SpamAssassin 來掃描郵件:
Smtp inet n - n - - smtpd -v -o
content_filter=spamassassin
這樣,重新啟動smtpd和Postfix守護(hù)進(jìn)程將啟用SpamAssassin來進(jìn)行垃圾郵件到掃描。 #P#
五、Postfix的反病毒配置
Clamav是一款免費(fèi)的反病毒工具包,實(shí)際運(yùn)用中也十分有效。大家也可以安裝F-Prot Antivirus軟件
下面以Clamav為例子,可以如下操作:
■ 下載clamav-0.95.tar.gz:
■ 解壓縮clamav-0.95.tar.gz:
■ 用如下命令添加用戶:
#groupadd clamav
#useradd -g clamav -s/bin/false -d/dev/null clamav
■ 用如下命令編譯安裝:
#./configure --prefix=/usr/local/clamav --with-dbdir=/usr/local/share/clamav
#make
#make check
#make install
■ 打開/usr/local/clamav/etc/clamd.conf,注釋掉Example行,并進(jìn)行如下配置:
LogSyslog
LogVerbose
LogFacility LOG_MAIL
LogFile /var/log/clamav/clamd.log
PidFile /var/run/clamav/clamd.pid
DatabaseDirectory /usr/local/share/clamav
LocalSocket /var/run/clamav/clamd
StreamMaxLength 10M
User amavis
ScanMail
ScanArchive
ScanRAR
■ 打開 /usr/local/clamav/etc/freshclam.conf,注釋掉Example行,并使用如下命令進(jìn)行配置:
DatabaseDirectory /usr/local/share/clamav
UpdateLogFile /var/log/clamav/freshclam.log
LogSyslog
LogVerbose
DatabaseOwner amavis
Checks 12
DatabaseMirror db.CN.clamav.net
DatabaseMirror database.clamav.net
NotifyClamd
■ 使用如下命令創(chuàng)建日志文件夾,并設(shè)置權(quán)限:
#mkdir /var/log/clamav
#chmod -R 744 /var/log/clamav
#chown -R amavis:amavis /var/log/clamav
#chown -R amavis.amavis /usr/local/share/clamav
#mkdir /var/run/clamav
#chmod 700 /var/run/clamav
#chown amavis.amavis /var/run/clamav
■ 編輯crontab,并設(shè)置自動更新病毒庫
#crontab -e 0 4 * * * root /usr/local/clamav/bin/freshclam --quiet -l /var/log/clamd.log
■ 啟動Clamav 如圖1
#/usr/local/clamav/sbin/clamd
圖1 Clamav 啟動界面
■***病毒檢測
從網(wǎng)站http://www.eicar.gor/anti_anti_virus_test_file.htm下載一個測試病毒文件eicar.com編寫一個郵件附件中帶上eicar.com,這樣就可以檢驗(yàn)防病毒系統(tǒng)的作用了。
這樣,Clamav就可以根據(jù)病毒庫信息對郵件進(jìn)行掃描了。當(dāng)然,為了讓Postfix能夠運(yùn)用Clamav去掃描郵件,實(shí)際上還需要安裝Amavisd,這是比較常用的MTA和郵件掃描軟件的一個接口軟件,使用該軟件可以讓MTA方便地啟用郵件掃描程序。安裝Amavisd的方法請參考有關(guān)資料。 #p#
六、自動監(jiān)控Postfix郵件服務(wù)器
這個功能是增強(qiáng)postfix 的管理性的 ,可以自動監(jiān)控postfix的日志文件。
下載 mailgraph-1.14.tar.gz并安裝上系統(tǒng)。修改配置文件/etc/init.d/mailgraph,并修改啟動程序權(quán)限:
#chmod 755 /etc/ini.d/mailgraph
#chkconfig –levels 235 mailgraph on
#/etc/init.d/mailgraph start
移動CGI腳本
#mv mailgraph.cgi /var/www/your IP/cgi-bin/
修改CGI腳本
My $rrd=`/var/lib/mailgraph.rrd`; #RRD數(shù)據(jù)庫路徑
My $rrd_virus=`/var/lib/mailgraph_virus.rrd`; #Virus RD數(shù)據(jù)庫路徑
修改CGI權(quán)限
#chmod 755 /var/ww/www.example.cm/cgi-bin/mailgraph.cgi
瀏覽日志網(wǎng)頁http://ip/cgi-bin/mailgraph.cgi, 如圖 2所示。
圖2#p#
七 、搭建分布式的郵件系統(tǒng)
對于大型郵件系統(tǒng),實(shí)現(xiàn)用戶的分布是不得不考慮的事情。因?yàn)?,集中存儲的硬件成本還是比較高。比如,網(wǎng)易的電子郵件注冊用戶超過3億,新浪免費(fèi)郵件的用戶也超過1.1億以上,Gmail擴(kuò)容的動作也迫使其他郵件服務(wù)提供商擴(kuò)大自己的容量,集中存儲的成本也因此變得更加昂貴。而將用戶分布在不同的郵件服務(wù)器上,并利用大容量而且相對廉價(jià)的磁盤陣列來存儲用戶郵件的做法,則能顯著降低成本,并能在一定程度上解決集中存儲的單點(diǎn)故障問題。
1.搭建分布式郵件系統(tǒng)的架構(gòu)設(shè)計(jì)
用Postfix搭建分布式的郵件系統(tǒng)的架構(gòu)如圖1所示。郵件接收服務(wù)器部署在架構(gòu)的最外層,負(fù)責(zé)接受外部其他服務(wù)器的發(fā)信請求,并將接收到的郵件轉(zhuǎn)發(fā)到用戶郵件服務(wù)器上。郵件接收服務(wù)器不對外發(fā)出請求。有效地配置郵件接收服務(wù)器上的Postfix,就能實(shí)現(xiàn)郵件的接收和轉(zhuǎn)發(fā)。有些人實(shí)現(xiàn)郵件轉(zhuǎn)發(fā)是通過虛擬投遞代理和虛擬別名來實(shí)現(xiàn),但是,本文將介紹一種擴(kuò)展性和靈活性更好的方法來實(shí)現(xiàn)郵件轉(zhuǎn)發(fā)。用戶郵件服務(wù)器上部署MDA、MUA。可以配置Postfix讓其只接受郵件接收服務(wù)器和其他用戶郵件服務(wù)器的請求。用戶發(fā)送郵件通過用戶郵件服務(wù)器上Postfix的Sendmail向外部其他服務(wù)器提出發(fā)信的請求,具體架構(gòu)見圖3。
圖3 Postfix搭建分布式郵件系統(tǒng)架構(gòu)圖
2.郵件接收服務(wù)器配置與設(shè)計(jì)
這里的郵件接收服務(wù)器是本網(wǎng)域MX記錄所指向的服務(wù)器,MTA通過SMTP協(xié)議進(jìn)行郵件傳輸時(shí),實(shí)際上就是通過DNS的MX記錄來找到郵件接收服務(wù)器的。對于大型的郵件系統(tǒng)往往需要一組服務(wù)器構(gòu)成。郵件接收服務(wù)器接收其他MTA郵件的流程為:接收服務(wù)器接收郵件→查詢用戶注冊在哪一臺用戶郵件服務(wù)器→將郵件轉(zhuǎn)發(fā)到用戶郵件服務(wù)器的MTA。那么當(dāng)接收服務(wù)器收到郵件后,如何執(zhí)行查詢動作和轉(zhuǎn)發(fā)動作呢?這個問題可以通過Postfix提供的強(qiáng)大的配置文件來解決。在main.cf中有兩個重要的配置參數(shù)在大型的分布式郵件系統(tǒng)中起到了非常重要的作用,一個是local_recipient_ maps,另一個是transport_ maps。local_recipient_maps參數(shù)值由SMTP服務(wù)使用,當(dāng)郵件接收服務(wù)器收到新郵件時(shí),它會檢查該參數(shù)指定的查詢表確定是否該接收該郵件,這里的查詢表可以是鍵值型的索引表,也可以是查詢程序。比如,可以這樣配置main.cf:
local_recipient_maps = usersever:smtpcheck
發(fā)送方MTA發(fā)出“RCPT ”指令時(shí),如果接受服務(wù)器上的Postfix,就可以調(diào)用smtpcheck對應(yīng)的程序去確認(rèn)該用戶是否存在。如果存在,就開始準(zhǔn)備接收“DATA”指令發(fā)過來的郵件正文。那么成功收到郵件后,如何實(shí)現(xiàn)轉(zhuǎn)發(fā)呢?這就需要配置 transport_maps這個參數(shù)。Postfix中可以通過transport_maps這個參數(shù)對應(yīng)的查詢表來判斷如何處理郵件,繼而修改默認(rèn)的郵件投遞流程,這里的查詢表可以是鍵值型的索引表,也可以是查詢程序。比如,可以這樣配置main.cf:
transport_maps = usersever:transportmx
Postfix可以通過transportmx對應(yīng)的程序獲得下一步處理郵件的指令。比如,輸入收件人郵件地址“user2 @cec-cn.com”,輸出“smtp: usersever06.cec-cn.com”,這就會讓Postfix通過SMTP把信轉(zhuǎn)投到usersever 06.cec-cn.com域名的這臺機(jī)器上,也就是第6臺用戶郵件服務(wù)器。
3.用戶郵件服務(wù)器的配置與設(shè)計(jì)
郵件系統(tǒng)中的用戶在注冊時(shí)被分配到不同的服務(wù)器上,并在數(shù)據(jù)庫中記錄這些信息。這些服務(wù)器負(fù)責(zé)接收從郵件接收服務(wù)器轉(zhuǎn)投過來的信件,并最終放入存儲系統(tǒng)中。這里郵件的處理流程為:用戶郵件服務(wù)器上的MTA接收郵件→查詢用戶在郵件服務(wù)器上的存儲位置→存郵件至用戶路徑。
在這里,一樣會使用local_ recipient_maps檢查收件人是否真實(shí)存在。但與郵件接收服務(wù)器不同的是,這是信件的最終目的地,transport_maps查詢的結(jié)果就不能再是“smtp: usersever06.cec-cn.com ”,要設(shè)置成合適的本地處理程序,比如local或者指定mda的名稱(在etc/master.cf中設(shè)置)等。main.cf的主要配置為:
local_recipient_maps = userserver:smtpcheck
transport_maps = usersever:transportusersever
這樣,一個大型的分布式郵件系統(tǒng)的MTA框架就搭建成功,在用戶郵件服務(wù)器上部署MUA,用戶可以進(jìn)行閱讀收信及發(fā)送郵件等操作了。
本文從安裝配置和實(shí)現(xiàn)機(jī)制向讀者概要地介紹了Postfix,并在這個基礎(chǔ)上設(shè)計(jì)了一個大型的郵件系統(tǒng)。但是,本文對Postfix的介紹還遠(yuǎn)遠(yuǎn)不夠,比如Postfix來如何實(shí)現(xiàn)高效地反垃圾、反病毒,Postfix的詳細(xì)配置與管理等。讀者可以通過實(shí)踐來學(xué)習(xí)使用Postfix,并在實(shí)踐中探索Postfix的原理,從而更好地優(yōu)化和配置Postfix,以實(shí)現(xiàn)更加強(qiáng)大的郵件系統(tǒng)。
【編輯推薦】