站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

Vm-Pop3d-配合Postfix建立Mail虛擬帳戶

前言

簡單來說就是建立虛擬郵件帳號 (也就是沒有家目錄的使用者帳號) 為何需要建立虛擬郵件帳號? 試想看若一台主機負責多個網域而每個網域都要有 Service這個服務的 Mail 帳號而或不想建立系統使用者帳號時該如何處理? 這時便可使用 vm-pop3d 來建立虛擬郵件帳號。

此次實作中各套件及所擔任的角色如下:

網域及 Mail 帳號如下:(記得設定 DNS MX 部份資訊)

實作環境

安裝及設定

本篇實作對於如何安裝 Postfix、Openwebmail、Apache、DNS 不在多做敘述,請自行參考站內相關文章如下:

Vm-Pop3d 部份

步驟1.安裝 Vm-Pop3d 套件

切換至 Ports Tree 路徑安裝 Vm-Pop3d 套件

 #cd /usr/ports/mail/vm-pop3d/                                        //切換到安裝路徑 
 #make install clean                                                  //安裝並清除過程中不必要的檔案

步驟2.修改 Inetd 設定檔 (inetd.conf)

因為 vm-pop3d 為依靠 Inetd 服務來啟動,因此修改 Inetd 設定檔 inetd.conf 以便後續步驟能順利啟動 vm-pop3d 服務

 #vi /etc/inetd.conf
 pop3 stream tcp nowait root /usr/local/sbin/vm-pop3d  vm-pop3d -u nobody  //加入此行

Postfix 部份

步驟1.修改 postfix 設定檔 (main.cf)

修改 postfix 設定檔 main.cf

 #vi /usr/local/etc/postfix/main.cf                                   //修改 postfix 設定檔加入如下內容
 propagate_unmatched_extensions = virtual                             //指定啟用虛擬帳號功能
 virtual_mailbox_base = /var/spool/virtual                            //指定虛擬帳號的 Spool 路徑
 virtual_mailbox_maps = hash:/usr/local/etc/postfix/virtual_mailbox   //指定虛擬帳號的 Mail Box 路徑
 virtual_maps = hash:/usr/local/etc/postfix/virtual                   //指定虛擬帳號及網域
 alias_maps = hash:/usr/local/etc/postfix/aliases                     //指定虛擬帳號對應的 Aliases 路徑

步驟2.虛擬帳號相關設定

 #vi /usr/local/etc/postfix/virtual_mailbox
 mail.weithenn.org /var/spool/virtual/mail.weithenn.org              //增加網域一
 mail.weithenn.com /var/spool/virtual/mail.weithenn.com              //增加網域二
 #vi usr/local/etc/postfix/virtual 
 weithenn@mail.weithenn.org weithenn.mail.weithenn.org               //增加網域一使用者帳號資訊
 weithenn@mail.weithenn.com weithenn.mail.weithenn.com               //增加網域二使用者帳號資訊
 #vi /usr/local/etc/postfix/aliases
 weithenn.mail.weithenn.org: /var/spool/virtual/mail.weithenn.org/weithenn    //增加網域一 aliases
 weithenn.mail.weithenn.com: /var/spool/virtual/mail.weithenn.com/weithenn    //增加網域二 aliases

參數 -p 為該子目錄上層的目錄還沒建立的話會幫你順便建立,為何將網域一及網域二資料夾其權限指定為 nobody? 因為虛擬帳號在此系統內並沒有實體帳號因此指定使用 nobody 去負責寫入的動作

 #mkdir -p /var/spool/virtual/mail.weithenn.org                      //建立網域一資料夾
 #mkdir -p /var/spool/virtual/mail.weithenn.com                      //建立網域二資料夾
 #chown -R nobody /var/spool/virtual                                 //設定權限

步驟3.設定虛擬郵件帳號密碼

利用 htpasswd 指令設定虛擬帳號密碼,以下為簡述 htpasswd 指令常用參數,關於 htpasswd 詳細內容可參考 [FreeBSD Man Pages - htpasswd]

