用 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 位部落客按了赞: