OSWikiHK: 請協力 GPLv3 的中文翻譯工作。

Migration from Sendmail to Postfix

OSWikiHK,自由中文開源知識庫

Jump to: navigation, search

這文件首先被張貼到 http://www.frankie-itsolutions.com/

當你由 Sendmail 轉而使用 Postfix 伺服器時的一些考慮... 我想作每一件事或是作不同的決定,我們都應該坐下來想一想作這些事情的成本,因為沒有計算過代價就想做成某事的話,很可以帶來的一些是不可以預期的結果。

目录

Sendmail 伺服器

其實當你要數在開源世界中最重要的電郵伺服器,我想你一定會數到 Sendmail 伺服器的,因為在二三十年前,如果你希望建立電郵服務的話,你一定是選用 Sendmail 的,其實如果你也是玩 debian 的話,在 debian 2.1 版本的時候,所選用的 default 的外寄電郵伺服器,亦是使用 Sendmail 的。

電郵世界的二三十年

當然這一些長時間裡,是可以發生很多事的,當然其中有好有壞, 讓我們先從好的方面想。

好的一面

好一面,就是這二三十年使到很多人受落了 Sendmail ,當然在沒有什麼選擇的時候,Sendmail 就是最好的選擇了。這也使到很多早期的管理者 對 Sendmail 管理上有一定的經驗。

所以你一定可以看見在不同的場合中,不同的網絡管理者口中談及 Sendmail 的,也很有可能你公司也在使用 Sendmail 來作電郵伺服器。

不好的一面

這二三十年中,互聯網上發生了很多事, 而且不同的人對不同的價值的理解也不一樣了。我們先從互聯網談起︰互聯網由一個互相信 任的環境變成一個無法互相信任的環境。

對很多的網絡管理者來說,互聯網是一個最不可信賴, 而又是不可或缺的網絡。因為你公司或企業的客戶而言,他們都是來自互聯網的, 但是換一句話說,你公司的攻擊者,大部份也是由互聯網絡而來的。 (也就是說攻擊者卻往往是多於你公司的客戶。)當然你公司如果希望能在互聯網上得到好處的話, 就一定要做好開放的準備,而另一方面又要作好防守的準備。

Sendmail 早期在保安方面一直被別人所批評, 我想這幾年 Sendmail 真是改進了不少,但是我仍是看見很多人在使用 Sendmail 時引起了大量的問題,其實這方面不一定是 Sendmail 的保安問題,很多時卻是因為 Sendmail 的程式設計上所引致的。因為 Sendmail 在設定上的彈性真是十分大, 這使到一些不良的設定十分容易產生,而這方面卻直接使到 Sendmail 引起大量的問題, 最主要的問題是〔慢〕,伺服器沒有適當的回應速度。(當然這直接影響伺服器的運作。)

Sendmail 還有另一樣很為人不滿的問題,就是 Sendmail 真是一個十分專心地發展外寄電郵伺服器,對 smtpd 和 smtp 通信協定有它很好的表現, 但是除了它是一個好的 smtpd 伺服器和 smtp 客戶端之外,你不能為它多作要求,例如︰ 當 Sendmail 要進行本地分發的時候,它就己經需要第三者軟件的幫助,例如︰ procmail 或者是 maildrop 的協助才能完成工作。當然我十分欣賞 Sendmail 的發展者們能專心地 發展一個高質素的外寄電郵伺服器,但是一個較全功能形的外寄電郵伺服器, 可能是最能迎合現今公司或企業的需要。

升級 Sendmail 伺服器

我想我自己是十分支持 Postfix 發展者所選擇發展的路向, 但是另一方面如果你現正使用 Sendmail ,或許你也會有這樣的問題, 就是是否應該升級企業內部使用的 Sendmail 伺服器至 Postfix 伺服器!