建立存放虛擬帳號密碼檔資料夾

 #mkdir -p /usr/local/etc/virtual/mail.weithenn.org                  //建立網域一密碼資料夾
 #mkdir -p /usr/local/etc/virtual/mail.weithenn.com                  //建立網域二密碼資料夾
 #cd /usr/local/etc/virtual/mail.weithenn.org                        //切換至網域一存放密碼資料夾
 #htpasswd -cd passwd weithenn                                       //設定網域一虛擬帳號 weithenn 並將密碼寫入密碼檔 passwd 內
 New password:                                                       //請輸入設定的密碼
 Re-type new password:                                               //請您再輸入一次剛才設定的密碼
 Adding password for user weithenn                                   //密碼設定成功
 #cd /usr/local/etc/virtual/mail.weithenn.com                        //切換至網域二存放密碼資料夾
 #htpasswd -cd passwd weithenn                                       //設定網域二虛擬帳號 weithenn 並將密碼寫入密碼檔 passwd 內
 New password:                                                       //請輸入設定的密碼
 Re-type new password:                                               //請您再輸入一次剛才設定的密碼
 Adding password for user weithenn                                   //密碼設定成功

所以我們可瞭解所有網域的密碼檔路徑為 /usr/local/etc/virtual/網域名稱/passwd 中,若使用 htpasswd 設定第二位使用者時便不用加 -cd 參數 (否則會覆蓋之前的使用者帳號)

 #cd /usr/local/etc/virtual/mail.weithenn.org
 #htpasswd passwd jiakai                                             //第二位使用者不需加 -cd 參數

步驟4.將設定導入 Postfix DB

上述步驟設定完成後,請鍵入下列指令將設定導入至 Postfix 的 DB 才可使設定生效

 #postmap /usr/local/etc/postfix/virtual                             //產生 virtual.db
 #postmap /usr/local/etc/postfix/virtual_mailbox                     //產生 virtual_mailbox.db
 #postalias /usr/local/etc/postfix/aliases                           //產生 aliases.db

Openwebmail 部份

步驟1.修改 Openwebmail 設定檔

修改 openwebmail 虛擬網域的設定檔,以下僅列出網域一 mail.weithenn.org 內容,因為不同網域間的設定差別只有 domainnames 及 mailspooldir 二處地方不同而以其餘設定內容皆相同,關於設定檔的內容可參考 /usr/local/www/cgi-bin/openwebmail/etc/defaults/auth_vdomain.conf 有更詳細的說明

 #vi /usr/local/www/cgi-bin/openwebmail/etc/sites.conf/mail.weithenn.org
 auth_withdomain           yes                                         
 enable_vdomain            yes
 use_syshomedir            no
 use_homedirspools         no
 enable_autoreply          no
 enable_setforward         no
 auth_module               auth_vdomain.pl
 domainnames               mail.weithenn.org
 mailspooldir              /var/spool/virtual/mail.weithenn.org
 vdomain_admlist           weithenn
 vdomain_maxuser           100
 vdomain_vmpop3_pwdpath    /usr/local/etc/virtual
 vdomain_vmpop3_pwdname    passwd
 vdomain_vmpop3_mailpath   /var/spool/virtual
 vdomain_postfix_aliases   /usr/local/etc/postfix/aliases
 vdomain_postfix_virtual   /usr/local/etc/postfix/virtual
 vdomain_postfix_postalias /usr/local/sbin/postalias
 vdomain_postfix_postmap   /usr/local/sbin/postmap
 quota_module              quota_du.pl                                 //適用於空間限制功能 (針對非系統帳號)
 spool_limit               10240                                       //設定使用者在 Spool 所能用的空間
 quota_limit               10240                                       //設定使用者能使用的空間上限單位 Kbyte (此例為 10MB)
 quota_threshold           0                                           //顯示使用者空間使用狀態

步驟2.修改 Openwebmail 虛擬帳號目錄權限

為何將網域一及網域二資料夾其權限指定為 nobody? 因為虛擬帳號在此系統內並沒有實體帳號因此指定 vm-pop3d 使用 nobody 去負責寫入的動作

 #chown -R nobody /usr/local/www/cgi-bin/openwebmail/etc/users/mail.weithenn.org
 #chown -R nobody /usr/local/www/cgi-bin/openwebmail/etc/users/mail.weithenn.com

