Postfix + Vm-pop3d

一般架設 mail server,通常是在 server 上開立一個帳號(ex: useradd eddie),就差不多可以讓使用者來收發信件了。但一部電腦只設定一組 domain name 的 mail,是有些浪費。但如果在同一台機器上要設定兩個以上不同 domain name 的 email,上面這個方式就行不通了,但透過 postfix 的 virtual alias table,還是可以做到這個功能的。

1. Postfix 安裝

postfix網站可以找到下載點,有 source 也有包好的 rpm,建議找 rpm 來安裝會比較順利。(版本可能會隨時間而有所改變)

$ rpm -ivh postfix-2.1.5-4.rh9.i386.rpm

透過修改 /etc/postfix/virtual,可以做到上面提到的功能,檔案內容如下:

eddie.com.tw       eddie
admin@eddie.com.tw   admin

這樣一來,寄給 admin@eddie.com.tw 的信,就會轉到本機 admin 這個帳號的信箱。但是,如果有另一個 domain 上也有相同的使用者,這個方式就行不通了,這時,就可以用 vm-pop3d 來做到多個 domain 信箱的設定。

2. vm-pop3d 安裝

vm-pop3d網站也可以找到 rpm 安裝:

$ rpm -ivh vm-pop3d-1.1.4-1.i386.rpm

安裝後需要改一下 postfix 的設定,修改 /etc/postfix/main.cf 的內容,加上下面這幾行:

virtual_mailbox_base = /home/virtual
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_mailbox_domains = hash:/etc/postfix/vmaildomains
virtual_uid_maps = static:8
virtual_gid_maps = static:12
virtual_mailbox_lock = dotlock
virtual_minimum_uid = 8

接下來,要設定 /etc/postfix/vmaildomains/etc/postfix/vmailbox 這兩個檔案:

檔案 /etc/postfix/vmaildomains

eddie.com.tw     eddie
freebsd.com.tw    freebsd

檔案 /etc/postfix/vmailbox

eddie@eddie.com.tw   eddie.com.tw/eddie
eddie@freebsd.com.tw  freebsd.com.tw/eddie

再把這兩個檔案做成 hash 格式:

$ postmap vmailbox
$ postmap vmaildomains

然後,要為這些 domain 開一個資料夾,好像進來的信件可以分到這些相對應的目錄:

$ mkdir -p /home/virtual/eddie.com.tw
$ mkdir -p /home/virtual/freebsd.com.tw

再調整一下 /home/virtual 的權限:

$ chown -R mail.mail /home/virtual
$ chmod -R 775 /home/virtual

這樣信件才丟的進來。接下來,重新啟動 postfix:

$ postfix reload

這樣外面寄進來的信就會轉到個人的虛擬目錄下面了。因為 vm-pop3d 會去 /var/spool/virtual 這個資料夾裡抓信,但我是把 virtual mail 設定在/home 下面,所以要加個 link,不然會收不到信

$ ln -s /home/virtual /var/spool/virtual

再來,就是要幫使用者設定密碼,vm-pop3d 是利用 apache 裡的 htpasswd 這個工具來做密碼的,密碼檔要放在 /etc/virtual/your.domains 裡面,如果沒有 /etc/virtual 這個目錄,就自己建一個吧。就以我機器的例子:

$ cd /etc/virtual/eddie.com.tw
$ htpasswd -c passwd eddie
New password:
Re-type new password:
Adding password for user eddie

如此一來會產生一個叫做 passwd 的檔案,並把 eddie 及密碼寫在裡面。(如果要刪除使用者,直接用文字編輯器把那一行刪除就行了)

大致上這樣就 ok 了

測試:

$ telnet localhost 110
Escape character is '^]'.
+OK POP3 Welcome to vm-pop3d 1.1.4 <26272.1109219984@mail.eddie.com.tw>
user eddie@eddie.com.tw
+OK
pass xxxxx
+OK opened mailbox for eddie
quit
+OK
Connection closed by foreign host.

看到這樣的訊息,就代表設定完成了。如果有什麼錯誤訊息,看一下 /var/log/maillog 裡面的東西應該可以找到問題。

要注意的是,一般 email 信箱如 eddie@eddie.com.tw,是使用 @ 前面的 eddie 當做使用者 id 來收信,但透過 vm-pop3d,則是把整個 eddie@eddie.com.tw 都成使用者 id,在其它收信軟體設定時要特別注意。

參考資料:

HOW TO Setup Postfix and vm-pop3d with virtual mailboxes