這個問題是我十分常聽見的標準問題。當然我也有一套的見解,就是如果你的 Sendmail 伺服器運作正常,而且也沒有遇上管理上的問題,例如︰伺服器變慢,伺服器常發生一些無法理解 的現象。那我會建議你持續使用 Sendmail 伺服器,因為升級伺服器總是帶來隱憂的。 所以如不是到達無法接受的地步,我不會建議升級 Sendmail 伺服器, 作 Postfix 伺服器的考慮。

另外如果你電郵伺服器的運作模式沒有作過不的修訂,(記得這是運作模式有關, 而和電郵伺服器中有多少使用者無關。)那麼當你升級你的電郵伺服器, 你所遇到的問題可以說是一樣的,這絕不會因使用者增多或減少了有任何的不同。 這也使得在升級 Sendmail 到 Postfix 會因時間轉變而增加了不同的難度。

所以我還建議你要深思熟慮下才作出這樣的轉變。

電郵伺服器結構上的設計改進

在這個電郵伺服器的方案上,他們希望能增加多一台的電郵伺服器, 而這台伺服器的工作目的是作為一台 mailgate 的工作。

  1. 接收由外間互聯網上寄來的所有電郵
  2. 在接收後進行垃圾電郵的檢查和病毒檢查,使沒有病毒的電郵再轉寄至在 mailgate 後的 mail 伺服器。(當然亦希望可以減少由 mailgate 寄至 mail 伺服器的垃圾電郵的數量。)
  3. 如果從使用者的角度來看,他們亦是向自己所熟番的電郵伺服器 mail 來寄出電郵和收取電郵,但是 mail 伺服器在檢查過使用者電郵後,亦把電郵傳送至 mailgate 伺服器,然後 mailgate 把電郵傳送至互聯網。

按 -- 這是一個電郵伺服器分柝的典型例子。


"New Mail System Structure":img:newmail.png

這文件先被張貼在 http://www.frankie-itsolutions.com 下。

From unknown Thu May 12 03:50:54 +0800 2005
From: 
Date: Thu, 12 May 2005 03:50:54 +0800
Subject: openbsd的spamd
Message-ID: <20050512035054+0800@www.samba.hk>

有無試過用openbsd的spamd程式(with graylist)?
它幾好用,而且在它新板加入了一個新功能,
可以對收件者來過濾(例如你上面說的,一些不全在的使用者)
"OpenBSD+spamd"

不知在商業公司裹,用這個方法可唔可行呢?
From frankie Thu May 12 05:50:06 +0800 2005
From: frankie
Date: Thu, 12 May 2005 05:50:06 +0800
Subject: 如何簡單管理(商業上的重要考慮)
Message-ID: <20050512055006+0800@www.samba.hk>

我想是否能簡易地作出管理,這是企業中的重要考慮因素,其實老實說 Sendmail 並不比 Postfix 來得差,
問題是在 Postfix 的平台下企業的系統管理者能很容易地作出管理,而且有很高的成效。
亦除錯容易。但是 Sendmail 或者是 Exim 卻很容易在管理上出現錯誤,
所以我一直都推 Postfix 的應用。我想未來我仍會推廣 Postfix 的應用!
除非企業上有特別的需求,而這需求卻需要在一個完全特別的環境下才能滿足,
那才會考慮使用 Exim 這電郵伺服器。

但是經 Postfix 2.2.x 後,Postfix 的表現己越來越聰明了。

計劃

如果沒有好的計劃,事情是不會順利和成功的,在網絡服務的設計和安裝設定上,這更是一樣十分重要的工作。我想我們的客戶會更重視這事!因為沒有好的規劃,可能連安裝伺服器也會失敗。

升級電郵伺服器

我想我們和客戶都有一個共同的看法,就是他們的電郵伺服器是需要作出不同情度 的升級。首先他們的電郵伺服運行在一個舊版本的 RedHat 上,而使用 sendmail 的外寄電郵伺服器。

起初客戶希望把 sendmail 升級至新的 sendmail 版本,而把所有的程式如 現在的模式運行,另一方面也要求不要改動原來的 RedHat 平台。

