分類

安裝 Sendmail

在Internet的世界裡,最常用的MTA應該算是sendmail這套軟體,然而,sendmail也算是以難搞出名的軟體。其安裝與設定之繁複,向來有「天書」之稱。

雖然在Sun Solaris的套件之中,已經內建有Sun 版的sendmail 在裡面,但是,Sun的sendmail 向來也算是惡名昭彰:只要是跟sendmail有關的安全性問題,Sun 官方版本的sendmail大概都跑不掉。於是,裝好Sun Solaris之後,很多老手的習慣不是想辦把去把sendmail跑起來,而是直接去抓最新版的sendmail回來自己重裝過.。這樣一來不但省事,而且也比較不會有安全上的顧慮。

在這裡,我們不再花時間告訴您怎麼去搞定在Solaris裡的Sun 版 sendmail 8.12.x,我們會要求您自己去抓sendmail的tar ball回來重新安裝過。

Sendmail的官方網站在http://www.sendmail.org/,關於sendmail的任何消息或是版本更新的問題,您都可以在上面找到相關訊息,而關於安裝上的任何問題,基本上都可以在上面找到你想要的答案。

在DA的部分,一般系統在安裝好後就已經有DA的功能。但系統的DA在被sendmail 呼叫時,因為是已root的身份來更新使用者的mail spool,因此並不會受quota等限制,而導致難以管理使用者信箱大小。所以,如果有其他需求時,可能就要自行安裝其它的DA。最常見的DA應當屬 procmail。
在現今MS Windows工作站氾濫的情況下,大部份的使用者還是習慣使用Outlook、Eudora或是Netscape Mail來收發email。這時候,在我們的Mail System裡面,就必須安裝POP3或是IMAP Server,才可以提供一般使用者收取email。

1 安裝Procmail
因為在後續安裝sendmail 的過程中,如果您要使用 Procmail來當你的DA,您必須先先行安裝,不然,可能在您啟動sendmail的過程中會出現找不到DA的錯誤訊息.
您可以到procmail的官方網站http://www.procmail.org/或鄰近的FTP Site去下載最新procmail,解開後直接編譯即可:

gzip –dc procmail-3.22.tar.gz | tar xvf –
cd procmail-3.22
make
su
# make install-suid

2 安裝Sendmail
您可以到sendmail的網站,ftp://ftp.sendmail.org或是就近的FTP站(例如ftp://ftp.nsysu.edu.tw)下載最新版的sendmail回來。以sendmail 8.12.11為例,下載tar ball回來後,您可以直接解開就來安裝。不過,基本上還是建議您先安裝其他軟體,讓sendmail在安裝時更順暢。

2-1 安裝 Berkeley DB
Berkeley DB是一屬於open source的內崁入式資料庫。它具有可程式化的工具,可以在單獨或主從架構中,內建高效能之資料庫支援。sendmail的相關檔案支援此種資料庫格式。您可以先安裝好這個資料庫,在Build sendmail時會自動偵測是不是有支援該資料庫格式,如果sendmail的安裝程式發現系統中有Berkeley DB的存在,就會自動支援採用。

