郵件主機之簡易設定、使用 Postfix 郵件伺服器之設定
在開始介紹 Postfix 這個伺服器之前,得先告訴您的是,這個 Postfix 的用途是『郵件伺服器』,那麼我們在前一章『Sendmail 伺服器』裡面已經提過了 mail server 的相關原理與運作過程,這個 Postfix 與 sendmail 是類似的東西,那就是『MTA』啦,既然都是 MTA ,使用的協定也相同,同時,這個 Postfix 最早之前的用途也是想要用來『取代 sendmail 』。所以,為了節省筆墨,也為了未來進行修改的時候不要有太多的版本 ( 意思是這裡 copy 一份 mail 原理,那裡又有一份原稿~ ) ,因此上,在進行本章的學習之前,請『務必』前往『簡易 Mail server -- sendmail』讀一讀 Mail server 的原理與相關的說明啊!
本章學習之前你需要先知道的知識:
上面剛剛提到,學習本章你必須要知道 Mail Server 的相關知識才行,在這裡,我們不再說明已經提過的咚咚,請自行再前往翻閱。由於架設某種伺服器的第一步就是要瞭解該伺服器的工作原理,因此,在架設 Postfix 之前,您至少要知道以下的幾個咚咚:如果您不曉得上面問題的答案,請不要『白目』的繼續往下看 ^_^,先前往『簡易的 sendmail 伺服器』瞧一瞧相關的原理之後,再來這裡吧!慢點學習不打緊,學的不精....可能會有害啊! @_@
- Mail Server 能否運作與 DNS ( MX 與 A recode )的相關性為何?
- 什麼是 MTA, MUA, MDA 與 Mail box, Mailing list 等相關的術語,及其內容所代表的意義!
- 什麼是 smtp, pop3 以及 imap 協定,他們的用途分別是什麼?
- 什麼是 Relay 與 Open Relay ?
- 什麼是 SMTP 郵件認證?
- 什麼是郵件的別名與轉遞( aliases 與 forward )?
- 什麼是 Procmail 與什麼是 ORDB 呢?
為什麼要有 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 抵擋的功能;
如果您是使用 Mandrake 後期版本的話,那麼恭喜您,由於 Mandrake 預設就是使用 Postfix 做為郵件伺服器,並且在安裝的時候就已經將 Postfix 安裝到你的系統當中了。至於 Red Hat 9 同樣的也提供了 Postfix 喔!而如果您是使用非 postfix 為郵件伺服器的 Linux distribution ,呵呵!仔細的查看後面介紹的 Tarball 安裝的方式吧!
- cyrus-sasl
- procmail
- postfix
- imap(同時支援 pop3 及 imap 兩個協定)
使用 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 的話,你需要安裝的套件大致上有:你至少要安裝的套件就有上面這幾個,同時,請拿出您的原版光碟將上面的套件全部安裝吧!安裝的方法我們在『鳥哥的 Linux 私房菜 -- 基礎學習篇』介紹過的 RPM 與 Tarball 安裝方法裡面提過多次了,請自行參考喔!安裝完畢之後,你的主機就已經具有 Postfix 這個系統啦!不過,由於我們還要提供 SMTP 以及其他相關的功能,所以這裡我們必需要確認一下各個套件是否都完全的安裝了呢?底下我們就一個一個的來設定吧!(註:請特別留意 Cyrus-sasl 的版本,因為不同的版本他的函式庫所在目錄與設定檔都不相同!因此,在本篇文章中,您會發現我使用 Tarball 安裝的 2.xx 版本與使用 RPM 安裝的 1.5.xx 版本設定檔的內容不相同,不要懷疑,確實是如此的喔! )
- 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 )
安裝 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-3mdk2. 設定:
# 在設定方面,這主要與 procmail 有關而已,您可以下載 procmailrc
# 並放置到 /etc/ 底下即可詳細的資料請參考上一章簡易 sendmail 之說明!
安裝 imap 1. 安裝
[root@test root]# rpm -qa | grep imap
imap-2001a-9mdk
imap-devel-2001a-9mdk2. 設定:
# 直接設定成為開機啟動即可:
[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/man5. 檢驗 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/samplePlease 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# 這樣就安裝成功啦!接下來請開始查閱 主機的設定 那一節囉!
在 main.cf 這個檔案當中,設定的項目都是以類似變數的設定方法來設定的,例如要設定
postfix 主機名稱時,就以:
myhostname = vbird.adsldns.org這樣的方式來設定的,那麼什麼是『變數』呢?如果還不清楚,趕緊拿出『鳥哥的 Linux 私房菜 -- 基礎學習篇』翻到『認識 BASH 』的章節,好好的瞧一瞧去吧!尤其變數的內容顯示需要用 $ 來領頭的用法,千萬不可忘記!例如: myorigin = $myhostname ==> myorigin = vbird.adsldns.org上面兩個是一模一樣的,只是藉由變數來讓我們的設定更加的簡單化!不過,與變數設定規則當中比較不同的,在 main.cf 當中的等號兩邊需要有空白!此外,如果有兩個以上的設定呢?那你就必須要逗號『,』或者是空白字元『 』來做為分隔了!例如: mydestination = $myhostname, $mydomain在底下的設定當中請特別留意這些設定喔! |
myhostname
= vbird.adsldns.org <==這裡請書寫你的主機名稱喔!
mydomain = adsldns.org <==這裡則是你的 domain 名稱! |
myorigin = $myhostname |
方法一:利用變數的型態
mydestination = $myhostname, www.$myhostname 方法二:直接給他寫入名稱
方法三:使用檔案型態
|
inet_interfaces
= all
mynetworks = 192.168.1.0/24, 127.0.0.0/8, 192.168.1.100/32, hash:/etc/postfix/access relay_domains = vbird.org 設定完成之後還需要啟動
access 喔!
|
alias_maps
= hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases |
[root@test root]# postalias hash:/etc/postfix/aliases |
先確認設定檔有沒有錯誤:
[root@test root]# postfix check <==檢查錯誤,若沒有任何顯示,表示正確 如果是 RPM 安裝的情況:
如果是 Tarball
安裝的情況:
檢查是否正確的啟動了呢?
設定開機的時候立刻啟動:
|
[root@test
root]# vi /etc/postfix/main.cf
1.5.xx 版本的 Cyrus SASL 底下請自行新增在這個檔案的最後面: smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains smtpd_client_restrictions = permit_sasl_authenticated smtpd_sasl_security_options = noanonymous smtp_sasl_auth_enable = yes 2.xx 版本的
Cyrus SASL
|
[root@test
root]# vi /etc/postfix/master.cf
找到底下的這一行: smtp inet n - y - - smtpd 將他改成為: smtp inet n - n - - smtpd |
[root@test
root]# /etc/rc.d/init.d/postfix restart
[root@test root]# telnet localhost 25 Trying 127.0.0.1... Connected to localhost (127.0.0.1). Escape character is '^]'. 220 vbird.adsldns.org ESMTP Postfix (1.1.11) (Mandrake Linux) ehlo localhost <==確認一下你的主機狀態 250-vbird.adsldns.org 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH PLAIN LOGIN <==出現這個就是成功囉! 250-XVERP 250 8BITMIME quit <==離開吧! 221 Bye Connection closed by foreign host. |
[root@test
root]# printf 'test\0test\0abc' | mmencode
dGVzdAB0ZXN0AGFiYw== <==這個東西就是你的密碼啦! [root @test root]# telnet localhost 25 telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 vbird.adsldns.org ESMTP Postfix ehlo localhost <==先打招呼 250-vbird.adsldns.org 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-XVERP 250 8BITMIME auth plain dGVzdAB0ZXN0AGFiYw== 235 Authentication successful <==若出現這一行表示你的 SMTP 已經運作正常 quit |
所有在 sendmail 當中需要注意的與可以使用的 Client 端的功能,在 postfix 當中都同樣的可以使用喔!所以,這部份請回到『sendmail 伺服器』那一章去瞧一瞧怎麼使用 client 來進行 Mail server 的種種工作吶!其中,需要特別強調的有幾個小細節:
- 如果您有啟動 SMTP 的認證時,請千萬注意在 client 端的 MUA 必需要啟動『我的寄件人需要密碼』的項目,詳情請參考 sendmail 的設定一文;
- 在 sendmail 當中,不論 port 25 有沒有啟動, Linux 本機上面使用 mail 寄信,『還是可以』將信傳送出去,不過在 postfix 可不是這麼回事了!你若沒有啟動 port 25 時,那麼使用 mail 將會把信暫時的放置郵件佇列當中 (/var/spool/postfix) ,直到再次開啟 port 25 之後,信件才有可能再次的備傳送出去喔!
[root@test
root]# vi /etc/postfix/main.cf
smtpd_client_restrictions = hash:/etc/postfix/access, reject_rbl_client relays.ordb.org, reject_rhsbl_client dsn.rfc-ignorant.org # 還記得 main.cf 的語法喔!呵呵!上面說的是,我們可以利用/etc/postfix/access # 以及relays.ordb.org 以及 dsn.rfc-ignorant.org 等機制來抵擋黑名單主機之意 # 不過,如果您使用的是舊的 postfix 版本(1.5.xx),那麼可能您的設定需要改為 maps_rbl_domains = relays.ordb.org smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_maps_rbl [root@test root]# /etc/rc.d/init.d/postfix reload |
[root@test
root]# vi /etc/postfix/main.cf
mailbox_command = /usr/bin/procmail [root@test root]# /etc/rc.d/init.d/postfix reload |
[root@test
root]# vi /etc/postfix/main.cf
# 在這個檔案的最底下加入這兩行 header_checks = regexp:/etc/postfix/header_checks body_checks = regexp:/etc/postfix/body_checks # 注意一下,那個 regexp 表示『我使用正規表示法來進行過濾的規則訂定』的意思 # 至於後面接的檔案就是設定檔啦! [root@test root]# postfix reload |
[root@test
root]# postmap -q - regexp:/etc/postfix/header_checks
< \
> /etc/postfix/header_checks |
在其他應用方面,基本上,與 sendmail 相似的,我們都需要:這些動作與 sendmail 都很類似啦!所以您可以回上一章去參考一下喔!那麼萬一是無法使用 postfix 來寄信呢?你可以這樣試看看:
- 進行備份;
- 進行磁碟配額限制(quota);
- 進行登錄檔的查詢與記錄
另外,我們的網友 yangsman 提供了一支不錯的 script 用來啟動 pwcheck 之用,有興趣的朋友也可以參考喔! script 內容如下:
- 回歸到最原始的狀態,也就是不開放任何 SMTP, Open Relay, procmail 等等,以最原始的 main.cf 檔案進行 postfix 的運作,然後檢查一下重要的 myhostname, mydestination 以及 mynetwork 的設定,來看看 postfix 是否工作的很順暢,然後再來一個一個的啟用其他相關的控制喔!
- 萬一無法進行 SMTP 時,請確認您的 cyrus SASL 函式庫是第幾版的,然後在依照本文上面的設定來設定看看,應該不成問題吧!
- 還是無法解決您的問題時,請檢查一下您的 /var/log/maillog 這個登錄檔,問題的解決都在裡面啊!!!
[root@test root]# vi /etc/rc.d/init.d/pwcheck
#!/bin/sh
#
# Written By Yangsman 2003/05/5
#
#
# Source function library.
. /etc/rc.d/init.d/functions# Source networking configuration.
. /etc/sysconfig/network# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0[ -f /usr/sbin/pwcheck ] || exit 0
# See how we were called.
case "$1" in
start)
# Start daemons.
if [ ! -f /var/lock/subsys/pwcheck ]; then
gprintf "Starting pwcheck: "
/usr/sbin/pwcheck 2>/dev/null
echo pwcheck
touch /var/lock/subsys/pwcheck
else
$0 status
fi
;;
stop)
# Stop daemons.
if [ -f /var/lock/subsys/pwcheck ]; then
gprintf "Shutting down pwcheck: "
kill `ps -aux|grep -v ps |grep "/usr/sbin/pwcheck"| \
gawk '{print $2}'` 2>/dev/null
echo pwcheck
rm -f /var/lock/subsys/pwcheck
else
$0 status
fi
;;
restart)
$0 stop
$0 start
;;
status)
if [ -f /var/lock/subsys/pwcheck ]; then
gprintf "pwcheck (pid \c"
gprintf "`ps -aux|grep -v ps |grep "/usr/sbin/pwcheck"| \
gawk '{print $2}' 2>/dev/null`\c"
gprintf ")is runing ...\n"
else
gprintf "pwcheck is't stopped \n"
fi
;;
*)
gprintf "Usage: %s {start|stop|restart|status}\n" "$0"
exit 1
esacexit 0