致於新的伺服器就沒有一定的規定。

把 sendmail 升級到 Postfix 的決定

這方面我們有一個新的建議,就是沿用現有的 RedHat 平台。 但是在外寄電郵伺服器上我們選用了 Postfix 來代替 Sendmail , 因為 Postfix 在 relay control 上,明顯是比 Sendmail 容易跟進和 設定,這方面也可以使我們的客戶在往後的日子裡更容易地管理他們的電郵伺服器。 這方面很快就獲得我們客戶的同意。

電郵伺服器的客戶端不察覺 mailgate 的存在

另一方面客戶亦希望他們的使用者在使用新的電郵伺服群的時候, 可以完全不察覺當中的轉變。而只留意到系統表現的提升。

這方面我們也和客戶討論過了,這方面我們需要在伺服器建立的時候, 修改他們的網絡名稱解址伺服器中的 MX Resource Record 。而把 MX 的記錄指向新的 mailgate 伺服器。這樣就可以辦到了!

因為使用者仍是使用 mail 的伺服器來寄信和收信,但是由互聯網進入的信件就 會直接仍 MX 的資料來處理,也就是先把信件交給新的 mailgate 伺服器, 然後 mailgate 伺服器收到電郵後,就把這電郵作病毒檢查和垃圾電郵檢查後 再把它傳給 mail 伺服器。

在我們升級伺服器時所遇上的難題

在我們升級伺服器時,我們也會遇上一些難題的,其中之一就是如何在舊版的 redhat 伺服器下使用新的 Postfix 伺服器。這方面我們的解決方案是在互聯網上找尋一些 src.rpm 來從新編譯,另外我們會集中精神尋找那些是 Fedora core 的 src.rpm 而不是其它 Linux 版本的 src.rpm ,這方面的工作真要花上一些時間和精力, 我們需要有更多的測試才能了解我們所編譯的程式包會適合這一台舊伺服器所需要。

為何重新編譯 src.rpm ,而不直接編譯 tar.gz

這方面是我們堅持的,因為如果我們直接編譯 tar.gz 的話,這會使得往後日子裡 客戶在管理系統上的困擾一定比使用 rpm 來管理來得大。因為怎樣說 rpm 也是一個 發展得十分成熟的程式包管理系統。所以我們如果編譯 src.rpm 的話, 我們就可以沿用 rpm 的方式來管理我們的程式套件了。

當然在新伺服器上這問題就沒有這樣嚴重了,因為他們基本上也有所需要的程式包。 值得一提的是新系統選用了 debian 的 woody 系統。在安裝 woody 後我們把其中的核心升級為 2.6.10 ,也把檔案系統的格式升級作 ext3 。 我們亦相信 ext3 所表現的隱定性可以為客戶伺服器所受接受。

這文件首先被張貼在 http://www.frankie-itsolutions.com

Postfix 基本設定

我想我介紹了這次升級的背景資料,我想我們也要開始介紹工程的發展,其中我們會先介紹這一台 Mailgate 伺服器。

Mailgate 下的 Postfix 伺服器

我想你可以先留意這一篇文章,因為這是當中的理論基礎。 url

在實戰上我們還有一些要留意的。 以致我們可以更順利地管理客戶的 Mailgate 電郵伺服器。

myhostname

假設我們 mailgate 的 domain 是 frankie-itsolutions.com ,那麼這裡的

設定是:

myhostname = mailgate.frankie-itsolutions.com

當然這是這台伺服器的 FQDN 的名稱。

mydestination

這是一個十分重要的地方,因為客戶端是需要把它們所有接收電郵的 domain 都加在這裡的。假設 mailgate 這台伺服器是需要收取 samba.hk 、frankie-itsolutions.com 和 openworkshop.org 這些 domain 的信件的話,你就需要作這樣的設定。

如下:

mydestination = samba.hk,
		frankie-itsolutions.com,
		openworkshop.org
		

