用 postfix 及 vm-pop3d 建立虛擬電子信箱 *

所謂的「虛擬電子信箱」指的是用戶在伺服器上沒有實體的帳號,但是卻可以透過 POP3 或是 Open Webmail 來使用電子郵件服務。這樣的組態,一方面比較不會有安全性的問題,同時也可以在一部伺服器上支援較多的用戶。

vm-pop3d 的原理

其實,vm-pop3d 的功能算滿單純的,如要登入一部有安裝 vm-pop3d 的伺服器收取郵件,有兩種驗證用戶的方式:

  • 你可以輸入本機用戶的帳號(username)來登入,則它先去查詢 /etc/passwd 及 /etc/shadow,以驗證帳號、密碼是否正確,如正確無誤,再檢查 /var/spool/mail/username 是否有郵件。
  • 如果你輸入的是電子郵件地址 (username@virtual.example.com) 做為登入帳號,它就會依據這個電子郵件地址,拆解成 “username” 及 “virtual.example.com” 兩個部份,然後查詢 /etc/virtual/virtual.example.com/passwd,以驗證帳號、密碼是否正確,如正確,則繼續檢查 /var/spool/virtual/virtual.example.com/username 是否有郵件。

所以,你要做的,就是想辨法把虛擬電子信箱的郵件放到相對應的子目錄即可。

postfix 基本設定

系統必須先安裝好 postfix (請參考這一篇),藉由 postfix 將虛擬電子信箱的郵件放到相對應的子目錄,以下步驟僅說明如何設定虛擬電子信箱。

  1. 先移除 imap:
    apt-get remove imap
  2. 編輯 /etc/postfix/main.cf,加入:
    default_privs = nobody
    mail_spool_directory = /var/spool/mail
    propagate_unmatched_extensions = virtual
    virtual_mailbox_base = /var/spool/virtual
    virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox
    virtual_maps = hash:/etc/postfix/virtual
  3. 建立相關子目錄:
    mkdir /var/spool/virtual
    mkdir /etc/virtual
  4. 重新啟動 postfix:
    service postfix restart

安裝 vm-pop3d

  1. 從本站下載 vm-pop3d 的安裝檔至 /tmp,並執行安裝:
    cd /tmp
    wget http://www.vixual.net/download/source/vm-pop3d/vm-pop3d-1.1.6-1.i386.rpm
    rpm -Uvh vm-pop3d-1.1.6-1.i386.rpm
  2. 刪除 vm-pop3d 預設的啟動程式:
    rm -rf /etc/init.d/vm-pop3d
  3. 建立 /etc/xinetd.d/vm-pop3d,內容如下:
    service pop3
    {
      disable = no
      socket_type = stream
      protocol = tcp
      wait = no
      user = root
      instances = 25
      server = /usr/sbin/vm-pop3d
      server_args = -u nobody
      log_type = SYSLOG local4 info
      log_on_success = PID HOST EXIT DURATION
      log_on_failure = HOST ATTEMPT
    }
  4. 重新載入 xinetd,以啟動 vm-pop3d:
    service xinetd restart

建立虛擬伺服器

  1. 編輯 /etc/postfix/virtual_mailbox,在最下面加入:
    virtual.example.com /var/spool/virtual/virtual.example.com
  2. 編輯 /etc/postfix/virtual,在最下面加入:
    virtual.example.com anything
    username@virtual.example.com username.virtual.example.com
  3. 編輯 /etc/postfix/aliases,在最下面加入:
    username.virtual.example.com: /var/spool/virtual/virtual.example.com/username
  4. 編輯 /etc/postfix/access,在最下面加入:
    virtual.example.com ok
  5. 重新建立資料庫:
    postmap hash:/etc/postfix/virtual_mailbox
    postmap hash:/etc/postfix/virtual
    postalias hash:/etc/postfix/aliases
    postmap hash:/etc/postfix/access
  6. 建立相關子目錄及密碼檔:
    mkdir /var/spool/virtual/virtual.example.com
    chown nobody.mail /var/spool/virtual/virtual.example.com
    mkdir /etc/virtual/virtual.example.com
    touch /etc/virtual/virtual.example.com/passwd
    chmod 644 /etc/virtual/virtual.example.com/passwd
  7. 重新啟動 postfix:
    service postfix restart

建立虛擬電子信箱的用戶

對 vm-pop3d 而言,驗證用戶的方式,只是檢查虛擬電子信箱的目錄下,該用戶的密碼是否被建立。可使用下列指令建立用戶的密碼:

htpasswd /etc/virtual/virtual.example.com/passwd username

POP3 連線方式

  • 如果你是伺服器上本機的用戶,當連線時,帳號的部份只要使用原本的用戶帳號 (username) 來做驗證即可。
  • 如果你是虛擬電子信箱的用戶,當連線時,帳號的部份需輸入完整的電子郵件地址 (username@virtual.example.com) 做為驗證。

虛擬電子信箱與 Open Webmail

Open Webmail 的虛擬用戶功能主要是搭配 vm-pop3d 與 PostFix 來使用。系統中 auth_vdomain.pl 這個認證模組便是用來對 vm-pop3d 與 postfix 上的虛擬用戶進行認證的工作。此外 Open Webmail 還提供 Web 介面,讓被授權的用戶可就對虛擬郵件伺服器下的用戶進行管理。

使用 Open Webmail 讀取郵件

建立 /var/www/cgi-bin/openwebmail/etc/sites.conf/virtual.example.com,內容如下:

auth_module      auth_vdomain.pl
auth_withdomain    yes
mailspooldir      /var/spool/virtual/virtual.example.com
use_syshomedir      no
use_homedirspools    no
enable_autoreply    no
enable_setforward    no
enable_vdomain      yes
vdomain_admlist    sysadmin  #指定哪些用戶有管理者的權限
vdomain_maxuser    100
vdomain_vmpop3_pwdpath  /etc/virtual
vdomain_vmpop3_pwdname  passwd
vdomain_vmpop3_mailpath  /var/spool/virtual
vdomain_postfix_aliases  /etc/postfix/aliases
vdomain_postfix_virtual  /etc/postfix/virtual
vdomain_postfix_postalias  /usr/sbin/postalias
vdomain_postfix_postmap  /usr/sbin/postmap

請注意,上面的設定檔有一個 “vdomain_admlist” 的參數,這個參數是用來指定哪些虛擬電子信箱擁有管理者的權限,管理者可建立、修改或刪除虛擬電子信箱。

登入 Open Webmail 時

  • 如果你是本機用戶,則僅需輸入本機用戶帳號 (username) 與密碼即可登入。
  • 如果你要以虛擬電子信箱登入,且連結的網址與虛擬電子信箱的網址相同,則僅需輸入用戶名稱 (username) 與密碼即可。
  • 如果你要以虛擬電子信箱登入,但連結的網址與虛擬電子信箱的網址不相同,則你必須輸入完整的電子信箱 (username@virtual.example.com) 與密碼才能登入。
    • 03/03. 2008 11:32上午

    請問一下
    小弟按照大大所教的來做
    但是我寄信到虛擬網域時
    他一直說unknow user
    我有建立該帳號啊
    是哪裡有需要注意的嗎
    謝謝

  1. No trackbacks yet.

return top

%d 位部落客按了讚: