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、參考
- 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
- 摩托學園討論區-postfix+openwebmail的虛擬帳號問題
- George PmWiki - FreeBSD.VmPop3d
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