Vm-Pop3d - 配合 Postfix 建立 Mail Virtual Account

1、前言

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






文章目錄

1、前言
2、實作環境
3、安裝及設定
4、Vm-Pop3d 部份
          步驟1.安裝 Vm-Pop3d 套件
          步驟2.修改 Inetd 設定檔 (inetd.conf)
5、Postfix 部份
          步驟1.修改 postfix 設定檔 (main.cf)
          步驟2.虛擬帳號相關設定
          步驟3.設定虛擬郵件帳號密碼
          步驟4.將設定導入 Postfix DB
6、Openwebmail 部份
          步驟1.修改 Openwebmail 設定檔
          步驟2.修改 Openwebmail 虛擬帳號目錄權限
7、啟動相關服務
          步驟1.修改 rc.conf 設定檔
          步驟2.啟動相關服務
8、測試虛擬帳號機制
9、參考
10、Me FAQ
          Q1.執行 postalias aliases 時出現錯誤訊息?

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

  • MTA (Mail Transfer Agent): Postfix
  • MUA (Mail User Agent): Openwebmail
  • POP3: Vm-Pop3d

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

  • 網域一: mail.weithenn.org
  • 網域一使用者帳號: weithenn
  • 網域一使用者 Mail Address: weithenn@mail.weithenn.org
  • 網域二: mail.weithenn.com
  • 網域二使用者帳號:weithenn
  • 網域二使用者 Mail Address: weithenn@mail.weithenn.com





2、實作環境

  • FreeBSD 5.4-RELEASE-p8
  • postfix-2.1.6
  • vm-pop3d-1.1.6_1
  • apache_1.3.34
  • openwebmail-2.51





3、安裝及設定

本篇實作對於如何安裝 Postfix、Openwebmail、Apache、DNS 不在多做敘述,僅著重在 Mail 虛擬帳號的部份。



4、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 //加入此行






5、Postfix 部份

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

修改 postfix 設定檔 main.cf 內容,指定 Mail 虛擬帳號相關功能、路徑...等。
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.虛擬帳號相關設定

修改虛擬帳號 Mail Box 設定檔 virtual_mailbox:
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    //增加網域二

修改虛擬帳號(網域一及二的使用者帳號),以及網域設定檔 virtual:
vi usr/local/etc/postfix/virtual
 weithenn@mail.weithenn.org weithenn.mail.weithenn.org
 weithenn@mail.weithenn.com weithenn.mail.weithenn.com 

修改虛擬帳號網域一及二的 Aliases 設定檔 aliases。
vi /usr/local/etc/postfix/aliases
 weithenn.mail.weithenn.org: /var/spool/virtual/mail.weithenn.org/weithenn
 weithenn.mail.weithenn.com: /var/spool/virtual/mail.weithenn.com/weithenn

建立虛擬帳號的 Spool 資料夾,參數 -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
  • -c:新增使用者帳號及密碼 (建立密碼檔案,適用於第一次執行此指令)
  • -d:密碼以 crypt() 函數產生

建立存放虛擬帳號密碼檔資料夾。
mkdir -p /usr/local/etc/virtual/mail.weithenn.org   //建立網域一密碼資料夾
mkdir -p /usr/local/etc/virtual/mail.weithenn.com   //建立網域二密碼資料夾

設定網域一 mail.weithenn.org 虛擬帳號密碼。
cd /usr/local/etc/virtual/mail.weithenn.org  //切換至網域一存放密碼資料夾
htpasswd -cd passwd weithenn                 //設定網域一虛擬帳號密碼
 New password:                      //請輸入設定的密碼
 Re-type new password:              //再輸入一次密碼
 Adding password for user weithenn  //密碼設定成功

設定網域二 mail.weithenn.com 虛擬帳號密碼。
cd /usr/local/etc/virtual/mail.weithenn.com  //切換至網域二存放密碼資料夾
htpasswd -cd passwd weithenn                 //設定網域二虛擬帳號密碼
 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







6、Openwebmail 部份

步驟1.修改 Openwebmail 設定檔

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

修改網域一 mail.weithenn.org 的 Openwebmail 設定檔內容如下所示:
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         //設定使用者空間上限(此例為 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




7、啟動相關服務

完成上述設定及修改後,請修改 /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.啟動相關服務

啟動 Apache 服務:
/usr/local/etc/rc.d/apache.sh start
 Starting apache.

啟動 Postfix 服務:
/usr/local/etc/rc.d/postfix.sh start
 postfix/postfix-script: starting the Postfix mail system

啟動 Inetd 服務 (啟動 vm-pop3d 服務):
/etc/rc.d/inetd start
 Starting inetd.






8、測試虛擬帳號機制

上述設定都完成後,請依如下步驟進行測試看虛擬帳號機制是否成功運作,若使用 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.

若成功驗證的話可發現類似如下 maillog 內容。
tail /var/log/maillog
 Jan 13 12:12:12 gw vm-pop3d25611: Connect from 61.60.50.58
 Jan 13 12:12:12 gw vm-pop3d25611: User 'weithenn' of 'mail.weithenn.org' logged in
 Jan 13 12:12:12 gw vm-pop3d25611: Session ended for user: weithenn

若驗證失敗的話可發現類似如下 maillog 內容。
tail /var/log/maillog
 Jan 13 12:13:02 gw vm-pop3d25620: Connect from 61.60.59.58
 Jan 13 12:13:02 gw vm-pop3d25620: Socket closed






9、參考






10、Me FAQ

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

Error Message:
當執行 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