My FAQ,最新最全的IT技术FAQ
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 未整理篇 | 技术讨论
  当前位置: > 操作系统 > Linux > Linux综合
簡易 Mail Server 架設 -- Postfix 設定
作者:未知 时间:2005-09-13 21:49 出处:Blog.ChinaUnix.net 责编:My FAQ
              摘要:簡易 Mail Server 架設 -- Postfix 設定

原文出處: http://linux.vbird.org/linux_server/0390postfix.php

在介紹完了 sendmail 之後,您是否覺得~唉!怎麼 sendmail.cf 這個設定檔這麼難搞定~還得藉由 m4 scripts 才能搞定!而且, sendmail 需要考慮到相當多的安全設定項目 ( Security ),否則很容易一不小心就被攻擊了!那麼有沒有更簡單、更安全的郵件系統啊!當然有啊!那就是 Postfix 這個咚咚!Postfix 的作者有鑑於 sendmail 是這樣成功的一個 MTA ,但是偏偏有點小問題,所以該作者站在兼容的立場上面寫出這個幾乎可以完全取代 sendmail 的 MTA !此外, Postfix 還更加的安全呢,真是很不錯的一個 mail server 的替代方案啊!


前言
  :本章學習之前你需要先知道的知識
  :為什麼要有 Postfix 呢
套件安裝
  :使用 RPM 安裝完整的 Postfix + POP3 + SMTP + Procmail (Cyrus-SASL 1.5.xx 設定方式)
  :Mandrake 9.0
  :Red Hat 9
  :使用 Tarball 安裝完整的 Postfix + POP3 + SMTP + Procmail (Cyrus-SASL 2.xx 設定方式)
主機的設定
  :Postfix 的結構
  :基礎設定 (設定接受的主機名稱)
  :重要觀念:預設 Relay 與 收信 流程
  :啟動 smtp 郵件認證功能
  :幾個相關的檔案說明
用戶端的使用說明
關於郵件主機安全的設定
  :關於 Open Relay Data Base
  :關於 Procmail 用法
  :關於郵件過濾的規則設定
  :問題信件的送達
其他應用說明
參考資源
本章習題練習


前言:
在開始介紹 Postfix 這個伺服器之前,得先告訴您的是,這個 Postfix 的用途是『郵件伺服器』,那麼我們在前一章『Sendmail 伺服器』裡面已經提過了 mail server 的相關原理與咦鬟^程,這個 Postfix 與 sendmail 是類似的東西,那就是『MTA』啦,既然都是 MTA ,使用的協定也相同,同時,這個 Postfix 最早之前的用途也是想要用來『取代 sendmail 』。所以,為了節省筆墨,也為了未來進行修改的時候不要有太多的版本 ( 意思是這裡 copy 一份 mail 原理,那裡又有一份原稿~ ) ,因此上,在進行本章的學習之前,請『務必』前往『簡易 Mail server -- sendmail』讀一讀 Mail server 的原理與相關的說明啊!
 

本章學習之前你需要先知道的知識
 
上面剛剛提到,學習本章你必須要知道 Mail Server 的相關知識才行,在這裡,我們不再說明已經提過的咚咚,請自行再前往翻閱。由於架設某種伺服器的第一步就是要瞭解該伺服器的工作原理,因此,在架設 Postfix 之前,您至少要知道以下的幾個咚咚:
  1. Mail Server 能否咦髋c DNS ( MX 與 A recode )的相關性為何?
  2. 什麼是 MTA, MUA, MDA 與 Mail box, Mailing list 等相關的術語,及其內容所代表的意義!
  3. 什麼是 smtp, pop3 以及 imap 協定,他們的用途分別是什麼?
  4. 什麼是 Relay 與 Open Relay ?
  5. 什麼是 SMTP 郵件認證?
  6. 什麼是郵件的別名與轉遞( aliases 與 forward )?
  7. 什麼是 Procmail 與什麼是 ORDB 呢?
如果您不曉得上面問題的答案,請不要『白目』的繼續往下看 ^_^,先前往『簡易的 sendmail 伺服器』瞧一瞧相關的原理之後,再來這裡吧!慢點學習不打緊,學的不精....可能會有害啊! @_@
 

為什麼要有 Postfix 呢?
 
這是個很有趣的問題:『為什麼要有 Postfix 呢?有了 sendmail 不就可以了嗎?!』說到這個就要談到 postfix 的由來了!
 