您可以到到sleepy cat (http://www.sleepycat.com)或是其它FTP站去下載最新版的Berkeley DB後,解開tar ball就可直接Configure後編譯及安裝:

gzip -dc db-4.2.52.NC.tar.gz | tar xvf –
cd db-4.2.52.NC/build_unix/
../dist/configure –preifx=/usr
make
su
# make install

2-2 安裝sendmail
裝好Berkeley DB後,可以開始安裝sendmail.。sendmail的Build程式就會自動支援並採用NEWDB的功能。

基於安全理由,sendmail從8.12.x後除了使用root去打開port 25之外,改用smmsp這個user/group 去執行sendmail。在Solaris 8,如果您要使用8.12.x的sendmail,您需要新增 smmsp 這個user 及 group。如果您使用的是Solaris 9,則可以省去這個步驟。

su
# groupadd -g 25 smmsp
#useradd -u 25 -g 25 -d / -c Sendmail smmsp

解開sendmail的tar ball後,直接使用它的Build scripts來進行編譯及安裝動作:

gzip –dc sendmail.8.12.11.tar.gz | tar xvf –
cd sendmail-8.12.11
sh Build
su
# sh Build install

如果是第一次安裝sendmail,在安裝的過程中可能會出現一些錯誤訊息,那是因為一些目錄不存在的關係。只要將這些目錄先建好,安裝就應該可以順利完成:

# mkdir /usr/share/man/cat1
# mkdir /usr/share/man/cat5
# mkdir /usr/share/man/cat8

安裝好sendmail的基本軟體之後,接下來就是建立需要的設定檔。

第一個要建立的是sendmail.cf。
因為要使用procmail當作DA,所以,我們先使用這個feature:

# cd cf/feature
# cp local_procmail.m4 ../cf/sendmail.mc

再拿cf/cf 的目錄下使用基本的generic-solaris.mc 來用:

# cd ../cf
# cat generic-solaris2.mc >> sendmail.mc

再加幾個features進來:

# cd ../feature
# cat local_procmail.m4 >> ../cf/sendmail.mc
# cat access_db.m4 >> ../cf/sendmail.mc
# cat delay_checks.m4 >> ../cf/sendmail.mc
# cat virtusertable.m4 >> ../cf/sendmail.mc

然後用它的scripts來安裝sendmail.cf和submit.cf檔:

# cd ../cf
# sh Build install-cf

再來, 就是建立相關的設定檔.

2-2-1 /etc/mail/relay-domains
這個檔案列出這台Mail Server所有允許Relay的domain。預設是全部不Relay,檔案內容舉例如下:

# more /etc/mail/relay-domains
207.133.10.
mydomain.com.tw
anotherdomain.com.tw

2-2-2 /etc/mail/access
這個檔案可以用來處理一些SPAM mail,或是您認為有問題的email address、host、IP或是Domain,或是允許某些位址的機器透過您的mail server來relay(這個部份跟之前的 relay-domains功能類似),其檔案內容格式為:

被限制者 限制的功能

舉例來說,如果您的/etc/access檔案如下:

207.135.1.10 RELAY
spam.com REJECT
spam@spammer.com 550 NO SPAM HERE!!

這代表您的mail server可以relay來自207.135.1.10的mail,但會拒絕任何來自spam.com的email,以及spam@spammer.com所寄過來的email,同時在退回email的時候會把「550 NO SPAM HERE!!」加入退信的內容之中。
檔案建好或是更新後,記得用makemap重建access database:

# makemap hash /etc/mail/access < /etc/mail/access

如果您沒有使用Berkeley DB,您可以使用dbm的參數來重建database:

# makemap dbm /etc/mail/access < /etc/mail/access

2-2-3 /etc/mail/local-host-names
這個檔案中包含這台機器所有用到的名字(hostname)及別名等可能會出現的名字,內容舉例說明如下:

# more /etc/mail/local-host-names
localhost
mail
mail.mydomain.com.tw

2-2-4 /etc/mail/aliases
這個檔案是用來處理別名的問題,讓sendmail把信寄給某(些)人,或是讓呼叫某程式去處理寄給某特定帳號的email。 一般格式為:

別名: 帳號, email address, 另一個別名, 或是命令

舉例來說,如果您的/etc/mail/aliases內容如下:

staff: panda,aida,simon
nobody: /dev/null
jimmy: totoro@ms1.hinet.net
all: staff, jimmy
contact: :include:/etc/mail/mailinglist
help: |/usr/bin/sendhelp

其中任何寄給staff的email,就會轉寄給panda、aida和simon;而寄給nobody的email,系統會自動drop掉;對於給jimmy的email,系統會將它再轉寄給totoro@ms1.hinet.net;給all的mail,則會轉給staff 跟jimmy(會再轉給totoro@ms1.hinet.net)。而給contact的email,則會按照/etc/mail/mailinglist檔案所列舉出來的人一個個再轉寄出去;至於給help的email,則由/usr/bin/sendhelp來處理,這個可能是自動回覆一封help的說明文件。

2-2-5 /etc/mail/virtusertable
這個功能跟aliases很類似,但是功能比較強大,不但可以解決alias name「對衝」的問題,而且,在有virtual mail host的需求產生時,這樣的情形就得靠virtusertable.來解決。舉例來說,如果您有domainA.com.tw跟domainB.com.tw兩個domain指到同一台機器,但您的webmaster@domainA.com.tw 及webmaster@domainB.com.tw 希望是給不同的兩個人時, aliases就沒辦法滿足這個需求。此時您就必須使用sendmail的virtusertable feature來滿足這個需求。這個檔案的格式如下:

email address 轉寄過去的email address

以剛剛所舉的例子來說,您的 virtusertable就可以做成如下的設定:

webmaster@domainA.com.tw jimmy@mydomain.com.tw
webmaster@domainB.com.tw totoro@mydomain.com.tw

設定好之後,或是每一次更動設定,您都必須使用makemap重建database:

# makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable

或是:

# makemap dbm /etc/mail/virtusertable < /etc/mail/virtusertable

通通設定好後,您就可以重新把sendmail跑起來了:

# /etc/init.d/sendmail start

原2004/04/06發表於UnixCafe

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>