高見龍

iOS app/Ruby/Rails Developer & Instructor, 喜愛非主流的新玩具 :)

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

Comments