如果以後還有不同的設定需要加入的話, 也請你修改這裡的設定值。

mynetworks

這是一個很有用的選項,而這個選項的作用就是記錄了那一台的電郵伺服器 可以使用 mailgate 來把電郵寄到互聯網上。因為 mail 上所有的電郵 都會轉寄到這裡來,然後再寄到互聯網上去。

而假設 mail 的網絡地址為 210.200.234.45 的話。 那麼這裡的設定則為。

設定:

mynetworks = 127.0.0.1, 210.200.234.45

如果有朝一日,mail 的網絡地址有任何轉變的話, 也請修改這裡的網絡地址。

mailbox_size_limit

這是一個很有趣的選擇, Postfix 預設是對 mailbox 的大少作了一定的限制, 基本上是大約 50M 的大少。如果你客戶端的 mailbox 已有 50M 的大少, Postfix 就不會把信件寄到客戶端的電郵信箱內。 因此為了不作這樣的限制,因此在這個設定上加上 0 的值。

設定::

mailbox_size_limit = 0

不作任何的限制。

content_filter

因為客戶端在電郵伺服器上,無論是 mail 或是 mailgate 都希望加上 content_filter , 所以在這裡加上了這一個選項。你可以留意以下的 url 其中就講解了 content_filter 的運用的問題。

transport_maps

因為 mailgate 在收取所有的電郵後,皆會把電郵轉寄到 mail 的電郵伺服器下, 因此 mailgate 是需要有這一個 Options ,告訴 mailgate 如果電郵是這些 domain 的話, 會寄到 mail 的伺服器下,然後讓 mail 的伺服器來接收這些信件, 也把這些信件收到使用者的郵箱內;因此我們需要建立一個 maps_table

如下:

 frankie-itsolutions.com      smtp:mail.frankie-itsolutions.com:25
 samba.hk                     smtp:mail.frankie-itsolutions.com:25
 openworkshop.org             smtp:mail.frankie-itsolutions.com:25

這裡有一個技巧可以留意的,就是這個 maps_table 在內容的方面, 你可以把信件寄到 mail 伺服器下的不同連接埠。這方面是有助你升級 mail 伺服器之使用。

在 mailgate 中加入新的 domain

說了這麼多,我想我們來作一個簡單的總結,這是有關 domain 的設定上。 當我們希望在電郵伺服器中加入新的 domain 時。

我們需要修改 mydestinationtransport_maps 中檔案的資料。 但是記得這只是 mailgate 的設定,你還是需要再設定 mail 伺服器的。

local_recipient_maps

這台 mailgate 基本上是沒有直接擁有使用者帳號的,但是 mailgate 卻又需要知道這個電郵伺服器下有那些電郵帳號存在。以便為他們收取信件。 當然你是可以不使用這設定值的,但是不使用這設定值的話,你就會使用 relayhost 的設定。但是使用了 relayhost 的設定的話, mailgate 就會無法分別這使用者是否存在,而造就了新的 User Unknown 的攻擊。你可以留意 Postfix in FirewallPostfix Local Recipient 的討論。

local_recipient_maps 的設定

記得就是如果客戶端需要接收新的電郵地址的郵箱信件的話, 管理者是是需要把這電郵地址加到 /etc/postfix/local_recipient 下的, 如果電郵伺服器的管理者不希望再接收某電郵的信件的話, 管理者也需要在這檔案內刪除所相處的一行。

記得 Postfix 只留意這檔案的 key ,而不留意當中的 data 值。留意 url 這裡的討論。


這文件先被張貼在 http://www.frankie-itsolutions.com

還記得在我們升級 Sendmail 的過程中,我們還有一台 RedHat 要把它升級的,而這也是整個電郵升級記劃案中最有趣的方法。這裡最有趣的地方就是如何使到使用者完全不知情下升級電郵伺服器,而且功能上新的 Postfix 電郵系統和舊的 Sendmail 系統是完全相同的。

