sendmail
郵件傳輸代理程序
sendmail,計算機用語,是一種最重要的郵件傳輸代理程序。
網際網路郵件,企業戶免費郵件系統。 式引導戶源碼始構建足基需郵件系統。
郵件傳輸程序。郵件模式非。般況,郵件程序戶,傳輸投遞。戶戶指令,戶件傳送件傳輸,: 、。投遞則件傳輸取件傳送終戶郵箱,:。
戶試圖送封郵件,件送器,戶必須試圖尋找件傳輸,郵件提交。件傳輸郵件,首保存緩衝隊列,,根據郵件標址,件傳輸程序找該標址負責郵件傳輸伺服器,且網路郵件傳送。伺服器收郵件,緩衝存儲,郵件收查箱。
顯然,郵件傳輸是從伺服器到伺服器的,而且每個用戶必須擁有伺服器上存儲信息的空間(稱為信箱)才能接受郵件(發送郵件不受這個限制)。可以看到,一個郵件傳輸代理的主要工作是監視用戶代理的請求,根據電子郵件的目標地址找出對應的郵件伺服器,將信件在伺服器之間傳輸並且將接收到的郵件緩衝或者 提交給最終投遞程序。有許多的程序可以作為信件傳輸代理,但是sendmail是其中最重要的一個,事實證明它可以支持數千甚至更多的用戶,而且佔用的系統資源相當少。不過,sendmail的配置十分複雜,因此,也有人使用另外的一些工具,如qmail、postfix等等。
當sendmail程序得到一封待發送的郵件的時候,它需要根據目標地址確定將信件投遞給對應的伺服器,這是通過DNS服務實現的。例如一封郵件的目標地址是[email protected],那麼sendmail首先確定這個地址是用戶名(ideal)+機器名(linuxaid.com.cn)的格式,然後,通過查詢DNS來確定需要把信件投遞給某個伺服器。
DNS數據中,與電子郵件相關的是MX記錄,例如在linuxaid.com.cn這個域的DNS數據文件中有如下設置:
IN MX 10 mail
IN MX 20 mail1
mail IN A 202.99.11.120
mail1 IN A 202.99.11.121
顯然,在DNS中說明linuxaid.com.cn有兩個信件交換(MX)伺服器,於是,sendmail試圖將郵件發送給兩者之一。一般來說,排在前面的的MX伺服器的優先順序別比較高,因此服務 器將試圖連接mail.linuxaid.com.cn的25埠,試圖將信件報文轉發給它。如果成功,你的smtp伺服器的任務就完成了,在這以後的任務,將由mail.linuxaid.com.cn來完成。在一般的情況下,mail換器會自動把信件內容轉交給目標主機,不過,也存在這樣的情況,目標主機(比如linuxaid.com.cn)可能並不存在,或者不執行smtp服務,而是由其mx交換器來執行信件的管理,這時候,最終的信件將保存在mx機器上,直到用戶來察看它。
如果DNS查詢無法找出對某個地址的MX記錄(通常因為對方沒有信件交換主機),那麼sendmail將是試圖直接與來自郵件地址的主機對話並且發送郵件。例如,[email protected]中沒有對應的MX記錄,因此sendmail在確定MX交換器失敗后,將從DNS取得對方的IP地址並直接和對方對話試圖發送郵件。
sendmail
IN MX 10 mail
mail IN A 202.99.11.200
試驗環境為:redhat6.2、sendmail.8.11.4、qpopper4.0.3。
Sendmail是目前使用最為廣泛的一種E-mail伺服器。當前其最新的穩定版本為8.14.3。下載得到tar.gz格式的壓縮包以後,將其存放在/usr/src目錄下。我們以8.11.4為例。
解壓軟體包:
[root@email src]# tar xvfz sendmail.8.11.4.tar.gz
[root@email src]# cd sendmail-8.11.4
編譯安裝:
[root@email sendmail-8.11.4]# cd sendmail
[root@email sendmail]# sh Build
生成配置文件:
[root@email sendmail]#cd /usr/src/sendmail-8.11.4/cf/cf/
一般該目錄下應該有config.mc的文件,如果沒有則創建新文件config.mc,內容為:
divert(-1)
dnl This is the macro config file used to generate the /etc/sendmail.cf
dnl file. If you modify thei file you will have to regenerate the
dnl /etc/sendmail.cf by running this macro config through the m4
dnl preprocessor:
dnl m4 /etc/sendmail.mc > /etc/sendmail.cf
dnl You will need to have the Sendmail-cf package installed for this to work.
include(`/usr/src/sendmail-8.11.4/cf')
define(`confDEF_USER_ID',`8:12')
OSTYPE(`linux')
undefine(`UUCP_RELAY')
undefine(`BITNET_RELAY')
define(`confAUTO_REBUILD')
define(`confTO_CONNECT', `1m')
define(`confTRY_NULL_MX_LIST',true)
define(`confDONT_PROBE_INTERFACES',true)
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')
FEATURE(`smrsh',`/usr/sbin/smrsh')
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')
FEATURE(redirect)
FEATURE(always_add_domain)
FEATURE(use_cw_file)
FEATURE(local_procmail)
MAILER(smtp)
MAILER(procmail)
FEATURE(`access_db')
FEATURE(`blacklist_recipients')
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that do
dnl not hav 24x7 DNS do need this.
FEATURE(`accept_unresolvable_domains')
dnl FEATURE(`relay_based_on_MX')
然後運行:
[root@email cf]# sh Build config.cf
該命令將在該目錄下生成config.cf文件。然後安裝sendmail:
[root@email sendmail]# sh Build install
將config.cf拷貝到/etc/mail目錄下,並改名為sendmail.cf:
[root@email mail]#cp /usr/src/sendmail-8.11.4/cf/cf/config.cf /etc/mail/sendmail.cf
在/etc/mail目錄下創建access文件,內容如下:
202.99.11 RELAY
這裡表示允許本機和202.99.11.0網段中的機器通過該郵件伺服器的轉發郵件。其中202.99.11應該是你擁有的區域網路IP網段的IP地址,只需要寫網路部分即可。比如說你的用戶有多個網段,只需要在其中設置多個網段即可:
127.0.0.1RELAY
202.99.11 RELAY
200.200.201 RELAY
然後對access文件生成易於檢索的庫文件格式:
[root@email mail]# makemap hash access.db < access
創建文件/etc/mail/local-host-names,其內容為本機的擁有的域名信息,因為在上面的DNS配置文件中該伺服器有一個域名:email.linuxaid.com.cn,並且MX記錄也指向該域名,因此該伺服器就有兩個域名,一個為email.linuxaid.com.cn及linuxaid.com.cn,這樣用戶才可以使用[email protected].這樣的地址收發郵件,故該文件應該包含如下內容:
linuxaid.com.cn.
mail.linuxaid.com.cn.
最後還要創建別名資料庫。在/etc/mail/aliases目錄下創建文件aliases,內容如下:
MAILER-DAEMON: postmaster
postmaster: root
bin: root
daemon: root
nobody: root
然後生成aliases庫:
[root@email mail]# newaliases
然後,就可以啟動Sendmail了:
[root@email mail]# /usr/sbin/sendmail -bd -q20m
在第一次啟動時可能出現如下的錯誤信息:
554 5.0.0 /etc/mail/sendmail.cf: line 41: unknown configuration line ""
554 5.0.0 /etc/mail/sendmail.cf: line 60: unknown configuration line ""
不要緊張,只需要使用vi編輯器將這些行刪除即可,其實41、60等行都是空白行而已。刪除以後再重新啟動就應該沒有問題了。
qpopper是Unix/Linux環境下的pop3伺服器,該軟體配合sendmail使用。其主要是實現支持用戶通過pop3接收信件。
創建從/usr/mail指向/var/spool/mail/的鏈接:
[root@email src]# ln -s /var/spool/mail/ /usr/mail
解壓qpopper軟體包:
[root@email src]# tar xvfz qpopper4.0.3.tar.gz
[root@email src]# cd qpopper4.0.3
編譯安裝qpopper:
[root@email qpopper4.0.3]# ./configure
[root@email qpopper4.0.3]# make
[root@email qpopper4.0.3]# make install
安裝成功以後,qpopper將會被安裝在目錄/usr/local/sbin/目錄下。設置inetd啟動qpopper。編輯/etc/inetd.conf,查找pop內容的一行,在其前面添加#號,然後在改行後面添加如下內容:
pop-3 stream tcp nowait root /usr/local/sbin/popperqpopper-s
然後查找inetd進程ID號:
[root@email qpopper4.0.3]# ps ax|grep inetd
336 ? S 0:00 inetd
16872 pts/0 S 0:00 grep inetd
找到inetd進程號為226。然後重新啟動inetd進程,重新讀取配置文件:
[root@www qpopper4.0.3]# kill -HUP 336
這時候查看系統服務埠號:
[root@email qpopper4.0.3]# netstat -ln|grep 110
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
則說明110埠已經開始正常服務。
實現對IMAP的支持非常簡單,只需要安裝IMAP軟體包的RPM包:
[root@email RPM]# rpm -ivhimap-4.7-5.i386.rpm (這裡是在6.2環境下,如果在7.x環境下需要安裝更高版本的imap)
然後確保/etc/inetd.conf文件中imap所在行如下所示:
imapstream tcp nowait root /usr/sbin/tcpd imapd
然後重新啟動inetd以更新配置:
[root@email /]# kill -HUP 379 (這裡379是inetd的進程號)
然後查看imap是否成功啟動:
[root@email /]# netstat -ln|grep 143
註:對於6.2版本的imap-4.7來說 支持imap2,所以是143埠。RH7.x的imap-2000會支持imap3,因此可能還會監聽220埠)
這時候就可以在outlook express中添加賬號進行測試了。
接下來是測試郵件伺服器的郵件發送/接收功能,注意:測試時,不要在只對本地用戶進行測試,如:你的域為abc.com,測試時,不要只在郵件伺服器上通過mail、elm等程序測試[email protected]用戶。因為,此時user1是本地用戶,所以郵件伺服器可以對其進行Relay。你應該從區域網上的另一台機器使用Outlook等郵件客戶端對伺服器進行收發測試。
這種配置對於IP固定用戶沒有問題,只需要在access文件中指定其固定IP即可,而對於需要支持流動用戶,如撥號用戶的應用則不大適合,因為如果完全打開RELAY功能可能導致郵件伺服器的稱為垃圾郵件的轉發站。
解決用戶IP不固定問題有兩種方案,一種為採用SMTP認證,即用戶發送郵件以前,郵件伺服器進行用戶身份認證,通過則伺服器為其發送郵件,否則拒絕發信;第二種方案是採用動態轉發授權控制(Dynamic Relay authorization control),其工作原理為:撥號用戶撥號上網后,首先收郵件,如果用戶能正確收郵件,則DRAC自動在access.db中加入剛才收郵件用戶的IP,並允許此IP可以發信。不過,30分鐘內,此IP不發/收郵件的話,DRAC將從access.db中刪除此IP。此種機制保證撥號用戶在沒有SMTP認證的情況下,也可以通過遠程郵件伺服器發送E-mail。這些技術將在以後的文章內討論。
1、為什麼不能配置郵件伺服器為open relay的?
如果系統管理員將自己的郵件伺服器設置為open relay,將會導致一些垃圾郵件發送者將你的郵件伺服器作為轉發垃圾郵件的中繼站,這將使垃圾郵件的接收者將矛頭對準你,可能會導致報復性的郵件炸彈;垃圾郵件還能消耗你大量的資源,佔用你的帶寬。更為糟糕的事情可能是你的名字可能會上了黑名單,成為其他郵件接收者共同抵制的目標,你的郵件將被這些接收者所拒絕。
2、什麼是郵件轉發(mail relay)
設置好一個email伺服器以後,該伺服器將具有一個或若干個域名,這時email伺服器將監聽25號埠,等待遠程的發送郵件的請求。網路上其他的mail伺服器或者請求發送郵件的MUA(Mail User Agent,如outlook express、foxmail等等)會連接email伺服器的25號埠,請求發送郵件,SMTP會話過程一般是從遠程標識自己的身份開始,過程如下:
HELO remote.system.domainname
250 qmailserver.domain
MAIL FROM:[email protected]
250 OK
RCPT TO: [email protected]
郵件的接收者[email protected]中的域名並不一定是本地域名,這時候本地系統可能有兩種回答,接受它:
250 OK
或者拒絕接受它:
553 sorry,.that domain isnot in my domain list of allowed recphosts
第一種情況下,本地email伺服器是允許relay的,它接收並同意傳遞一個目的地址不屬於本地域名的郵件;而第二種情況則不接收非本地郵件。
email一般都有一個配置文件,其決定了是否接受一個郵件。只有當一個RCPT TO命令中的接收者地址的域名存在於該文件中時,才接受該郵件,否則就拒絕該郵件。若該文件不存在,則所有的郵件將被接受。當一個郵件伺服器不管郵件接收者和郵件接收者是誰,而是對所有郵件進行轉發(relay),則該郵件伺服器就被稱為開放轉發(open relay)的。當email伺服器沒有設置轉發限制時,其是開放轉發的。
3、sendmail如何限制郵件轉發
因為Send Mail 為了怕變成廣告信轉信站所以安裝后只線本機上的使用者寄信,要讓它為你轉信需要修改一點東西。修改 /etc/mail/access 檔案在裡面增加下面幾行。
localhost RELAY
192.168.1 RELAY
就可以將 192.168.1 網域里的信轉出去了。
sendmail是在Unix環境下使用最廣泛的實現郵件發送/接受的郵件傳輸代理程序。由於sendmail郵件伺服器的特點是功能強大而複雜,因此為保證Sendmail的安全性,需要作以下一些工作。
1、設置Sendmail使用"smrsh"
smrsh程序的目的是作為在mailer中為sendmail定義的"/bin/sh"的替代shell。smrsh是一種受限shell工具,它通過"/etc/smrsh"目錄來明確指定可執行文件的列表。簡而言之smrsh限制了攻擊者可以執行的程序集。當它與sendmail程序一起使用的時候,smrsh有效的將sendmail可以執行的程序的範圍限制在smrsh目錄之下。
第一步:
決定smrsh可以允許sendmail運行的命令列表。預設情況下應當包含以下命令,但不局限於這些命令:
"/bin/mail" (如果在你的系統中安裝了的話)
"/usr/bin/procmail" (如果在你的系統中安裝了的話)
注意:不可在命令列表裡包括命令解釋程序,例如sh(1),csh(1),perl(1),uudecode(1)及流編輯器sed(1)。
第二步:
在"/etc/smrsh"目錄中創建允許sendmail運行的程序的符號連接。
使用以下命令允許mail程序"/bin/mail"運行:
[root@deep]# cd /etc/smrsh
[root@deep]# ln -s /bin/mail mail
用以下命令允許procmail程序"/usr/bin/procmail"運行:
[root@deep]# cd /etc/smrsh
[root@deep]# ln -s /usr/bin/procmail procmail
這將允許位於".forward"和"aliases"中的用戶採用"|program"語法來運行mail及procmail程序。
第三步
配置sendmail使之使用受限shell。mailer程序在sendmail的配置文件"/etc/sendmail.cf"中僅有一行。必須修改"sendmail.cf"文件中"Mprog"定義的那一行。將"/bin/sh"替換為"/usr/sbin/smrsh"。
編輯"sendmail.cf"文件(vi /etc/sendmail.cf)並改動下面這一行:
例如:
Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u
應該被改為:
Mprog, P=/usr/sbin/smrsh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u
當前用以下命令手工重起sendmail進程:
[root@deep]# /etc/rc.d/init.d/sendmail restart
2、"/etc/aliases"文件
如果沒有加以正確和嚴格的管理的話,別名文件被用來獲取特權。例如,很多發行版本在別名文件中帶有"decode"別名。如今這種情況越來越少了。
這樣做的目的是為用戶提供一個通過mail傳輸二進位文件的方便的方式。在郵件的發送地,用戶把二進位文件用"uuencode"轉換成ASCII格式,並把結果郵遞給接收地"decode"別名。那個別名通過管道把郵件消息發送到"/usr/bin/uuencode"程序,由這個程序來完成從ASCII轉回到原始的二進位文件的工作。
刪除"decode"別名。類似的,對於所有用於執行沒有被放在smrsh目錄下的程序的別名,你都要仔細的檢查,可能它們都值得懷疑並應當刪除它們。要想使你的改變生效,需要運行:
[root@deep]# /usr/bin/newaliases
編輯別名文件(vi /etc/aliases)並刪除以下各行:
# Basic system aliases -- these MUST be present.
MAILER-DAEMON: postmaster
postmaster: root
# General redirections for pseudo accounts.
bin: root
daemon: root
games: root?? 刪除這一行
ingres: root ?? 刪除這一行
nobody: root
system: root ?? 刪除這一行
toor: root?? 刪除這一行
uucp: root ?? 刪除這一行
# Well-known aliases.
manager: root ?? 刪除這一行
dumper: root ?? 刪除這一行
operator: root ?? 刪除這一行
# trap decode to catch security attacks
decode: root ?? 刪除這一行
# Person who should get root's mail
#root: marc
最後應該運行"/usr/bin/newaliases"程序使改動生效
3、避免你的Sendmail被未授權的用戶濫用
最新版本的Sendmail (8.9.3)加入了很強的防止欺騙的特性。它們可以防止你的郵件伺服器被未授權的用戶濫用。編輯你的"/etc/sendmail.cf"文件,修改一下這個配置文件,使你的郵件伺服器能夠擋住欺騙郵件。
編輯"sendmail.cf"文件(vi /etc/sendmail.cf)並更改下面一行:
O PrivacyOptions=authwarnings
改為:
O PrivacyOptions=authwarnings,noexpn,novrfy
設置"noexpn"使sendmail禁止所有SMTP的"EXPN"命令,它也使sendmail拒絕所有SMTP的"VERB"命令。設置"novrfy"使sendmail禁止所有SMTP的"VRFY "命令。這種更改可以防止欺騙者使用"EXPN"和"VRFY"命令,而這些命令恰恰被那些不守規矩的人所濫用。
4、SMTP的問候信息
當 sendmail接受一個SMTP連接的時候,它會向那台機器發送一個問候信息,這些信息作為本台主機的標識,而且它所做的第一件事就是告訴對方它已經準備好了。
編輯"sendmail.cf"文件(vi /etc/sendmail.cf)並更改下面一行:
O SmtpGreetingMessage=$j Sendmail $v/$Z; $b
改為:
O SmtpGreetingMessage=$j Sendmail $v/$Z; $b NO UCE C=xx L=xx
如今手工重起一下sendmail進程,使剛才所做的更改生效:
[root@deep]# /etc/rc.d/init.d/sendmail restart
以上的更改將影響到Sendmail在接收一個連接時所顯示的標誌信息。你應該把"`C=xx L=xx"條目中的"xx"換成你所在的國家和地區代碼。後面的更改其實不會影響任何東西。但這是"news.admin.net-abuse.email"新聞組的夥伴們推薦的合法做法。
5、限制可以審核郵件隊列內容的人員
通常情況下,任何人都可以使用"mailq"命令來查看郵件隊列的內容。為了限制可以審核郵件隊列內容的人員,只需要在"/etc/sendmail.cf"文件中指定"restrictmailq"選項即可。在這種情況下,sendmail只允許與這個隊列所在目錄的組屬主相同的用戶可以查看它的內容。這將允許許可權為0700的郵件隊列目錄被完全保護起來,而我們限定的合法用戶仍然可以看到它的內容。
編輯"sendmail.cf"文件(vi /etc/sendmail.cf)並更改下面一行:
O PrivacyOptions=authwarnings,noexpn,novrfy
改為:
O PrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq
如今我們更改郵件隊列目錄的許可權使它被完全保護起來:
[root@deep]# chmod 0700 /var/spool/mqueue
注意:我們已經在sendmail.cf中的"PrivacyOptions="行中添加了"noexpn"和"novrfy"選項,如今在這一行中我們接著添加"restrictmailq"選項。
任何一個沒有特權的用戶如果試圖查看郵件隊列的內容會收到下面的信息:
$ /usr/bin/mailq
You are not permitted to see the queue
6、限制處理郵件隊列的許可權為"root"
通常,任何人都可以使用"-q"開關來處理郵件隊列,為限制只允許root處理郵件隊列,需要在"/etc/sendmail.cf"文件中指定"restrictqrun"。
編輯"sendmail.cf"文件(vi /etc/sendmail.cf)並更改下面一行:
O PrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq
改為:
O PrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq,restrictqrun
任何一個沒有特權的用戶如果試圖處理郵件隊列的內容會收到下面的信息:
$ /usr/sbin/sendmail -q
You do not have permission to process the queue
7、在重要的sendmail文件上設置不可更改位
可以通過使用"chattr"命令而使重要的sendmail文件不會被擅自更改,可以提高系統的安全性。具有"+i"屬性的文件不能被修改:它不能被刪除和改名,不能創建到這個文件的鏈接,不能向這個文件寫入數據。只有超級用戶才能設置和清除這個屬性。
為"sendmail.cf"文件設置不可更改位:
[root@deep]#chattr+i /etc/sendmail.cf
為"sendmail.cw"文件設置不可更改位:
[root@deep]#chattr+i /etc/sendmail.cw
為"sendmail.mc"文件設置不可更改位:
[root@deep]#chattr+i /etc/sendmail.mc
為"null.mc"文件設置不可更改位:
[root@deep]# chattr +i /etc/null.mc
為"aliases"文件設置不可更改位:
如果您是使用 Red Hat 7.3 以前的版本,例如 Red Hat 7.1, 7.2, 7.3 ,或者是 Open Linux Server 3.1.1 的話,那麼請先確定一下底下的套件是否已經安裝上去了呢?
[root@test root]# rpm -qa | grep sendmail
sendmail-cf-8.11.6-3
sendmail-8.11.6-3
# 若有屬性相依的問題時,請將您的原版安裝光碟拿出來, mount 上去后,
# 仔細的,一個一個的將相依的套件安裝上去啰! ^_^
[root@test root]# rpm -qa | grep m4
m4-1.4.1-5
[root@test root]# rpm -q mailx
mailx-8.1.1-22
那個sendmail 就是主要的郵件伺服器程序,sendmail-cf 是一些設定檔案,這兩個套件是『一定』要安裝的!至於那個 m4 的套件,則是轉換 sendmail 設定文件的一支程序啰!也要安裝喔!而那個mailx 就是提供最簡單的mail 這支寄信與收信的套件啦!由於我的測試系統是 Red Hat 7.2 ,所以使用的算是比較舊一點點的 sendmail 8.11.6 版,如果您想要換裝新版的 sendmail 8.12.xx 的話,
1、sendmail如何設置虛擬域?
如同Apache一樣,sendmail也允許使用虛擬主機功能,這是通過在mc文件中FEATURE(virtusertable)功能實現的,而虛擬主機的文件預設是/etc/mail/virtusertable.db,它用/etc/mail/virtusertable文件生成,這個文件的形式類似於aliases文件,即左地址 右地址,中間用Tab鍵分開。例如:
[email protected] localuser
這樣一行意味著本來應該發送給[email protected]的郵件如今要發送給本機的用戶localuser。當然,這意味著:第一,你的DNS記錄中,本機應該是otherdomain.com的MX交換器;第二,你的本機sendmail.cw文件或local-host-names應該包含otherdomain.com這個名字。
當然純粹的這樣的域意義不大,但是sendmail還支持郵件虛擬域的參數翻譯。例如:
@testdomain.com [email protected]
意味著所有發往xxx@testdomain的郵件都會被發送到[email protected]。而
@testdomain.com %[email protected]
則代表參數轉義,例如[email protected]的郵件被發送到[email protected],
[email protected]被發送到[email protected]。同樣,這樣的功能也要通過MX記錄和CW文件加上去。
建立virtusertable的方法與建立access的辦法是一樣的:
makemap hash virtusertable.db < virtusertable
然後重新啟動sendmail。
2、如何設定用戶別名?
用戶的別名是由文件/etc/mail/aliases來設定的。最簡單的情況是需要作信件分發的情況。例如,一般情況下,電子郵件出現問題的時候,我們需要把出錯的郵件頭髮送到本機的postmaster用戶,但是也許你的系統上有多個系統管理員,因此每個人都需要得到一份這個郵件頭的拷貝。這種情況下就需要使用用戶別名文件了。
aliases文件的格式是 郵件別名:實際用戶名,如果一個別名有多個用戶就用逗號分開,每個別名一行。例如,要把發給postmaster的信件發送給supervisor和manager,需要寫上這樣一行:
postmaster:supervisor,manager
別名還可以用在這樣的情況,即定義自動的郵件轉發。例如,某個用戶以前在你的系統上接受電子郵件,如今他有了一個新的電子郵件,希望發到你的機器上的郵件自動被轉發到他新的電子郵件地址上,那麼,可以使用類似這樣的別名方式:(假設你的機器是[email protected])
以後發給[email protected]的電子郵件就自動中轉到[email protected]。注意左邊自動加上你的機器名字,所以左邊只能是賬號名字,不能是全限定郵件地址。
另一個常用的辦法是重定向。如果你在模板文件中定義了REDIRECT特性,那麼可以使用這個功能。例如,某個人在你的機器上開了一個賬戶user1,後來遷移到[email protected]。那麼,你可以將其別名寫成
user1: [email protected]
以後當有人向這個地址發信的時候,你的sendmail會將其退回,並且返回一個551 User not local; please try [email protected]的信息。
在使用別名的時候,必須注意的是不要造成循環,例如user1轉發給user2,user2又將其轉發給user1....如此循環。在這種情況下,轉發17次后,sendmail將把它退還給發信人。最常見的錯誤發生在你試圖在轉發郵件的同時在本地保留備份的情況下,例如:
user1: user1,user2
就構成了一個循環。
要在本地保留備份,使用轉義符號,例如
user1: user1,user2
建立了別名文件之後,需要將其初始化,這可以通過newaliases命令完成:
[root@mail mail]# newaliases
/etc/aliases: 17 aliases, longest 31 bytes, 241 bytes total
也可以使用sendmail -bi命令:
[root@mail mail]# sendmail -bi
/etc/aliases: 17 aliases, longest 31 bytes, 241 bytes total
兩種方式實際是完全一樣的。
類似於通過aliases文件進行郵件轉發,用戶也可以使用自己的轉發文件,例如,某個用戶user1想讓發送給自己的郵件全部轉發到[email protected],但是又不希望建立全局的用戶別名,那麼可以在自己的宿主目錄下面建立一個.forward文件,內容只要一行:
就可以了。這種技術可以讓每個用戶自己管理自己的郵件別名。