Categories

A sample text widget

Etiam pulvinar consectetur dolor sed malesuada. Ut convallis euismod dolor nec pretium. Nunc ut tristique massa.

Nam sodales mi vitae dolor ullamcorper et vulputate enim accumsan. Morbi orci magna, tincidunt vitae molestie nec, molestie at mi. Nulla nulla lorem, suscipit in posuere in, interdum non magna.

安裝 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>