mail 電郵伺服器的升級

還記得,在 mail 伺服器下的電郵伺服器是 Postfix ,而舊的電郵伺服器是 Sendmail 嗎?! RedHat 下有一個特別的地方,就是 Postfix 和 Sendmail 是可以同時存在的;也就是說 RedHat 或者 Fedora 是可以同時存在兩台電郵伺服器的。

在一台己執行 Sendmail 的電郵伺服器下執行 Postfix

其實這是一件很有趣的事,而且也可以在這個情況下作更仔細的 debug ,而又不影響舊有電郵伺服器的運作。

當然你是不能在安裝後就直接執行 Postfix ,因為 Postfix 也是一個外寄電郵伺服器,它也預設地使用了 smtp ( tcp 25 ) 的連接埠。

所以你是無法直接起動 Sendmail 的,除非你修改 /etc/postfix/master.cf 檔案

把以下的內容修改:

 #smtp      inet  n	-	n	-	-	smtpd
 10		inet	n	-	n	-	-	smtpd

這樣 mail 伺服器下的 Postfix 就可以和 Sendmail 同時運行了。而它所聆聽的就是 ( tcp 10 ) 的連接埠了。

使用一個不同的檔案記錄 Postfix 的運行

我們還記得 Sendmail 在運行中,而且 mail 下的 Sendmail 伺服器,亦被正受著不同情度的攻擊,所以如果你起動 Postfix 或者對 Postfix 進行任何測試,而又希望很容易地獲得有用的資料,我會建議你把 Postfix 的 log 檔案分開,也就是 Postfix 不把它伺服器運行時所產生的 log 放到 /var/log/maillog 下,而最好是可以把它放到另一個檔案中。

另外我們也應知道 Postfix 是使用 syslog 來接收電郵伺服器的 log 信息。因此我們希望要把記錄檔放開的話,第一件事,我們就需要來設定 syslog 。

修改 /etc/syslog.conf 檔案

好了首先我們要修改 /etc/syslog.conf 檔案,我們在這檔案中加入以下的一行。

那一行的內容如下:

local3.*	/var/log/postfix.log

這一行的意義是在 syslogd 中建立一個新的頻道,我們稱為 local3 的,而當有 syslog 的客戶端向 syslog 使用 local3 頻道來寫入資料的時候,就會把這些資料加到 /var/log/postfix.log 下。因此如果 Postfix 能使用 local3 的頻道來寫入資料,那麼它的資料就會被加到 /var/log/postfix.log 下了。

修改 main.cf 讓 postfix 使用 local3 來寫入 log 的資信

好了當我們定義好了 /etc/syslog.conf 後,我們需要修改 /etc/postfix/main.cf ,讓 postfix 使用 local3 的頻道來寫入 log 的資信。

修改如下的參數:

syslog_facility = local3

這樣就可以使 Postfix 使用 local3 的頻道來寫入 log 了,也是可以把 Postfix 寫入 file:///var/log/postfix.log 。 當我們重新起動 syslogd 和 postfix 後,你就會發現多了 /var/log/postfix.log 檔案了。

postfix.log 下有關 aliases 的錯誤信息

我想當你從新起動 Postfix 後,你可以在 postfix.log 看見一些有用的資信。

postfix.log 下的信息:

 postfix/postfix-script: stopping the Postfix mail system
 postfix/postalias[15738]: warning: /etc/aliases, line 69: name must be local
 postfix/postalias[15738]: warning: /etc/aliases, line 70: name must be local
 postfix/postalias[15738]: warning: /etc/aliases, line 71: name must be local

這些錯誤信息都是指向 /etc/aliases 檔案的。這也是 Sendmail 下的 aliases 檔案,這是第一個在升級時首要面對的問題。

Sendmail 下的 aliases 和 Postfix 下的 aliases

