sendmail是最重要的郵件傳輸代理程序。理解電子郵件的工做模式是很是重要的。通常狀況下,咱們把電子郵件程序分解成用戶代理,傳輸代理和投遞代理。 用戶代理用來接受用戶的指令,將用戶的信件傳送至信件傳輸代理,如:
outlook express、
foxmail等。而投遞代理則從信件傳輸代理取得信件傳送至最終用戶的郵箱,如:procmail。
當用戶試圖發送一封電子郵件的時候,他並不能直接將信件發送到對方的機器上,用戶代理必須試圖去尋找一個信件傳輸代理,把郵件提交給它。信件傳輸代理獲得了郵件後,首先將它保存在自身的緩衝隊列中,而後,根據郵件的目標地址,信件傳輸代理程序將找到應該對這個目標地址負責的郵件傳輸代理服務器, 而且經過網絡將郵件傳送給它。對方的服務器接收到郵件以後,將其緩衝存儲在本地,直到電子郵件的接收者察看本身的電子信箱。
顯然,郵件傳輸是從服務器到服務器的,並且每一個用戶必須擁有服務器上存儲信息的空間(稱爲信箱)才能接受郵件(發送郵件不受這個限制)。能夠看到,一個郵件傳輸代理的主要工做是監視用戶代理的請求,根據電子郵件的目標地址找出對應的郵件服務器,將信件在服務器之間傳輸而且將接收到的郵件緩衝或者 提交給最終投遞程序。有許多的程序能夠做爲信件傳輸代理,可是sendmail是其中最重要的一個,事實證實它能夠支持數千甚至更多的用戶,並且佔用的系統資源至關少。不過,sendmail的配置十分複雜,所以,也有人使用另外的一些工具,如qmail、postfix等等。
當sendmail程序獲得一封待發送的郵件的時候,它須要根據目標地址肯定將信件投遞給對應的服務器,這是經過DNS服務實現的。例如一封郵件的目標地址是[email]ideal@linuxaid.com.cn[/email],那麼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]test@aidgroup.linuxaid.com.cnDN[/email]S中沒有對應的MX記錄,所以sendmail在肯定MX交換器失敗後,將從DNS取得對方的IP地址並直接和對方對話試圖發送郵件。
編輯本段【sendmail工做環境】
sendmail
假設用戶但願在園區網環境中架設一個電子郵件服務器,爲本單位用戶提供郵件服務。該服務器擁有一個合法的IP地址202.99.11.200和一個合法的域名mail.linuxaid.com.cn,而且DNS的MX記錄也指向該域名(注:這裏示例域名和IP地址均爲僞造域名和地址)。爲了知足域名需求,DNS的域數據文件應該包含如下內容:
IN MX 10 mail
mail IN A 202.99.11.200
試驗環境爲:redhat6.二、sendmail.8.11.四、qpopper4.0.3。
編輯本段【sendmail下載】
分別從如下地址下載sendmail和qpopper:
sendmail.8.14.2.tar.gz [url]http://www.sendmail.org/releases[/url]
qpopper4.0.3.tar.gz [url]http://www.eudora.com/qpopper_general/[/url]
編輯本段【sendmail的配置和安裝】
Sendmail是目前使用最爲普遍的一種E-mail服務器。當前其最新的穩定版本爲8.11.4。下載獲得tar.gz格式的壓縮包之後,將其存放在/usr/src目錄下。
解壓軟件包:
[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文件,內容以下:
127.0.0.1 RELAY
202.99.11 RELAY
這裏表示容許本機和202.99.11.0網段中的機器經過該郵件服務器的轉發郵件。其中202.99.11應該是你擁有的局域網絡IP網段的IP地址,只須要寫網絡部分便可。好比說你的用戶有多個網段,只須要在其中設置多個網段便可:
127.0.0.1 RELAY
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]someone@linuxaid.com.cn[/email].這樣的地址收發郵件,故該文件應該包含入下內容:
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編輯器將這些行刪除便可,其實4一、60等行都是空白行而已。刪除之後再從新啓動就應該沒有問題了。
編輯本段【qpopper的安裝配置】
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/popper qpopper -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的支持很是簡單,只須要安裝IMAP軟件包的RPM包:
[root@email RPM]# rpm -ivh imap-4.7-5.i386.rpm (這裏是在6.2環境下,若是在7.x環境下須要安裝更高版本的imap)
而後確保/etc/inetd.conf文件中imap所在行以下所示:
imap stream 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中添加帳號進行測試了。
編輯本段【sendmail測試】
接下來是測試郵件服務器的郵件發送/接收功能,注意:測試時,不要在只對本地用戶進行測試,如:你的域爲abc.com,測試時,不要只在郵件服務器上經過mail、elm等程序測試[email]user1@abc.com[/email]用戶。由於,此時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。 這些技術將在之後的文章內討論。
編輯本段【sendmail的安全】
sendmail是在Unix環境下使用最普遍的實現郵件發送/接受的郵件傳輸代理程序。 因爲sendmail郵件服務器的特色是功能強大而複雜,所以爲保證Sendmail的安全性,須要做如下一些工做。
一、設置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
二、"/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"程序使改動生效
三、避免你的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"命令,而這些命令偏偏被那些不守規矩的人所濫用。
四、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"新聞組的夥伴們推薦的合法作法。
五、限制能夠審覈郵件隊列內容的人員
一般狀況下,任何人均可以使用"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
六、限制處理郵件隊列的權限爲"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
七、在重要的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"文件設置不可更改位:
編輯本段【使用RPM 安裝sendmail】
若是您是使用 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 的話,
編輯本段【sendmail疑難解答】
一、sendmail如何設置虛擬域?
如同Apache同樣,sendmail也容許使用虛擬主機功能,這是經過在mc文件中FEATURE(virtusertable)功能實現的,而虛擬主機的文件缺省是/etc/mail/virtusertable.db,它用/etc/mail/virtusertable文件生成,這個文件的形式相似於aliases文件,即左地址 右地址,中間用Tab鍵分開。例如:
[email]someone@linuxaid.net.cn[/email] localuser
這樣一行意味着原本應該發送給[email]someone@otherdomain.com[/email]的郵件如今要發送給本機的用戶localuser。固然,這意味着:第一,你的DNS記錄中,本機應該是otherdomain.com的MX交換器;第二,你的本機sendmail.cw文件或local-host-names應該包含otherdomain.com這個名字。
固然純粹的這樣的域意義不大,可是sendmail還支持郵件虛擬域的參數翻譯。例如:
@testdomain.com [email]test@linuxaid.com.cn[/email]
意味着全部發往xxx@testdomain的郵件都會被髮送到[email]test@linuxaid.com.cn[/email] 。而
@testdomain.com %[email]1test@linuxaid.com.cn[/email]
則表明參數轉義,例如[email]user1@testdomain.com[/email]的郵件被髮送到[email]user1test@linuxaid.com.cn[/email] ,
[email]user2@testdomain.com[/email]被髮送到[email]user2test@linuxaid.com.cn[/email] 。一樣,這樣的功能也要經過MX記錄和CW文件加上去。
創建virtusertable的方法與創建access的辦法是同樣的:
makemap hash virtusertable.db < virtusertable
而後從新啓動sendmail。
二、如何設定用戶別名?
用戶的別名是由文件/etc/mail/aliases來設定的。最簡單的狀況是須要做信件分發的狀況。例如,通常狀況下,電子郵件出現問題的時候,咱們須要把出錯的郵件頭髮送到本機的postmaster用戶,可是也許你的系統上有多個系統管理員,所以每一個人都須要獲得一份這個郵件頭的拷貝。這種狀況下就須要使用用戶別名文件了。
aliases文件的格式是 郵件別名:實際用戶名,若是一個別名有多個用戶就用逗號分開,每一個別名一行。例如,要把發給postmaster的信件發送給supervisor和manager,須要寫上這樣一行:
postmaster:supervisor,manager
別名還能夠用在這樣的狀況,即定義自動的郵件轉發。例如,某個用戶之前在你的系統上接受電子郵件,如今他有了一個新的電子郵件,但願發到你的機器上的郵件自動被轉發到他新的電子郵件地址上,那麼,可使用相似這樣的別名方式:(假設你的機器是[email]joe@linuxaid.com.cn[/email])
joe:joe@xxxxx.com
之後發給[email]joe@linuxaid.com.cn[/email]的電子郵件就自動中轉到[email]joe@newaddr.com[/email]。注意左邊自動加上你的機器名字,因此左邊只能是帳號名字,不能是全限定郵件地址。
另外一個經常使用的辦法是重定向。若是你在模板文件中定義了REDIRECT特性,那麼可使用這個功能。例如,某我的在你的機器上開了一個帳戶user1,後來遷移到[email]user2@server2.com[/email]。那麼,你能夠將其別名寫成
user1: [email]user2@server2.com.REDI[/email]RECT
之後當有人向這個地址發信的時候,你的sendmail會將其退回,而且返回一個551 User not local; please try [email]user2@server2.com[/email]的信息。
在使用別名的時候,必須注意的是不要形成循環,例如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]xxxxx@xxxxxx.com[/email],可是又不但願創建全局的用戶別名,那麼能夠在本身的宿主目錄下面創建一個.forward文件,內容只要一行:
[email]xxxxxx@xxxxx.com[/email]
就能夠了。 這種技術可讓每一個用戶本身管理本身的郵件別名。
編輯本段【sendmail使用技巧】
一、爲何不能配置郵件服務器爲open relay的?
若是系統管理員將本身的郵件服務器設置爲open relay,將會致使一些垃圾郵件發送者將你的郵件服務器做爲轉發自圾郵件的中繼站,這將使垃圾郵件的接收者將矛頭對準你,可能會致使報復性的郵件×××;垃圾郵件還能消耗你大量的資源,佔用你的帶寬。更爲糟糕的事情多是你的名字可能會上了黑名單,成爲其餘郵件接收者共同抵制的目標,你的郵件將被這些接收者所拒絕。
二、什麼是郵件轉發(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]user@somewherer.net[/email]
250 OK
RCPT TO: [email]user1@elsewhere.net[/email]
郵件的接收者[email]user1@elsewhere.net[/email]中的域名並不必定是本地域名,這時候本地系統可能有兩種回答,接受它:
250 OK
或者拒絕接受它:
553 sorry,.that domain isnot in my domain list of allowed recphosts
第一種狀況下,本地email服務器是容許relay的,它接收並贊成傳遞一個目的地址不屬於本地域名的郵件;而第二種狀況則不接收非本地郵件。
email通常都有一個配置文件,其決定了是否接受一個郵件。只有當一個RCPT TO命令中的接收者地址的域名存在於該文件中時,才接受該郵件,不然就拒絕該郵件。若該文件不存在,則全部的郵件將被接受。當一個郵件服務器無論郵件接收者和郵件接收者是誰,而是對全部郵件進行轉發(relay),則該郵件服務器就被稱爲開放轉發(open relay)的。當email服務器沒有設置轉發限制時,其是開放轉發的。
三、sendmail如何限制郵件轉發 由於Send Mail 爲了怕變成廣告信轉信站因此安裝後只線本機上的 使用者寄信,要讓它爲你轉信須要修改一點東西。 修改 /etc/mail/access 檔案在裏面增長下面幾行。 localhost RELAY 192.168.1 RELAY 就能夠將 192.168.1 網域裏的信轉出去了。