啟動相關服務

完成上述設定及修改後,請修改 /etc/rc.conf 以便系統重新開機時能自動帶起相關服務

步驟1.修改 rc.conf 設定檔

 #vi /etc/rc.conf            
 sendmail_enable="NONE"                //關閉 Sendmail 服務
 apache_enable="YES"                   //啟動 Apache 服務    
 inetd_enable="YES"                    //啟動 Inetd 服務
 postfix_enable="YES"                  //啟動 Postfix 服務

步驟2.啟動相關服務

 #/usr/local/etc/rc.d/apache.sh start
 Starting apache.
 #/usr/local/etc/rc.d/postfix.sh start
 postfix/postfix-script: starting the Postfix mail system
 #/etc/rc.d/inetd start
 Starting inetd.

測試虛擬帳號機制

上述設定都完成後,請依如下步驟進行測試看虛擬帳號機制是否成功運作,若使用 Windows 裡的 Outlook Express 進行測試的話則請在設定收件者帳號時要連網域名稱也一起填入例如 weithenn@mail.weithenn.org 才是正確的 (若不是虛擬帳號的話一般僅需填入使用者帳號即可)。

 #telnet mail.weithenn.org 110           //連接至網域一
 Trying 61.60.59.58...
 Connected to mail.weithenn.org.
 Escape character is '^]'.
 +OK POP3 Welcome to vm-pop3d 1.1.6 <22130.1137062095@mail.weithenn.org>
 user weithenn@mail.weithenn.org         //網域一使用者 Mail (此行為自行輸入) 
 +OK  
 pass 123456                             //網域一使用者密碼 (此行為自行輸入) 
 +OK opened mailbox for weithenn
 list                                    //列出網域一使用者 weithenn 的所有信件 (此行為自行輸入) 
 +OK
 .                                       //因為目前還沒有任何信件所以顯示 .
 stat
 +OK 0 0                                 //因為目前還沒有任何信件所以顯示 0
 quit                                    //離開 (此行為自行輸入) 
 +OK
 Connection closed by foreign host.
 #tail /var/log/maillog
 Jan 13 12:12:12 gw vm-pop3d[25611]: Connect from 61.60.50.58
 Jan 13 12:12:12 gw vm-pop3d[25611]: User 'weithenn' of 'mail.weithenn.org' logged in
 Jan 13 12:12:12 gw vm-pop3d[25611]: Session ended for user: weithenn
 #tail /var/log/maillog
 Jan 13 12:13:02 gw vm-pop3d[25620]: Connect from 61.60.59.58
 Jan 13 12:13:02 gw vm-pop3d[25620]: Socket closed

參考

[Reed Media Services -- vm-pop3d / virtualmail-pop3d (Virtual email hosting POP3 Server)]

[Guide on configuring Postfix V2.0+ and vm-pop3d With virtual mailboxes]

[How to setup virtual users on Open WebMail using Postfix & vm-pop3d]

[Migration from Sendmail to Postfix Mail]

[摩托學園討論區-postfix+openwebmail的虛擬帳號問題]

[Open WebMail-by Chung-Kie Tung ]

[George PmWiki - FreeBSD.VmPop3d]

[四位-Postfix+Vm-pop3d 使用非系統帳號做虛擬郵件 Virtual Mail]

Me FAQ

Q1.執行 postalias aliases 時出現錯誤訊息?

Error Meaage:

當執行 postalias aliases 指令時出現下列錯誤訊息

 postalias: warning: aliases, line 1: need name:value pair
 postalias: warning: aliases, line 2: need name:value pair

Ans:

由上述錯誤訊息可知在網域使用者 Mail Address (weithenn.mail.weithenn.org) 之後忘了加上 : 所以當執行 postalias aliases 時系統便顯示需要這個符號才設定正確

 weithenn.mail.weithenn.org: /var/spool/virtual/mail.weithenn.org/weithenn
 weithenn.mail.weithenn.com: /var/spool/virtual/mail.weithenn.com/weithenn
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com