如果你再指細地看看 Postfix 下的 aliases 檔案和 Sendmail 檔案是放在同一地方的。(都是預設地在 /etc/aliases 的。)而這方面也說如果你在升級 Postfix 時而意外地修改了 aliases 檔案的話,你也將會影響了 Sendmail 的運作。

因此在設定上,把 Postfix 的 aliases 檔案遷移到 /etc/postfix/aliases 下。

修改設定如下:

 alias_maps = hash:/etc/postfix/aliases
 alias_database = hash:/etc/postfix/aliases

這樣 Postfix 就會使用 /etc/postfix/aliases 來作它的 aliases 檔案了。

當我們使用了新的 aliases 檔後,我們還要回答之前的問題就是 Sendmail 下的 aliases 檔案和 Postfix 下的 aliases 檔案有什麼不同?這個問題最容易找到答案的。

我們只要真的把舊有的 /etc/aliases 檔案拿出來對比一下就可以知道了。

對比的結果:

 frankie@frankie-itsolutions.com: frankie@samba.hk

以上是有問題一行的資料。在這裡你可以發現 Sendmail 是容許在 aliases 檔案內寫上 Forward 的資料,但是 Postfix 下卻不容許這事,因為 Sendmail 在處理電郵地址上是以電郵地址的改寫為主要工作,但是 Postfix 在 aliases 上是只處理本地使用者的郵件發送,致於電郵地址的 Forward 問題,Postfix 是交給 virtual 來負責的。

所以要在這裡把這些 aliases 內容,轉到 virtual_alias_maps 的 table 下。

另一方面,你也可以留意一下的就是現在電郵伺服器還正是使用 Sendmail ,系統內 Postfix 還是測試中,所以 aliases 檔案的 hash table,就不要使用 newaliases 的指令來產生,正確的做法是使用 postalias 來處理這事。

指令如下:

 # postalias /etc/postfix/aliases
 # postalias -q postmaster hash:/etc/postfix/aliases
 root
 #

這是使用 postalias 的情況。如果你把想依某一個 aliases database 來產生 hash tables ,你就如第一行指令的方式打入。

如果你是希望以某一檔案來查找某一筆 aliase 資料的話,你就可以使用第二行指令的方式打入。這指令的意義是找出如果寄給 postmaster 帳號的郵件,最後會寄給某人。這時就會寄給 root 。

Sendmail 和 Postfix 下的 .forward 檔案

在 Sendmail 的電郵系統下大量使用 .forward 來處理電郵信件,這是一件十分常見的情況。當然 Postfix 也會使用 .forward 檔案來處理電郵的發送。但是 Sendmail 下的 .forward 檔案格式和 Postfix 在某些情況下是不一樣的。

這是在舊有系統下常見的 .forward 檔案。

.forward 檔案的內容:

\frankie, "|/usr/bin/vacation frankie"

在 Sendmail 下的意義為當此使用者收到電郵後,電郵系統會把電郵送給本地使用者 frankie 。另外也會使用 vacation 這程式來作出 autoreply 的工作。

如果這檔案是存在 frankie 的 $HOME 目錄中的話,那麼 Postfix 會出現一些很特別的情況,因為在這裡 Postfix 要發信給 frankie , 而在 frankie 家目錄的 .forward 又叫 Postfix 再次發信給 frankie 的話,Postfix 會因為面對一個無限的 loop ,最後發棄發送此電郵的。

另外因為 vacation 是一個也會用來寄信的程式,因為現在仍是執行著 Sendmail 而不是 Postfix ,所以也不會建議在此台機器下進行測試,所以把測試工作移到 mailgate 下進行。

經測試和修正後,此檔案的內容應作如下的改寫:

/var/mail/frankie, \frankie@godclick.net, "|/usr/bin/vacation frankie"

這裡的意義為

  1. 把電郵收到 /var/mail/frankie 這檔案內,以 mbox 的形式存放。
  2. 另外把電郵 forward 到 frankie@godclick.net 的帳號內,
  3. 最後也使用電郵使用 vacation 的程式作 autoreply 。