Postfix 是由 Wietse Zweitze Venema 先生(http://www.porcupine.org/wietse/)所發展的。早期的 mail server 都是使用 sendmail 架設的,還真的是『僅此一家,絕無分號!』 ^_^ !不過,Venema 博士覺得 sendmail 雖然很好用,但是畢竟不夠安全,尤其效能上面並不十分的理想,最大的困擾是....他的設定檔 sendmail.cf 真的是太難懂了!對於網管人員來說,要設定好 sendmail.cf 這個檔案,真不是人作的工作~
 
為了改善這些問題, Venema 博士就在 1998 年利用他老大在 IBM 公司第一個休假年進行一個計畫:『設計一個可以取代 sendmail 的軟體套件,可以提供網站管理員一個更快速、更安全、而且"完全相容"於 sendmail 的 mail server 軟體!』這個計畫還真的成功了!而且也成功的使用在 IBM 內部,可以說是完全取代了 sendmail 這個郵件伺服器!在這個計畫成功之後, Venema 博士也在 1998 年首次釋出這個自行發展的郵件伺服器,並定名為 VMailer。不過, IBM 的律師卻發現一件事,那就是 VMailer 這個名字與其他已註冊的商標很類似,這樣可能會引起一些註冊上面的困擾。為了避免這個問題,所以 Venema 博士就將名稱改為 Postfix !這個 Postfix 有『在什麼什麼之後修正』的意思。鳥哥個人認為, Venema 先生最早的構想並不是想要『創造一個全新的 Mail server 軟體,而是想要製造一個可以完全相容於 sendmail 的軟體』,所以,Venema 先生認為他自行發展的軟體應該是『改良 sendmail 的缺失』,所以才稱為 Postfix 吧!取其意為:『在 sendmail 之後的改良的郵件伺服器軟體!』
 
所以啦, Postfix 設計的理念上面,主要是針對『想要完全相容於 sendmail』所設計出來的一款『內在部分完全新穎』的一個郵件伺服器軟體。就是由於這個理念,因此,Postfix 改善了 sendmail 安全性上面的問題,改良了 mail server 的工作效率,更由於其設定檔完全為 ASCII 碼,且設定內容都是『人類看的懂得語言!』因此,你可以輕易的由 sendmail 改良到 Postfix 上面!這也是當初 Venema 博士的最初構想啊!就是基於這個構想,所以, Postfix 在外部設定檔案的支援度,與 sendmail 幾乎沒有兩樣,同樣的支援 aliases 這個檔案,同樣的支援 ~/.forward 這個檔案,也同樣的支援 SASL 的 SMTP 郵件認證功能等等!所以,呵呵!趕緊來學一學怎樣架設 Postfix 這個相當出色的郵件伺服器吧! ^_^

套件安裝
跟之前一樣的,我們需要的 mail server 功能有哪些呢?
  • 具有 smtp 的功能;
  • 具有 pop3 的功能;
  • 具有 procmail 過濾郵件的功能;
  • 具有 Open Relay Data Base 抵擋的功能;
為達成上述的功能,所以你至少需要底下的幾個套件:
  • cyrus-sasl
  • procmail
  • postfix
  • imap(同時支援 pop3 及 imap 兩個協定)
如果您是使用 Mandrake 後期版本的話,那麼恭喜您,由於 Mandrake 預設就是使用 Postfix 做為郵件伺服器,並且在安裝的時候就已經將 Postfix 安裝到你的系統當中了。至於 Red Hat 9 同樣的也提供了 Postfix 喔!而如果您是使用非 postfix 為郵件伺服器的 Linux distribution ,呵呵!仔細的查看後面介紹的 Tarball 安裝的方式吧!
 

使用 RPM 安裝完整的 Postfix + POP3 + SMTP + Procmail
 
底下我們分 Mandrake 9.0 與 Red Hat 9 這兩個主要 Linux distribution 來介紹 Postfix + Cyrus-SASL 的方法喔!
 
Makdrake 9.x 版本
如果你是使用 Mandrake 之類的 Linux distribution 的話,由於他預設是以 Postfix 這個優良的郵件伺服器系統,所以您可以不費吹灰之力的,就將 Postfix 以 RPM 安裝完畢囉!基本上,如果是 Mandrake 的話,你需要安裝的套件大致上有:
  • SMTP 認證套件: cyrus-sasl ( cyrus-sasl-1.5.27-5mdk 以及其他認證機制函式庫 )
  • Postfix 郵件伺服器: postfix ( postfix-1.1.11-4mdk )
  • POP3 伺服器: imap ( imap-2001a-9mdk, imap-devel-2001a-9mdk 兩個 )
  • 郵件分析軟體:procmail ( procmail-3.22-3mdk )
你至少要安裝的套件就有上面這幾個,同時,請拿出您的原版光碟將上面的套件全部安裝吧!安裝的方法我們在『鳥哥的 Linux 私房菜 -- 基礎學習篇』介紹過的 RPM 與 Tarball 安裝方法裡面提過多次了,請自行參考喔!安裝完畢之後,你的主機就已經具有 Postfix 這個系統啦!不過,由於我們還要提供 SMTP 以及其他相關的功能,所以這裡我們必需要確認一下各個套件是否都完全的安裝了呢?底下我們就一個一個的來設定吧!(註:請特別留意 Cyrus-sasl 的版本,因為不同的版本他的函式庫所在目錄與設定檔都不相同!因此,在本篇文章中,您會發現我使用 Tarball 安裝的 2.xx 版本與使用 RPM 安裝的 1.5.xx 版本設定檔的內容不相同,不要懷疑,確實是如此的喔! )
 
安裝 cyrus-sasl
1. 安裝
# 安裝的方法很簡單,就是使用 RPM 即可!不過,請先確認是否已經安裝!
[root@test root]# rpm -qa | grep sasl
libsasl7-1.5.27-5mdk
cyrus-sasl-1.5.27-5mdk
libsasl7-devel-1.5.27-5mdk
libsasl7-plug-plain-1.5.27-5mdk
libsasl7-plug-login-1.5.27-5mdk

# 如果尚未安裝該套件,請拿出你的光碟片, mount 光碟,然後找尋該檔案,
# 直接安裝他吧!不過要注意的是,上面的檔案都要安裝喔!因為我們使用的
# 是最基本的 plain 與 login 這兩個機制,所以至少我們要安裝上面五個咚咚!
[root@test root]# rpm -ivh cyrus-sasl-1.5.27-5mdk.i586.rpm
# 如果有發生屬性相依的問題,請自行再將需要的檔案自光碟當中找出,
# 然後加以安裝吧!

2. 設定與啟動
# 由於 Cyrus-sasl 在 Mandrake 當中是 1.5.27 版本,所以他能支援的項目有:
shadow : 使用 /etc/shadow 做為認證碼;
pam  : 使用 pam 模組做為認證,這個需要在 /etc/pam.d 這個目錄下新增
     一個名為 smtp 的檔案,並設定檔案內容才行!
sasldb : 使用 SASL 的認證函式庫,使用這個功能時,你必需要額外的
     指定 1.函式庫的名稱; 2.使用 saslpasswd 程式增加使用者!
     鳥哥個人認為這個功能不太好用,因為每新增一個使用者需要主動的
     幫使用者新增帳號、密碼到認證函式庫中,不太方便!
     不過如果您還使用其他的伺服器如 LDAP, MySQL 等等軟體時,
     則這個功能可就大大的有幫助啦!因為他可以分享帳號與密碼吶!
pwcheck: 這個功能就不錯啦! pwcheck 是一個服務(daemon),必需要在
     啟動 postfix 之前就啟動啦,因為 sasl 的認證就靠這個 daemon,
     基本上,他可以經由讀取 /etc/shadow 的資料來提供 client 端
     認證的功能!目前我們 Mandrake 9.0 預設使用的是這個 daemon!
# 給他設定開機時啟動 pwcheck 的功能吧!
[root@test root]# vi /etc/rc.d/rc.local
# 在這個檔案當中最底下新增一行:
/usr/sbin/pwcheck
# 並且立刻執行這個 daemon 喔:
[root@test root]# /usr/sbin/pwcheck
[root@test root]# ps -aux | grep pwcheck
root 12602 0.0 0.5 1460 348 ? S 02:59 0:00 /usr/sbin/pwcheck
# 看到沒!要出現這個咚咚才算是有啟動 pwcheck 喔!

# 在 Sendmail 當中,我們必需建立一個名為 Sendmail.conf 的檔案,來告訴
# sasl 我們所需要的認證模式,那麼在 postfix 當中也一樣,我們必需要建立
# 一個檔案名稱為smtpd.conf來告訴 sasl ,喝!我 postfix 要的認證方式為何!
# 所以你需要這樣做:
[root@test root]# cd /usr/lib/sasl
[root@test sasl]# echo 'pwcheck_method: pwcheck' > smtpd.conf

# 上面這樣做完之後,系統就知道了:
1. postfix 要用 SMTP 認證時會去讀取 /usr/lib/sasl/smtpd.conf 並且知道
  是以 pwcheck 這支程式進行身份認證的動作;
2. 而 pwcheck 這支程式會主動去讀取 /etc/shadow ,裡面的密碼做認證
# 到此為止,就已經設定好了 cyrus sasl 的部分啦!

 
安裝 postfix
1. 安裝
# 安裝的方法很簡單,就是使用 RPM 即可!不過,請先確認是否已經安裝!
[root@test root]# rpm -qa | grep postfix
postfix-1.1.11-4mdk

# 如果尚未安裝該套件,請拿出你的光碟片, mount 光碟,然後找尋該檔案,
# 直接安裝他吧!
[root@test root]# rpm -ivh postfix-1.1.11-4mdk.i586.rpm

# 這樣就安裝完畢啦!主機設定的部分請參考下一節喔!

 
安裝 procmail
1. 安裝
[root@test root]# rpm -qa | grep procmail
procmail-3.22-3mdk

2. 設定:
# 在設定方面,這主要與 procmail 有關而已,您可以下載 procmailrc
# 並放置到 /etc/ 底下即可詳細的資料請參考上一章簡易 sendmail 之說明

 
安裝 imap
1. 安裝
[root@test root]# rpm -qa | grep imap
imap-2001a-9mdk
imap-devel-2001a-9mdk

2. 設定:
# 直接設定成為開機啟動即可:
[root@test root]# chkconfig --add ipop3
[root@test root]# /etc/rc.d/init.d/xinetd restart
# 這樣就已經可以收信件啦!

 
安裝的地方當中,重點在於 Cyrus-SASL 的安裝啦!由於我們需要有 SASL 的支援,所以必需要安裝這個咚咚!並且也需要設定 smtpd.conf 這個檔案!這樣就已經差不多 OK 啦!接下來請繼續參考主機設定的地方嚕!
 
Red Hat 9 版本:
什麼?!Red Hat 9 也同時提供 Postfix 啊?!沒錯的啦!呵呵!很高興吧!所以說, Red Hat 9 不但提供了 sendmail 給我們使用,還額外提供了 Postfix 讓我們可以隨意的轉換郵件伺服器軟體呢!不過,在 Red Hat 9 的 Cyrus-sasl 已經是 2.xx 版本了,而且還主動的提供相容於 1.5.xx 版本的函式庫呢!真是相當的棒啊!但是因為 Red Hat 9 提供的 Postfix 還是使用 1.xx 版,因此我們在 Red Hat 9 預設的 Postfix 郵件伺服器中,還是使用 Cyrus SASL 1.5.xx 的函式庫喔!所以也就無法使用 saslauthd 這個機制了!並且, Red Hat 9 並沒有提供 pwcheck 這個程式,所以在 Red Hat 9 底下的 Cyrus SASL 認證機制就需要使用 sasldb 了!至於安裝的方法最簡單的方式就是以我們在 網路升級套件 那一章節提到的 APT 來進行安裝即可!
 
1. 安裝:
[root@test root]# apt-get install postfix
[root@test root]# apt-get install cyrus-sasl
[root@test root]# apt-get install procmail
 
很簡單吧!這樣就搞定了 Red Hat 9 的 Postfix 囉!(注意, Mandrake 與 Red Hat 不同版本所使用的 Cyrus SASL 機制並不相同喔!在 Mandrake 當中預設是 pwcheck 而在 Red Hat 則預設使用 sasldb 這個驗證機制!並且,由於 Red Hat 9 在編譯 postfix 的時候使用的是 SASL version 1 ,所以無法使用 saslauthd 這個好用的機制,鳥哥認為,您最好使用 Tarball 來安裝您的 Postfix 在您的 Red Hat 9 上面喔!)
 

使用 Tarball 安裝完整的 Postfix + POP3 + SMTP + Procmail (適用任何版本的 Linux 喔!)
 
以 Tarball 安裝 Postfix 也不困難,比起 sendmail 來說,要簡單的很多喔!我們這裡選擇的主要套件有: 至於 procmail 與 imap 兩個套件都使用 Linux distribution 提供的 RPM 版本就好了,不需要額外的改裝啊!那麼底下就來談一談怎麼安裝吧!(註: Cyrus SASL 與 Cyrus SASL2 這兩個不同版本的 SASL 函式庫放置的目錄並不相同,所以你可以分別安裝 cyrus version 1 與 version 2 喔!在鳥哥的案例當中,還不會發生問題就是了!另外,如果您是 Red Hat 9 的使用者,由於 Red Hat 9 已經提供了 Cyrus SASL version 2 了,所以您可以直接略過 Cyrus SASL 的安裝部分,直接到 Postfix 2.xx 的安裝呢!)
 
安裝 Cyrus SASL 2.xx 版本!
1. 首先將資料解壓縮(假設您將我們網站的檔案捉到 /root 底下了!)
[root@test root]# cd /usr/local/src
[root@test src]# tar -zxvf /root/cyrus-sasl-2.1.12.tar.gz
.....(略).....最後建立一個 cyrus-sasl-2.1.12 的目錄

2. 再來就是設定你的 cyrus SASL 的參數以及編譯囉!
[root@test src]# cd cyrus-sasl-2.1.12
[root@test cyrus-sasl-2.1.12]# ./configure
> --prefix=/usr/local/cyrus-sasl2 --enable-login --enable-plain
> --enable-pwcheck --with-saslauthd=/var/run
# 注意上面的語法!!那個 是跳脫字元喔!後面直接 Enter !
# 不要接任何空白或者是 tab 按鍵!若有問題,請到 Shell 看看!
# 至於那個 pwcheck 的項目,就是要用來做為密碼確認的一個咚咚囉!

[root@test cyrus-sasl-2.1.12]# make clean && make
[root@test cyrus-sasl-2.1.12]# make install
# 上面三個步驟會花去一些時間,請耐心等待~
# 而由於我們剛剛設定了 --prefix=/usr/local/cyrus-sasl2 這個參數,
# 所以, make install 之後,我們有用的函式庫會在
# /usr/local/cyrus-sasl2/lib/sasl2 這個路徑當中,但是, cyrus 程式
# 會主動去找 /usr/lib/sasl2 這個目錄!所以,我們必需要做連結檔!
# 才可以讓未來我們的 postfix 可以直接找的到我們所要的函式庫喔!

[root@test cyrus-sasl-2.1.12]# cd /usr/lib
[root@test lib]# ln -s /usr/local/cyrus-sasl2/lib/* .
# 這樣就建立起連結檔囉!很簡單吧! ^_^不過要注意喔,
# 上面這一行最後面那個小數點『.』不要忘記加了!

3. 準備建立 Postfix 與 cyrus SASL 使用的簡易設定檔:
[root@test lib]# cd /usr/lib/sasl2
[root@test sasl2]# echo 'pwcheck_method: saslauthd' > smtpd.conf
[root@test sasl2]# echo 'mech_list:plain login' >> smtpd.conf
# 注意了!一般來說, Postfix 會使用 SASL 這個函式庫裡面相關的設定檔,
# /usr/lib/sasl2/smtpd.conf 這個檔案的設定就是 Postfix 的預設使用 SASL 的
# 參數檔案,與 1.5.xx 版本不太相同的地方是, 2.xx 版本使用不同的機制:
auxprop :使用 sasldb2 這個共享資料庫,同樣需要使用共享密碼檔案喔!
     所以一般來說,單純的 Postfix 比較少使用這種機制;
saslauthd:使用 saslauthd 這個 daemon 進行認證的工作,所以幾乎
     不需要其他的設定值哪,指定 saslauthd 就好啦! ^_^
pwcheck :使用與 1.5 版相似的認證 daemon ,不過在 2.xx 版本裡面這個模式
     支援度比較沒有這麼好的啦,所以請愛用 saslauthd 囉!
# 我們使用 SASL 預設的 saslauthd 這支程式做為密碼認證的 daemon。
# 至於 mech_list:plain login 是列出支援的認證機制的意思,我們使用的
# 是極為簡單的 login 與 plain 兩種機制而已!

4. 建立一些需要的參數:
[root@test sasl2]# vi /etc/man.config
# 新增底下這一行之後,未來我們就可以透過 man 這個工具來查詢 sasl
# 相關的指令的用法了!而不需要修改任何咚咚!不過要注意的是,
# 這個檔案在每個 Linux distributions 當中不見得相同,例如 Open Linux
# 檔名是 /etc/man.conf 呢!
MANPATH /usr/local/cyrus-sasl2/man

5. 檢驗 saslauthd 這支程式是否可行!
# 在 cyrus-sasl 的原始碼裡面提供了一支小程式用來判斷 saslauthd 的認證機制
# 是否成功的啟動了,這個小程式就是 testsaslauthd 囉!在剛剛原始碼目錄下,
# 所以你可以這樣做:
[root@test sasl2]# /usr/local/cyrus-sasl2/sbin/saslauthd -a shadow
# 執行之後, saslauthd 的 PID 會被紀錄到 /var/run/mux.pid 這個檔案!
[root@test sasl2]# cd /usr/local/src/cyrus-sasl-2.1.12/saslauthd/
[root@test saslauthd]# make testsaslauthd
[root@test saslauthd]# ./testsaslauthd -u userID -p 'yours.passwd'
0: OK "Success."
# 若顯示 OK 的話!那麼就是成功啦!很好!我喜歡~

6. 設定開機時啟動
[root @test saslauthd]# vi /etc/rc.d/rc.local
# 加入這一行:
/usr/local/cyrus-sasl2/sbin/saslauthd -a shadow

 
安裝 Postfix 2.xx 版本!
0. 先確認有沒有這個檔案存在!因為我們的 Postfix 會使用到很多資料庫啊!
[root@test root]# locate pcre.h | grep include
/usr/include/pcre.h
# 這個檔案也有可能存在於 /usr/include/pcre/pcre.h 裡面!不要擔心,存在就好了
# 如果沒有存在的話,例如 Mandrake 9.0 預設狀態可能並不會主動安裝這個套件,
# 請自行拿出原版光碟,安裝 MDK 的 libpcre0xxxx 檔案,至於 redhat 等
# 其他版本,請自行安裝 pcre 相關的套件吧!在 Red Hat 9 則是需要
# pcre-devel 這個套件喔! ( apt-get install pcre-devel)

1. 首先將資料解壓縮(假設您將我們網站的檔案捉到 /root 底下了!)
[root@test root]# cd /usr/local/src
[root@test src]# tar -zxvf /root/postfix-2.0.4.tar.gz
.....(略).....最後建立一個 postfix-2.0.4 的目錄

2. 清除規則並且建立新的使用 SMTP 的規則給 postfix
[root@test src]# cd /usr/local/src/postfix-2.0.4
[root@test postfix-2.0.4]# make tidy # 清除規則
[root@test postfix-2.0.4]# make makefiles CCARGS="-DUSE_SASL_AUTH
> -I/usr/local/cyrus-sasl2/include/sasl/"
> AUXLIBS="-L/usr/local/cyrus-sasl2/lib -lsasl2"
# 上面的動作在建立 Makefile 囉!其中那個 -CCARGS 後面接的 -DUSE_SASL_AUHT
# -I/usr/local/cyrus-sasl2/include/sasl 其中 -I 後面的路徑就是 SASL2 的
# 函式庫所在的目錄喔!請依照您安裝的 sasl2 目錄所在而定!
[root@test postfix-2.0.4]# make
# 就是開始編譯啦!過程有點久喔!如果有出現任何 Error 時,
# 請將 error 仔細的查看一下吧!通常最大的原因都是一些
# include 檔案沒有安裝,也就是某些重要的套件沒有安裝之故,
# 例如 pcre.h 這個檔案就是一個例子囉!
# 解決的方法就是將該缺乏的套件安裝進去系統啦!
# 如果是 Red Hat 9 的話,可以這樣下達指令:
# make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/include/sasl"
# AUXLIBS="-L/usr/lib/sasl2 -lsasl2"
# 因為 Red Hat 9 的 SASL2 路徑在 /usr/include/sasl ,這裡要特別的強調,
# 否則由於 Red Hed 9 同時提供 Cyrus SASL 1.5.x 以及 2.x.x 的版本,
# 可能會造成程式的誤判,那麼很可能會出現下列的錯誤喔:
# fatal: SASL per-connection security setup
# 上面的錯誤訊息出現在 /var/log/maillog 中!

3. 安裝前準備工作:
# 如果您的系統是由 sendmail 要改換到 Postfix 的話,你不需要移除 sendmail ,
# 不過卻需要進行一些小手術喔!
[root@test postfix-2.0.4]# mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
[root@test postfix-2.0.4]# mv /usr/bin/newaliases /usr/bin/newaliases.OFF
[root@test postfix-2.0.4]# mv /usr/bin/mailq /usr/bin/mailq.OFF
[root@test postfix-2.0.4]# chmod 755 /usr/sbin/sendmail.OFF
> /usr/bin/newaliases.OFF /usr/bin/mailq.OFF

# 此外,還需要建立一個名為 postdrop 的群組與 postfix 的使用者喔!
[root@test postfix-2.0.4]# groupadd -r postdrop
[root@test postfix-2.0.4]# useradd -r -s /bin/false postfix
# 建立一個系統資料帳號吶!
[root@test postfix-2.0.4]# echo 'postfix: root' >> /etc/aliases
# 請注意,如果您之前安裝過 sendmail 的話,那麼不同版本的 sendmail 他的
aliases 放置的目錄並不相同,所以上面這行指令請依您的主機來設定!

4. 開始安裝 Postfix 到 /etc/postfix 這個目錄下:
[root@test postfix-2.0.4]# make install
# 底下會出現一大堆的問題集,不管如何,幾乎按下 enter 就對啦!
# 除了底下這兩個問題(最後兩個)可以選擇將 readme 檔案存下來喔!
Please specify the destination directory for the Postfix sample
configuration files.
sample_directory: [/etc/postfix] /etc/postfix/sample

Please specify the destination directory for the Postfix README
files. Specify "no" if you do not want to install these files.
readme_directory: [no] /etc/postfix/readme_files

# 這樣就安裝成功啦!接下來請開始查閱 主機的設定 那一節囉!

 

主機的設定
    安裝完畢 postfix 之後,接著下來就是設定了!同樣的,在設定主機之前,有幾個東西是您必需先取得的喔:
     
    1. 具有合法的 hostname ,或者是經過授權的 DNS 主機來設定您自己的主機名稱(hostname);
    2. 您的 hostname 最好擁有一個 MX 的紀錄(record);
    3. 至少一定要瞭解到什麼是 Relay 的問題,以及規劃一下您所想要開放 relay 的網域;
     
    你至少需要有這些資料才行吶!好了,我先假設一下我的案例好了:
     
    1. 我的 hostname 為 vbird.adsldns.org;
    2. 我的 hostname 還有個別名為 www.vbird.adsldns.org ,也就是說, vbird.adsldns.org 與 www.vbird.adsldns.org 都指向同一個 IP ;
    3. 我的 domain name 為 adsldns.org ;
    4. 我預計開放的 relay 網域為 vbird.org 這個網域,與內部的 192.168.1.0/24 這個網域,還要可以使用 access 這個檔案的設定功能!
     
    開始來瞭解 postfix 囉! ^_^
     

    Postfix 的結構
     
    在主機的設定之前我們得先瞭解一下 postfix 的整體構造,以方便以後來處理我們的檔案吶!所以底下我們會先針對 postfix 這個套件的結構做個簡單的說明,然後再針對各個設定項目來進行說明囉!Postfix 的設定檔幾乎完全都在 /etc/postfix 裡面,至於執行檔則在 /usr/sbin 裡面,我們分別來談一談幾個主要的注意事項吧!
     
    • 設定檔Postfix 的設定檔都在 /etc/postfix 裡面,主要的設定檔有:
     
      • /etc/postfix/main.cf :這個就是最重要的 postfix 的設定檔了!等一下我們談到的設定都在這個檔案裡面進行修改的動作!基本上,他本身就是一個簡單的說明文件檔啦!不過,要注意的是,在你修改完成了 main.cf 之後,請記得『一定要重新 reload 或重新 restart postfix 才行!』
       
      • /etc/postfix/master.cf:這個檔案是另外一個重要的 postfix 設定檔!他主要是規定了 postfix 每個程序的咦鲄担?
       
      • /etc/postfix/access :這個檔案與 sendmail 的 access 是相同的!都是用來做為 relay 或者是 deny 某些 IP 與 hostname 的檔案!不過,要啟用他還是得要修改 main.cf 才行!
       
      • /etc/postfix/aliases : 這個檔案與 sendmail 的 aliases 也是相同的!同樣的可以做為別名之用,所以您可以回頭去翻一翻這個檔案的用法喔!
       
      • /etc/postfix/pcre_table regexp_table relocated : 這幾個檔案可以做為郵件的過濾之用喔!可以使用正規表示法來進行郵件過濾(filter)的規則,呵呵!會使用這幾個檔案,或許連 procmail 也不需要使用了呢! ^_^
       
    • 執行檔:Postfix 的執行檔可不少啊!約略提幾個主要的執行檔吧!
       
      • /usr/sbin/postfix:這就是 postfix 的主要執行檔案啦!啟動與簡單的關閉 postfix 可以使用:
          postfix check :檢查 postfix 相關的檔案、權限等是否正確!
          postfix start :開始 postfix 的執行
          postfix stop :關閉 postfix
          postfix flush :強制將目前正在郵件佇列的郵件寄出!
          postfix reload:重新讀入設定檔,也就是 /etc/postfix/main.cf
        要注意的是,每次更動了 /etc/postfix/main.cf 之後,一定需要執行 postfix reload 喔!
         
      • /usr/sbin/postalias:這個指令是 sendmail 的 newaliases 啦!他可以用來將上面提到的設定檔 aliases 製作成為 postfix 看的懂得『資料庫』格式化檔案!由於一般來說,我們都是使用 hash 這一種資料格式,所以囉,你可以簡單的使用底下的指令方式來格式化。
          postalias 資料庫格式:檔名
          postalias hash:/etc/postfix/aliases ==>自動建立 /etc/postfix/aliases.db 這個資料庫檔案!
           
      • /usr/sbin/postcat :這個指令可以用來觀察某個郵件佇列裡面檔案的資訊!postfix 的郵件佇列放置在 /var/spool/postfix 裡面,但是這個目錄裡面的檔案格式是 postfix 看的懂得,我們人類看不懂~為了取得這些在郵件佇列裡面的檔案資訊,所以我們得使用 postcat 這個指令來讀取出資訊喔!假如有個檔案放在 /var/spool/postfix/deferred,你可以這樣看:
          postcat /var/spool/postfix/deferred/filename
           
      • /usr/sbin/postconf :可以用來讀取 main.cf 這個檔案裡面的設定資料的一個指令!用途多多啊!簡單的來說,可以直接將你的 main.cf 裡面的設定分門別類的顯示給你看,可以幫助除錯 (debug) 啦!不錯的工具,鳥哥個人蠻喜歡加入 -n 這個參數來瞭解目前的主要規範檔放置在那個目錄下!
          postconf -n
        顯示的結果為:
          alias_database = hash:/etc/postfix/aliases
          alias_maps = hash:/etc/postfix/aliases
          command_directory = /usr/sbin
          config_directory = /etc/postfix
          daemon_directory = /usr/lib/postfix
          debug_peer_level = 2
          .......
        看到了吧!你想要知道的資料立刻一目了然,可以加快你的除錯喔!不必每次都要進入 main.cf 裡面找好久呢!
       
      • /usr/sbin/postmap:怪怪!這個指令的用法跟上面提到的 postalias 幾乎完全一模一樣啊! ^_^不過,他是用來取代 sendmail 的 makemap 的!用法是:
          postmap hash:/etc/postfix/access ==>自動建立 /etc/postfix/access.db 這個資料庫檔案!
       
      • /usr/sbin/postqueue :這個是在觀察郵件佇列的一個指令啦!你可以使用 postqueue -p 來顯示目前的郵件佇列內容!這個:
          postqueue -p 與 mailq 顯示的內容會一模一樣喔!
           
    • 目錄:同樣的具有郵件佇列與郵件信箱的放置目錄啊!
       
      • /var/spool/mail :電子郵件信箱放置目錄
      • /var/spool/postfix :郵件佇列,裡面還有很多次目錄,都是一些其他功能的咚咚啊!
     
    整體的架構大致是如此,好啦!瞭解的一定程度的架構之後,我們要開始來談談主機的最基礎設定了吧!
     

    基礎設定
     
    終於要來搞定我們的設定檔 /etc/postfix/main.cf 啦!先來搞定比較簡單的幾個部分喔!在 Postfix 安裝完畢之初,他僅支援本機寄信而已,如果您想要開放外送郵件,那就必需要做一些手術啦!底下幾個重要的項目先來觀察一下囉!(註:請使用 vi 來編輯喔!)
    在 main.cf 這個檔案當中,設定的項目都是以類似變數的設定方法來設定的,例如要設定 postfix 主機名稱時,就以:
    myhostname = vbird.adsldns.org
    這樣的方式來設定的,那麼什麼是『變數』呢?如果還不清楚,趕緊拿出『鳥哥的 Linux 私房菜 -- 基礎學習篇』翻到『認識 BASH 』的章節,好好的瞧一瞧去吧!尤其變數的內容顯示需要用 $ 來領頭的用法,千萬不可忘記!例如:
    myorigin = $myhostname ==> myorigin = vbird.adsldns.org
    上面兩個是一模一樣的,只是藉由變數來讓我們的設定更加的簡單化!不過,與變數設定規則當中比較不同的,在 main.cf 當中的等號兩邊需要有空白!此外,如果有兩個以上的設定呢?那你就必須要逗號『,』或者是空白字元『』來做為分隔了!例如:
    mydestination = $myhostname, $mydomain
    mydestination = $myhostname $mydomain
    在底下的設定當中請特別留意這些設定喔!
     
    • 主機名稱的設定:myhostname 與 mydomain (極重要)
      這個設定蠻重要的喔!就是在設定你的主機名稱囉!請特別留意,這個『 myhostname 』的變數在 main.cf 設定檔的後面會持續的被使用到,所以,不要寫錯了!至於 mydomain 則是你的網域啦!以鳥哥的 linux.vbird.org 為例,我的主機名稱為 linux.vbird.org (用 FQDN 的方式來寫),此時,我的 domain 就是 vbird.org 啦!在本章的例子當中,主機名稱為 vbird.adsldns.org 網域名稱為 adsldns.org ,所以你要這樣設定:
      myhostname = vbird.adsldns.org <==這裡請書寫你的主機名稱喔!
      mydomain = adsldns.org      <==這裡則是你的 domain 名稱!
       
    • 送件來源的主機名稱:myorigin
      這個項目在設定『郵件標頭上面的 mail from 的那個位址』!當我們在本機端使用 mail 這個程式發送信件時,由於沒有定義送件者的位址,一般而言, 郵件主機會以目前的主機名稱做為郵件的 FROM 的那個主機名稱。例如在我的 postfix 上面使用 mail 發送信件時,在發送的郵件當中,就會顯示發信人為 vbird@vbird.adsldns.org 的意思啦!不過,我也可以自行指定來源主機的名稱,就是在這個 myorigin 設定的!通常,使用 $myhostname 來設定 myorigin 即可,不過,在某些大型主機當中,由於這個大型網域內可能有多部的郵件主機,在此時可指定 myorigin 為 $mydomain ,不過,如此一來還得替每個 user 指定其他相關的參數!所以,如果沒有其他要求的話,這個地方設定為底下的樣子即可:
      myorigin = $myhostname
       
    • 可用來收件的主機名稱:mydestination (極重要)
      這個項目可就重要的太多太多了!這個項目就是 sendmail 當中的 /etc/mail/local-host-names 相同的意義啦!你的 postfix 只有在發現 mydestination 這個項目中有寫入的主機名稱做為收信主機時,才會將該封信件收下來!例如,當你的主機名稱有 vbird.adsldns.org 與 www.vbird.adsldns.org ,這兩個主機名稱均指向同一部主機,那麼只有在你將這兩個名稱都寫入 mydestination 項目中,那麼兩個主機的來信才可以被接受,否則就會被退回喔!這個項目有多種設定方法,最簡單的就是直接寫入檔案中,另外,也可以設定的跟 sendmail 一樣,用外部的檔案來取代喔!
      方法一:利用變數的型態
      mydestination = $myhostname, www.$myhostname

      方法二:直接給他寫入名稱
      mydestination = vbird.adsldns.org, www.vbird.adsldns.org

      方法三:使用檔案型態
      mydestination = /etc/postfix/local-host-names
      上面的名稱可以隨便你取喔!然後在該檔案內設定
      [root@test root]# vi /etc/postfix/local-host-names
      vbird.adsldns.org,
      www.vbird.adsldns.org

      一般來說,除非您對於 local-host-names 這個檔案名稱情有獨鍾,否則的話,鳥哥個人建議您直接在 mail.cf 裡面直接設定好你的可接受的主機名稱即可!特別留意的是,如果你的 DNS 裡頭的設定有 MX 的話,那麼請將 MX 指向的那個主機名稱一定要寫在這個 mydestination 內!否則很容易出現錯誤訊息喔!特別的給他注意這一點!『一般來說,使用者最常發生錯誤的地方就在這個設定裡頭呢!需要搭配你的 DNS 設定喔!
       
    • 簡易的 Relay 控制:inet_interfaces mynetworks_style mynetworks relay_domains (極重要)
      這個項目在控制誰可以利用我們的主機來寄信呢?也就是在 sendmail 裡面的 access 那個檔案的咚咚啦!分別說明一下幾個東西囉!
       
      • inet_interfaces:你的 Postfix 主機能被用來使用的介面,假如你的 Linux 主機有多個介面,例如多張網路卡或者是撥接之後又會產生的 ppp0 這些介面時,如果你不想要全部的介面都開放 postfix 功能,那麼就可以在這裡指定能用的介面囉 (註:指定的方式是以主機名稱為主喔!) 一般預設只有自己的內部迴圈網路可以使用 (localhost) ,不過,如果要連上 Internet 的話,建議就要全部都開放啦! inet_interfaces = all
       
      • mynetworks_style:這是用來設定你所想要的 relay 的信任(trust)網域型態!一般來說,有三種主要的型態,分別是:
       
        • class :表示為 A/B/C 三種 class 其中之一,在撥接或者是 ADSL 的情況下,這種型態設定並不好!因為他會主動的去找你目前的 IP 所在的網域來進行 relay 的功能開放!舉個例子來說,如果你是以中華電信的 ADSL 撥接情況,那麼你的 IP 很可能會是 61.59.xxx.yyy ,那如果你設定為 A class 的話 ( postfix 會自動的判斷,請至"網路基礎"一文當中查看 A/B/C 三個 class 的說明 ) ,那麼只要是 61 開頭的 IP 都可以用你的 postfix 喔!很嚴重吧!這個設定通常只給內部私有網域來使用的囉!
         
        • subnet:這是 postfix 的預設值,使用 subnet 的型態來設定喔!意義是說,你的網路卡 IP 所在網域的任何一個 IP 都會被接受的意思!例如我的主機網卡私有 IP 為 192.168.1.2 那麼所有我內部網域連接到這個網卡的 192.168.1.0/24 這個網域的所有 IP 都會被認為是『合法的』!而自動的提供其 Relay 的功能呢!
         
        • host :在這個設定時, postfix 僅會知道 localhost 設定為 trust (信任) 的網域而已!
         
        基本上,這個設定值你可以指定為 mynetworks_style = subnet ,不過,也可以不要設定啦!直接以底下 mynetworks 來設定 relay 的網域即可!另外,如果您有設定 mynetworks_style 以及 mynetwork 時,那麼 mynetworks 這個設定會取代掉 mynetworks_style 喔!因為如此,所以鳥哥個人是不設定 mynetworks_style 的,只設定 mynetworks 而已!
         
      • mynetworks :這個也是用來開放 Relay domain 的一個設定項目!一般來說,也可以設定成很多的方式,包括檔案與變數或直接書寫需要的 IP/netmask 類型!這裡我們假設有 192.168.1.0/24, 127.0.0.0/8 以及 192.168.1.100 這幾個咚咚要開放,所以我可以這樣寫:『mynetworks = 192.168.1.0/24, 127.0.0.0/8, 192.168.1.100/32』!如此一來,連 access 都不需要設定呢! ^_^ ( 註:請注意,如果你沒有設定 mynetworks 的話,一定要將 mynetworks_style 設定為 host 喔!不然你的 IP 所在的子網域的 IP 會被自動的認為是『合法的』呢!)另外,如果你想要啟用 /etc/postfix/access 這個檔案的設定功能時,那就必需要再加以修改喔!例如:『mynetworks = 127.0.0.0/8, hash:/etc/postfix/access 』注意檔案名稱使用完整檔名!
       
      • relay_domains:相對於 mynetworks 設定的專門針對『來源』的 IP 來設定,那麼如果是以主機名稱,或者是領域名稱( domain )時,要如何設定呢?那就可以使用這個項目來設定啦! mynetworks 設定『信任網域的來源 IP 』而 relay_domains 則可以設定『信任網域的來源與目標之主機或領域名稱』啦!舉個例子來說,如果你的主機要開放 vbird.org 這個網域的主機的 Relay 功能,那麼你將 vbird.org 寫入 relay_domains 當中時,那麼:
       
        1. 任何由 vbird.org 來的信件都會被認為是『信任』的,所以 postfix 主機會自動幫忙 relay ;
        2. 由任何地方來的信件,"並且"要往 vbird.org 這個網域去的信件,postfix 主機也會幫忙 Relay 的!
         
        所以說,這個 relay_domains 可以設定『來源』與『目標』的主機或領域名稱喔!一般來說,relay_domains 預設就是我們自己的主機啦!!
       
      上面的設定項目當中,我們可以僅設定兩個即可啦!其他的不用管也沒有關係!不過,由於我預設還有啟動 vbird.org 這個 relay domain ,所以說,整體架設如下:

 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 myfaq.com.cn All rights reserved. www.myfaq.com.cn 版权所有