讓我們來看看 mail 電郵伺服器的設定

我想當我們介紹了 mail 電郵伺服器的升級過程後,我們也來看看 mail 電郵伺服器下的設定檔案。

myhostname

這裡當然如 mailgate 一樣填上它的 FQDN 名稱。這裡我填入了 mail.frankie-itsolutions.com 。

設定如下:

 myhostname = mail.frankie-itsolutions.com

設定如上。

inet_interfaces

這是在 RedHat 或 Fedora 下的一個很重要的設定,而這裡填入的是 all ,表示這電郵伺服器聆聽所有的網絡連接口。 (這當然包括 lo0 和 eth0 等,也是在這樣的設定下,mail 才可以接收回互聯網寄來的信件。

設定如下:

inet_interfaces = all

設定如上。

mydestination

這裡的設定如 mailgate.frankie-itsolutions.com 是一樣的,而且你也可以留意,如果在這電郵伺服器群加上新 domain 的話,基本上 mailgate 和 mail 這兩台伺服器都需要修改這裡的設定值。

請你參考這 url 和當中對 mydestination 參數的描寫。

virtual_alias_maps

這裡是伺服器設定 virtual 電郵地址的地方。這是設定某電郵地址寄去某使用者的帳號下,或者是某電郵地址要轉寄去其它電郵地址的記錄。

mail 下這 Options 的設定如下:

 virtual_alias_maps = hash:/etc/postfix/virtusertable

設定如上。

mynetwork

因為這台電郵伺服器,基本上每一個使用者要透過 smtpd 認証才可以寄出信件,

因此在這裡的設定如下::

 mynetworks = 127.0.0.0/8

這是說只容許本機可以直接把郵件寄到互聯網,而不需通過任何的認証。

relayhost

還記得這一台電郵伺服器,並不是直接把電郵寄到互聯網上,而是先把電郵寄到 mailgate 這台伺服器下,所以我們要認定 relyhost 這一個設定。

設定如下:

 relayhost = mailgate.frankie-itsolutions.com

這樣 mail 伺服器上所有的電郵都會寄到 mailgate , 後再寄往互聯網。

alias_maps 和 alias_database

這方面在前文己介紹過了,不在這裡再重覆了。

smtpd_sasl_auth_enable

這是有關 smtpd 認証的,有關 Postfix 的 smtpd 認証。請看以下的網頁。

(DEADLINK) 這文件首先被張貼在 http://www.frankie-itsolutions.com 下。

我們在討論了如何把 Sendmail 升級作 Postfix 。而且也講解了整個電郵系統的結構,但是還是讓我們作一個再簡單的描述,讓管理的工作更容易地達到。我們會以不同的管理工作為主導來講解這方面的運作。

在新的電郵系統下增加使用者帳號

這一定是先被考慮的問題。如果要新增使用者的話,其實你是需要同時修改 mail 和 mailgate 這兩台不同的電腦。

在 mailgate 下的工作

新電郵系統下的管理者需要在 mailgate 這一台電腦下的 /etc/postfix/local_recipient 下的檔案新增這個電郵使用者的所有電郵地址。(記得這裡是指這電郵使用者,所有有關他的電郵地址。因為如果管理者忘記了加上這個電郵使用者的所有電郵地址的話,那麼 mailgate 就不會接收寄到這電郵地址的信件。)

例如 -- 在新電郵伺服器下管理者希望新增 winnie 的帳號,而 winnie 這帳號要接收的電郵地址為 winnie@godclick.net 和 winnie@frankie-itsolutions.com 的話,那麼在 mailgate 下的 /etc/postfix/local_recipient 下加這兩個電郵地址。

如入兩個電郵地址:

winnie@godclick.net	ACCEPT
winnie@frankie-itsolutions	ACCEPT

記得這以的 ACCEPT 是沒有任何意義的。你也可以在這裡加入任何的字句,因為 local_recipient_maps 下的 tables 只看 Key 的部份,並不看 data 的部份。

執行 postmap :

# postmap /etc/postfix/local_recipient

當你修改了 local_recipient 後,請你執行 postmap 來產生新的 /etc/postfix/local_recipient.db 檔案。這樣你的新的電郵地址就可以生效了。

在 mail 下的管理工作

當然如果你只是在 mailgate 下的 local_recipient 中加入新的 record ,這並不會實際地使到新的 winnie 帳號收到電郵的,你還是需要在 mail 下的使用者帳號中創建 winnie 的 Account 。這方面你可以使用 useradd 的指令來達到,另外也請記得加入 winnie 使用者的帳號密碼,這會在 winnie 收取信件的時候使用,也會使用在 winnie 在外寄電郵伺服器中寄出信件的時候使用。

在 mail 下的 /etc/postfix/virtusertable

這個檔案是告訴 postfix 伺服那一個電郵地址的信件要寄往那一個使用者帳號的。所以管理者亦要在這裡加入這樣的兩行。:

winnie@godclick.net			winnie
winnie@frankie-itsolutions.com		winnie

編寫好後記得要使用 postmap 來使它生效。

使用 postmap 的情況:

# postmap /etc/postfix/virtusertable

當你執行 postmap 後你會產生新的 /etc/postfix/virtusertable.db 而新的記錄也會生效。

在新的電郵伺服器下加入新的電郵 domain

這也是一件十分常遇上的管理工作。這方面的工作,亦需要兩台伺服器的分工合作才能達成。

在 mailgate 下的管理工作

在新的電郵伺服系統的設計上 mailgate 是會把所有的電郵全轉寄到 mail 伺服器下的,因此你在 mailgate 上只需要修改 /etc/postfix/transport 就可以,

例如 -- 你希望多收取 openwokshop.org 的電郵信件的話。

你可以加入如下的一行:

openworkshop.org    smtp:mail.frankie-itsolutions.com:25

這樣的設定另外在設定後,也請管理者記得要使用 postmap 來重新的產生 /etc/postfix/transport.db 檔案。(產生的方法如 virtusertable 一樣就可以了。)

為何可以只加在 transport 這檔案中,就可以接收新的電郵 domain 的信件。主要原因是在 mailgate 的電郵伺服器下設定了 mydestination 這個設定。

設定如下:

mydestination = mailgate.frankie-itsolutions.com, hash:/etc/postfix/transport

這樣除了 mailgate.frankie-itsolutions.com 是它的電郵 domain 外,另一方面在 /etc/postfix/transport.db 檔案下的 domain (檔案中 Key 的部份,亦會被看作是電郵 domain 的部份,這情況和 local_recipient_maps 是相似的,而它記錄著如何作 transport 的部份就不被參考。)

在 mail 下的管理工作

在 mail 下的管理工作,你可以在 file:///etc/postfix/local-host-name 中加上這樣的一行。::

 openworkshop.org		ACCEPT

這樣 mail 這一台伺服器就會知道它會接收 openworkshop.org 這一電郵 domain 的信件。另外請使用 postmap 來重新產生/etc/postfix/local-host-name 的檔案。

我們也來看看 mail 下的 mydestination 的設定。

設定如下:

 mydestination = hash:/etc/postfix/local-host-names

這是保留著 Sendmail 的設定特色,講解上你可以留意上文的介紹。

另外如果你希望在這電郵 domain 下加上使用者帳號和電郵地址的話,你只要如前面提及的方式來管理就可以了。

總結

Postfix 的保安級數相比 Sendmail ,真的有更多的考慮和設計。但是在企業應用上,Postfix 亦保留了很強的彈性,所以如果你希望以 Postfix 來取代你的 Sendmail 伺服器,其實當中要變動的地方亦不會太多,而且另一方面亦可以簡化伺服器的設定和管理手續。

可以說,這是一個很值得考慮的方案。

這文件首先被張貼在 http://www.frankie-itsolutions.com 下。

Personal tools