バーチャルドメイン設定(Postfix&Dovecot+qmail&vpopmail)

最終更新日: 2010.05.16

<<トップページ <<新着情報 <<質問掲示板 <<アンケート <<リンク集 <<サイト内検索 <<管理人へメール <<Fedoraで自宅サーバー構築

■概要

現在運用中のメールサーバーで、メールアドレスxxxxxxxx@centossrv.comの他に、xxxxxxxx@virtual.comでもメールを送受信できるようにする。ここでは、vpopmailを導入して、以下のような特徴をもつメールシステムを構築する。

・メインドメイン、バーチャルドメインでメールボックスは別々とする(例:centos@centossrv.comと、centos@virtual.comのメールボックスは別々とする)
・メインドメインも1バーチャルドメインとして扱う(メール利用のためだけにシステムアカウントを追加する必要がなくなる)

なお、ドメイン1つでvpopmailを導入しても問題はない

メールサーバー(Postfix)構築済であること


■ドメイン名取得

追加するメールアドレスのドメイン名を取得する。⇒ドメイン名取得(独自ドメイン編)ドメイン名取得(ieServer.Net編)を参照

■qmailインストール

(1)qmailインストール
vpopmailではメール配送にqmailを使用するため、qmailをインストールする。
[root@centos ~]# mkdir /var/qmail ← qmailインストールディレクトリ作成

[root@centos ~]# groupadd nofiles ← nofilesグループ作成

[root@centos ~]# useradd -g nofiles -s /sbin/nologin alias -m -d /var/qmail/alias -k /dev/null ← aliasユーザ作成

[root@centos ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild ← qmaildユーザ作成

[root@centos ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill ← qmaillユーザ作成

[root@centos ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp ← qmailpユーザ作成

[root@centos ~]# groupadd qmail ← qmailグループ作成

[root@centos ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq ← qmailqユーザ作成

[root@centos ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr ← qmailrユーザ作成

[root@centos ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails ← qmailsユーザ作成

[root@centos ~]# wget ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz ← qmailダウンロード

※最新版のURLはダウンロードページで確認すること

※wgetが固まってダウンロードできない場合は下記手順でダウンロード
[root@centos ~]# wget --no-passive-ftp ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz ← qmailダウンロード

[root@centos ~]# tar zxvf qmail-1.03.tar.gz ← qmail展開

[root@centos ~]# cd qmail-1.03 ← qmail展開先ディレクトリへ移動

[root@centos qmail-1.03]# vi error.h ← error.h編集
extern int errno;
↓
#include<errno.h> ← 変更

上記は以下のようなエラーメッセージを出力してインストールが失敗してしまうことの対処
/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1

[root@centos qmail-1.03]# make setup check ← qmailインストール
・
・
・
./install
./instcheck

[root@centos qmail-1.03]# ./config-fast `hostname` ← qmail初期設定
Your fully qualified host name is centos.centossrv.com.
Putting centos.centossrv.com into control/me...
Putting centossrv.com into control/defaultdomain...
Putting centossrv.com into control/plusdomain...
Putting centos.centossrv.com into control/locals...
Putting centos.centossrv.com into control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to centos.centossrv.com.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

[root@centos qmail-1.03]# echo `hostname -d` >> /var/qmail/control/me ← 自ドメイン名を送信元ドメイン名にする

[root@centos qmail-1.03]# echo `hostname -d` >> /var/qmail/control/rcpthosts ← 自ドメイン名を受信ドメイン名として追加

[root@centos qmail-1.03]# echo `hostname -d` >> /var/qmail/control/locals ← 自ドメイン名をローカルドメイン名として追加

[root@centos qmail-1.03]# cd ← qmail展開先ディレクトリを抜ける

[root@centos ~]# echo "MANPATH /var/qmail/man" >> /etc/man.config
 ← manコマンドでqmailコマンドのマニュアルを参照できるようにする

[root@centos ~]# rm -rf qmail-1.03 ← qmail展開先ディレクトリ削除

[root@centos ~]# rm -f qmail-1.03.tar.gz ← ダウンロードしたqmail削除

(2)dot-forwardインストール
Postfix用ユーザ別メール転送設定ファイル(~/.forward)を利用できるようにするため、dot-forwardをインストールする。
[root@centos ~]# wget http://cr.yp.to/software/dot-forward-0.71.tar.gz ← dot-forwardダウンロード

※最新版のURLはダウンロードページで確認すること

[root@centos ~]# tar zxvf dot-forward-0.71.tar.gz ← dot-forward展開

[root@centos ~]# cd dot-forward-0.71 ← dot-forward展開先ディレクトリへ移動

[root@centos dot-forward-0.71]# vi error.h ← error.h編集
extern int errno;
↓
#include<errno.h> ← 変更

上記は以下のようなエラーメッセージを出力してインストールが失敗してしまうことの対処
/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1

[root@centos dot-forward-0.71]# make setup check ← dot-forwardインストール
・
・
・
./instcheck

[root@centos dot-forward-0.71]# cd ← dot-forward展開先ディレクトリを抜ける

[root@centos ~]# rm -rf dot-forward-0.71 ← dot-forward展開先ディレクトリ削除

[root@centos ~]# rm -f dot-forward-0.71.tar.gz ← ダウンロードしたdot-forward削除

■qmail起動

[root@centos ~]# cp /var/qmail/boot/home+df /var/qmail/rc ← qmail起動コマンドサンプルを所定の場所へコピー

[root@centos ~]# yum -y install tcsh ← cシェルインストール

[root@centos ~]# vi /etc/rc.d/init.d/qmail ← qmail起動スクリプト作成
#!/bin/bash
#
# qmail
#
# chkconfig: 2345 79 29
# description: qmail start/stop script

# Source function library.
. /etc/rc.d/init.d/functions

PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin

[ -f /var/qmail/rc ] || exit 0

start() {
    # Start daemons.
    if [ -z $(/sbin/pidof qmail-send) ];  then
        echo -n "Starting qmail"
        csh -cf '/var/qmail/rc &' 2>&1 > /dev/null
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/qmail
        return $RETVAL
    else
        echo "qmail is already started"
    fi
}

stop() {
    # Stop daemons.
    if [ ! -z $(/sbin/pidof qmail-send) ];  then
        echo -n "Shutting down qmail"
        /bin/kill $(/sbin/pidof qmail-send)
        until [ -z $(/sbin/pidof qmail-send) ]; do :; done
        echo
        rm -f /var/lock/subsys/qmail
    else
        echo "qmail is not running"
    fi
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  status)
        if [ ! -z $(/sbin/pidof qmail-send) ] ;  then
            echo -n "qamil (pid"
            echo -n " `/sbin/pidof qmail-send`"
            echo ") is running..."
        else
            echo "qmail is stopped"
        fi
        ;;
   *)
        echo "Usage: qmail {start|stop|restart|status}"
        exit 1
esac

exit 0

[root@centos ~]# chmod +x /etc/rc.d/init.d/qmail ← qmail起動スクリプトへ実行権限付加

[root@centos ~]# /etc/rc.d/init.d/qmail start ← qmail起動
Starting qmail

[root@centos ~]# chkconfig qmail --add ← qmail自動起動設定

■vpopmailインストール

[root@centos ~]# groupmod -g 20001 postfix ← postfixのGID変更※vpopmailのGIDと重複するため

[root@centos ~]# usermod -u 20001 -g 20001 postfix ← postfixのUID変更※vpopmailのUIDと重複するため

[root@centos ~]# groupadd -g 89 vchkpw ← vchkpwグループ作成

[root@centos ~]# useradd -g vchkpw -u 89 vpopmail -s /sbin/nologin -m -k /dev/null ← vpopmailユーザ作成

[root@centos ~]# wget http://jaist.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.4.25.tar.gz ← vpopmailダウンロード

※最新版のURLはダウンロードページで確認すること

[root@centos ~]# tar zxvf vpopmail-5.4.25.tar.gz ← vpopmail展開

[root@centos ~]# cd vpopmail-5.4.25 ← vpopmail展開先ディレクトリへ移動

[root@centos vpopmail-5.4.25]# vi vpopmail.c ← vpopmail.c編集
ユーザ追加時に自動でスパムメール用メールボックスが作成されるようにする
メールサーバーでウィルス&スパムチェック導入している場合のみ
 const char *dirnames[] = {"Maildir", "Maildir/new", "Maildir/cur",
        "Maildir/tmp"};
        ↓変更
 const char *dirnames[] = {"Maildir", "Maildir/new", "Maildir/cur", "Maildir/tmp",
        "Maildir/.Spam", "Maildir/.Spam/new", "Maildir/.Spam/cur", "Maildir/.Spam/tmp"};

[root@centos vpopmail-5.4.25]# ./configure --disable-clear-passwd ← configure
※メールユーザパスワードを平文で保存しないようにする設定を追加

[root@centos vpopmail-5.4.25]# make && make install-strip ← vpopmailインストール

[root@centos vpopmail-5.4.25]# cd ← vpopmail展開先ディレクトリを抜ける

[root@centos ~]# rm -rf vpopmail-5.4.25 ← vpopmail展開先ディレクトリ削除

[root@centos ~]# rm -f vpopmail-5.4.25.tar.gz ← ダウンロードしたvpopmail削除

■vpopmail設定

[root@centos ~]# vi /home/vpopmail/etc/vlimits.default ← デフォルト制限設定ファイル編集
# default quota for newly created users (in bytes)
# example shows a user with a 10MB quota and a limit of 1000 messages
#default_quota           10485760
#default_maxmsgcount     1000
default_quota           104857600 ← 追加(1ユーザのメールボックス容量を100MB(100*1024*1024)とする場合)
※上記を指定しない場合は無制限となる

■Postfixのvpopmail対応

(1)Postfixのvpopmail対応
[root@centos ~]# vi /etc/postfix/master.cf ← Postfix設定ファイル(master.cf)編集
以下を最終行へ追加(qmailのsendmailコマンドをvdelivermailとして追加)
vdelivermail unix - n n - - pipe
  flags=R user=qmailq argv=/var/qmail/bin/sendmail ${recipient}

[root@centos ~]# vi /etc/postfix/main.cf ← Postfix設定ファイル(main.cf)編集
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, virtual.com ← バーチャルドメイン名追加

# The mailbox_transport specifies the optional transport in master.cf
# to use after processing aliases and .forward files. This parameter
# has precedence over the mailbox_command, fallback_transport and
# luser_relay parameters.
#
# Specify a string of the form transport:nexthop, where transport is
# the name of a mail delivery transport defined in master.cf.  The
# :nexthop part is optional. For more details see the sample transport
# configuration file.
#
# NOTE: if you use this feature for accounts not in the UNIX password
# file, then you must update the "local_recipient_maps" setting in
# the main.cf file, otherwise the SMTP server will reject mail for
# non-UNIX accounts with "User unknown in local recipient table".
#
#mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
mailbox_transport = vdelivermail ← 追加(メール配送にvdelivermailを使用する)

#local_recipient_maps = unix:passwd.byname $alias_maps
#local_recipient_maps = proxy:unix:passwd.byname $alias_maps
#local_recipient_maps =
local_recipient_maps = ← 追加(UNIXアカウントが存在しなくてもメールを拒否しない)

virtual_maps = hash:/etc/postfix/virtual ← 削除(あれば)

(2)SMTP-AUTHのvpopmail対応
[root@centos ~]# wget http://prdownloads.sourceforge.net/courier/courier-authlib-0.60.2.tar.bz2 ← courier-authlibダウンロード

※最新版のURLはダウンロードページで確認すること

[root@centos ~]# rpmbuild -tb --clean courier-authlib-0.60.2.tar.bz2 ← courier-authlibのRPM作成
※時間がかかる
rpmbuildが「ビルド依存性の失敗」で異常終了した場合

[root@centos ~]# rpm -Uvh /usr/src/redhat/RPMS/i386/courier-authlib-0.60.2-1.i386.rpm ← courier-authlibインストール
準備中...                ########################################### [100%]
   1:courier-authlib        ########################################### [100%]

[root@centos ~]# rpm -Uvh /usr/src/redhat/RPMS/i386/courier-authlib-devel-0.60.2-1.i386.rpm ← courier-authlib-develインストール
準備中...                ########################################### [100%]
   1:courier-authlib-devel  ########################################### [100%]

[root@centos ~]# rm -f courier-authlib-0.60.2.tar.bz2 ← ダウンロードしたファイルを削除

[root@centos ~]# rm -f /usr/src/redhat/RPMS/i386/courier-authlib-* ← 作成したRPMを削除

[root@centos ~]# vi /etc/authlib/authdaemonrc ← courier-authlib設定ファイル編集
authmodulelist="authvchkpw" ← vchkpw認証に変更

[root@centos ~]# /etc/rc.d/init.d/courier-authlib start ← courier-authlib起動
Starting Courier authentication services: authdaemond

[root@centos ~]# chkconfig courier-authlib on ← courier-authlib自動起動設定

[root@centos ~]# vi /usr/lib/sasl2/smtpd.conf ← PostfixSMTP-AUTH認証設定ファイル編集
pwcheck_method: saslauthd
↓
pwcheck_method: authdaemond ← SMTP-AUTH認証方式をauthdaemondに変更
authdaemond_path: /var/spool/authdaemon/socket ← authdaemondのソケットパスを追加

[root@centos ~]# usermod -G daemon postfix ← postfixユーザをdaemonグループに追加

[root@centos ~]# /etc/rc.d/init.d/postfix restart ← Postfix再起動
postfix を停止中:                                          [  OK  ]
postfix を起動中:                                          [  OK  ]

[root@centos ~]# /etc/rc.d/init.d/saslauthd stop ← 不要になったsaslauthd停止
saslauthd を停止中:                                        [  OK  ]
saslauthd を起動中:                                        [  OK  ]

[root@centos ~]# chkconfig saslauthd off ← saslauthd自動起動設定解除

■Dovecotのvpopmail対応(受信メールサーバーをIMAPにする場合)

[root@centos ~]# yum -y install yum-utils ← yumでSRPMをダウンロードするyumdownloaderを含むyum-utilsをインストール

[root@centos ~]# vi /etc/yum.repos.d/CentOS-Base.repo ← yumリポジトリ設定ファイル編集
以下を最終行へ追加
[base-source]
name=CentOS-$releasever - Base Source
baseurl=http://mirror.centos.org/centos/$releasever/os/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

[updates-source]
name=CentOS-$releasever - Updates Source
baseurl=http://mirror.centos.org/centos/$releasever/updates/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

[extras-source]
name=CentOS-$releasever - Extras Source
baseurl=http://mirror.centos.org/centos/$releasever/extras/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

[root@centos ~]# yumdownloader --noplugins --source dovecot ← DovecotのSRPMダウンロード

[root@centos ~]# rpm -ivh dovecot-1.0-1.2.rc15.el5.src.rpm ← DovecotのSRPMを展開
※ユーザ、グループが存在しない旨の警告メッセージが表示されるが問題ない

[root@centos ~]# vi /usr/src/redhat/SPECS/dovecot.spec ← specファイル編集
%configure                           \
    INSTALL_DATA="install -c -p -m644" \
    --with-doc                         \
    --with-vpopmail                    \ ← 追加

[root@centos ~]# rpmbuild -bb --clean --define "dist .`echo dovecot-*.src.rpm |awk -F. '{print $(NF-2)}'`" /usr/src/redhat/SPECS/dovecot.spec ← DovecotのRPM作成
※時間がかかる
rpmbuildが「ビルド依存性の失敗」で異常終了した場合

[root@centos ~]# /etc/rc.d/init.d/dovecot stop ← 起動済Dovecot停止
Dovecot Imap を停止中:                                     [  OK  ]

[root@centos ~]# yum -y remove dovecot ← インストール済Dovecot削除

[root@centos ~]# rpm -ivh /usr/src/redhat/RPMS/i386/dovecot-1.0-1.2.rc15.i386.rpm ← 作成したDovecotのRPMをインストール

[root@centos ~]# /bin/mv /etc/dovecot.conf.rpmsave /etc/dovecot.conf ← 旧Dovecot設定ファイルを流用

[root@centos ~]# vi /etc/dovecot.conf ← Dovecot設定ファイル編集(CentOS5の場合)
  # vpopmail authentication 
  passdb vpopmail { ← コメント解除
    # [cache_key=] - See cache_key in PAM for explanation.
    #args =
  } ← コメント解除

  # vpopmail 
  userdb vpopmail { ← コメント解除
  } ← コメント解除

# Valid UID range for users, defaults to 500 and above. This is mostly
# to make sure that users can't log in as daemons or other system users.
# Note that denying root logins is hardcoded to dovecot binary and can't
# be done even if first_valid_uid is set to 0.
#first_valid_uid = 500
first_valid_uid = 89 ← 追加
#last_valid_uid = 0

vpopmail導入により不要になったシステムアカウントによる認証設定を無効化する
※無効化しないと認証に時間(2〜3秒くらい)がかかり、/var/log/secureに認証エラーメッセージが記録される
  # PAM authentication. Preferred nowadays by most systems.
  # Note that PAM can only be used to verify if user's password is correct,
  # so it can't be used as userdb. If you don't want to use a separate user
  # database (passwd usually), you can use static userdb.
  # REMEMBER: You'll need /etc/pam.d/dovecot file created for PAM
  # authentication to actually work. 
  #passdb pam { ← 行頭に#を追加(コメントアウト)
    #  [session=yes] [setcred=yes] [cache_key=] []
    #
    # session=yes makes Dovecot open and immediately close PAM session. Some
    # PAM plugins need this to work, such as pam_mkhomedir.
    #
    # setcred=yes makes Dovecot establish PAM credentials if some PAM plugins
    # need that. They aren't ever deleted though, so this isn't enabled by
    # default.
    #
    # cache_key can be used to enable authentication caching for PAM
    # (auth_cache_size also needs to be set). It isn't enabled by default
    # because PAM modules can do all kinds of checks besides checking password,
    # such as checking IP address. Dovecot can't know about these checks
    # without some help. cache_key is simply a list of variables (see
    # doc/variables.txt) which must match for the cached data to be used.
    # Here are some examples:
    #   %u - Username must match. Probably sufficient for most uses.
    #   %u%r - Username and remote IP address must match.
    #   %u%s - Username and service (ie. IMAP, POP3) must match.
    #
    # If service name is "*", it means the authenticating service name
    # is used, eg. pop3 or imap (/etc/pam.d/pop3, /etc/pam.d/imap).
    #
    # Some examples:
    #   args = session=yes *
    #   args = cache_key=%u dovecot
    #args = dovecot
  #} ← 行頭に#を追加(コメントアウト)

  # /etc/passwd or similar, using getpwnam()
  # In many systems nowadays this uses Name Service Switch, which is
  # configured in /etc/nsswitch.conf. WARNING: nss_ldap is known to be broken
  # with Dovecot. Don't use it, or users might log in as each others!
  # http://wiki.dovecot.org/AuthDatabase/Passwd
  #userdb passwd { ← 行頭に#を追加(コメントアウト)
  #} ← 行頭に#を追加(コメントアウト)

[root@centos ~]# /etc/rc.d/init.d/dovecot start ← Dovecot起動
Dovecot Imap を起動中:                                     [  OK  ]

[root@centos ~]# chkconfig dovecot on ← Dovecot自動起動設定

[root@centos ~]# rm -f dovecot-1.0-1.2.rc15.el5.src.rpm ← ダウンロードしたファイルを削除

[root@centos ~]# rm -f /usr/src/redhat/RPMS/i386/* ← 作成したRPMを削除

[root@centos ~]# rpmbuild --rmsource --rmspec /usr/src/redhat/SPECS/dovecot.spec ← RPM作成後始末

■SpamAssassinのvpopmail対応(メールサーバーでウィルス&スパムチェック導入している場合のみ)

[root@centos ~]# vi /etc/sysconfig/spamassassin ← SpamAssassin起動オプション設定ファイル編集
# Options to spamd
SPAMDOPTIONS="-d -c -m5 -H"
↓
SPAMDOPTIONS="-d -m5 -v -u vpopmail --virtual-config-dir=/home/vpopmail/domains/%d/%l/.spamassassin"
 ← 変更(vpopmail対応)

[root@centos ~]# chown vpopmail:vchkpw /var/run/spamassassin/ ← SpamAssassinPIDファイル格納ディレクトリ所有者変更

[root@centos ~]# /etc/rc.d/init.d/spamassassin restart ← SpamAssassin再起動
spamd を停止中:                                            [  OK  ]
spamd を起動中:                                            [  OK  ]

■メインドメイン移行

メインドメイン環境をvpopmail配下へ移行する。
なお、メインドメイン移行後、メール利用のみのシステムアカウントは削除しても構わない。

(1)メインドメイン追加
メインドメインをvpopmailへ追加する。
[root@centos ~]# /home/vpopmail/bin/vadddomain `hostname -d` ← メインドメイン追加
Please enter password for postmaster:  ← postmaster@centossrv.comのパスワード応答※パスワードは表示されない
enter password again:  ← postmaster@centossrv.comのパスワード応答(確認)※パスワードは表示されない
NOTICE: Out of order entries found in /var/qmail/control/rcpthosts
   Sorting...
   
[root@centos ~]# vi /home/vpopmail/domains/`hostname -d`/.qmail-default ← メインドメインの.qmail-default編集
| /var/qmail/bin/dot-forward `/home/vpopmail/bin/vuserinfo -d $EXT@$HOST`/.forward ← 追加(.forwardを有効にする)
| /home/vpopmail/bin/vdelivermail '' delete ← 変更(宛先不明メールは送信元へ通知せずに捨てる)※

[root@centos ~]# echo `hostname -d` > /home/vpopmail/etc/defaultdomain
 ← メインドメインをデフォルトドメインにする※後述の「■メールクライアント設定」を参照

宛先不明メールを送信元に通知せずに捨てる理由

(2)システムアカウント移行
システムアカウントをvpopmail配下のメインドメインへ移行する。
[root@centos ~]# /etc/rc.d/init.d/postfix stop ← Postfix停止
postfix を停止中:                                          [  OK  ]

[root@centos ~]# /home/vpopmail/bin/vconvert -e -c `hostname -d` ← ユーザアカウント/パスワードの移行
※パスワードをもっているシステムアカウントのみvpopmail配下に移行される

[root@centos ~]# /home/vpopmail/bin/vuserinfo -n -D `hostname -d` ← 移行されたユーザの確認
user1
・
・
・
userx

(3)メールデータ移行
システムアカウントのメールデータ(~/Maildir/,~/.forward,~/.qmail)をvpopmail配下のメインドメイン内該当ユーザのホームディレクトリへ移行する。
[root@centos ~]# vi migrate-maildir ← メールデータ移行スクリプト作成
#!/bin/bash

DOMAIN=`hostname -d`

migrate()
{
    user=$1
    if [ $user = "root" ]; then
        home="/root"
    else
        home="/home/$user"
    fi
    
    if [ -d $home/Maildir ] && [ -d /home/vpopmail/domains/$DOMAIN/$user/Maildir ]; then
        /bin/cp -r $home/Maildir \
        /home/vpopmail/domains/$DOMAIN/$user
        [ -f $home/.forward ] && /bin/cp -r $home/.forward \
        /home/vpopmail/domains/$DOMAIN/$user
        [ -f $home/.qmail ] && /bin/cp -r $home/.qmail \
        /home/vpopmail/domains/$DOMAIN/$user
        chown -R vpopmail:vchkpw /home/vpopmail/domains/$DOMAIN/$user
        echo $user
    fi
}

# メールデータ移行(一般ユーザ)
for user in `ls /home/`;
do
    migrate $user
done

# メールデータ移行(rootユーザ)
migrate root

[root@centos ~]# sh migrate-maildir ← メールデータ移行スクリプト実行
user1
・
・
・
userx

[root@centos ~]# rm -f migrate-maildir ← メールデータ移行スクリプト削除

[root@centos ~]# /etc/rc.d/init.d/postfix start ← Postfix起動
postfix を起動中:                                          [  OK  ]

(4)/etc/aliases修正
/etc/aliasesでroot宛メールをローカルアカウント宛に転送するように設定している場合(例:root宛メールをローカルアカウントのcentosユーザへ転送するように設定している場合)、転送先をvpopmail対応に修正する。
[root@centos ~]# vi /etc/aliases ← /etc/aliases編集
root: centos@centossrv.com ← root宛メール転送先をcentos@centossrv.comに修正

[root@centos ~]# newaliases ← /etc/aliases修正反映

■バーチャルドメイン追加

バーチャルドメイン(例としてvirtual.com)を追加する

(1)バーチャルドメイン追加
[root@centos ~]# /home/vpopmail/bin/vadddomain virtual.com ← バーチャルドメイン追加
Please enter password for postmaster:  ← postmaster@virtual.comのパスワード応答※パスワードは表示されない
enter password again:  ← postmaster@virtual.comのパスワード応答(確認)※パスワードは表示されない

[root@centos ~]# vi /home/vpopmail/domains/virtual.com/.qmail-default ← バーチャルドメインの.qmail-default編集
| /var/qmail/bin/dot-forward `/home/vpopmail/bin/vuserinfo -d $EXT@$HOST`/.forward ← 追加(.forwardを有効にする)
| /home/vpopmail/bin/vdelivermail '' delete ← 変更(宛先不明メールは送信元へ通知せずに捨てる)※

※postmasterのパスワードをランダムに設定する場合
[root@centos ~]# /home/vpopmail/bin/vadddomain -r virtual.com ← バーチャルドメイン追加
Random password: 5nUH3RdG ← ランダムに設定されたパスワード
宛先不明メールを送信元に通知せずに捨てる理由

(2)バーチャルドメイン用メールユーザ追加
[root@centos ~]# /home/vpopmail/bin/vadduser virtual-user@virtual.com ← メールユーザ追加
Please enter password for virtual-user@virtual.com:  ← パスワード応答※パスワードは表示されない
enter password again:  ← パスワード応答(確認)※パスワードは表示されない

※パスワードをランダムに設定する場合
[root@centos ~]# /home/vpopmail/bin/vadduser -n virtual-user@virtual.com ← メールユーザ追加

[root@centos ~]# /home/vpopmail/bin/vpasswd -r virtual-user@virtual.com ← メールユーザパスワード設定
Random password: ErZ#Loc7 ← ランダムに設定されたパスワード※気に入らない場合は繰り返せばOK

(3)バーチャルドメイン用メールユーザパスワード変更
[root@centos ~]# /home/vpopmail/bin/vchangepw ← メールユーザパスワード変更
Please enter the email address: virtual-user@virtual.com ← メールアドレス応答
virtual-user@virtual.com
Enter old password:  ← 現在パスワード応答※パスワードは表示されない
Please enter password for virtual-user@virtual.com:  ← 新パスワード応答※パスワードは表示されない
enter password again:  ← 新パスワード応答(確認)※パスワードは表示されない
Password successfully changed.

(4)バーチャルドメイン用メールユーザ削除
[root@centos ~]# /home/vpopmail/bin/vdeluser virtual-user@virtual.com ← メールユーザ削除
※問い合わせもなく削除されるので誤操作に注意

(5)バーチャルドメイン削除
[root@centos ~]# /home/vpopmail/bin/vdeldomain virtual.com ← バーチャルドメイン削除
※問い合わせもなく削除されるので誤操作に注意

■メールクライアント設定

vpopmailでは、ユーザ識別をメールアドレスで行うため、メールクライアントのアカウント名には、「ユーザ名」ではなく、「ユーザ名@ドメイン名」のようにメールアドレスを指定する。その他はメールサーバー構築の「■メールクライアント設定」を参照


■メインドメイン確認

・内部で同一ユーザ同士でメールの送受信
・内部で他ユーザ間でメールの送受信
・内部で外部(プロバイダのメールアドレス等)との送受信
・内部で携帯との送受信※
・外部(会社等)で同一ユーザ同士でメールの送受信
・外部(会社等)で他ユーザ間でメールの送受信
・外部(会社等)で外部(プロバイダのメールアドレス等)との送受信
・外部(会社等)で携帯との送受信※

※携帯はドメイン指定受信等でメールサーバーからのメールが拒否されないようにしておくこと

■バーチャルドメイン確認

・内部で同一ユーザ同士でメールの送受信
・内部で他ユーザ間でメールの送受信
・内部で外部(プロバイダのメールアドレス等)との送受信
・内部で携帯との送受信※
・外部(会社等)で同一ユーザ同士でメールの送受信
・外部(会社等)で他ユーザ間でメールの送受信
・外部(会社等)で外部(プロバイダのメールアドレス等)との送受信
・外部(会社等)で携帯との送受信※

※携帯はドメイン指定受信等でメールサーバーからのメールが拒否されないようにしておくこと

■メインドメイン⇔バーチャルドメイン確認

・内部でメインドメインユーザとバーチャルドメインユーザ間での送受信
・外部でメインドメインユーザとバーチャルドメインユーザ間での送受信

■スパムメール振分け設定のvpopmail対応(メールサーバーでウィルス&スパムチェック導入している場合のみ)

SpamAssassinがスパム判定したメールはスパムメール用メールボックスへ配送するようにする。
また、未承諾広告メール(件名に「未承諾広告※」が含まれているメール)は自動的に削除するようにする。
(1)maildropインストール
vpopmail環境へのメール振分けに必要なmaildropをインストールする。
[root@centos ~]# wget http://jaist.dl.sourceforge.net/sourceforge/courier/maildrop-2.0.4.tar.bz2 ← maildropダウンロード
※最新版のURLはダウンロードページで確認すること

[root@centos ~]# rpmbuild -tb --clean maildrop-2.0.4.tar.bz2 ← maildropのRPMパッケージ作成
※時間がかかる
rpmbuildが「ビルド依存性の失敗」で異常終了した場合

[root@centos ~]# rpm -Uvh /usr/src/redhat/RPMS/i386/maildrop-2.0.4-1.i386.rpm ← 作成したmaildropをインストール
Preparing...                ########################################### [100%]
   1:maildrop               ########################################### [100%]

[root@centos ~]# rpm -Uvh /usr/src/redhat/RPMS/i386/maildrop-man-2.0.4-1.i386.rpm ← 作成したmaildrop-manをインストール
Preparing...                ########################################### [100%]
   1:maildrop-man           ########################################### [100%]

[root@centos ~]# rm -f maildrop-2.0.4.tar.bz2 ← ダウンロードしたファイルを削除

[root@centos ~]# rm -f /usr/src/redhat/RPMS/i386/* ← 作成したRPMを削除

(2)スパムメール振分け設定
[root@centos ~]# vi /home/vpopmail/etc/maildroprc ← vpopmail用maildrop設定ファイル作成
SHELL="/bin/bash"
import EXT
import HOST
DELIVER="|/home/vpopmail/bin/vdelivermail '' delete"
VHOME=`/home/vpopmail/bin/vuserinfo -d $EXT@$HOST`
logfile "/home/vpopmail/.maildrop.log" # ログを記録する場合

# 存在しないユーザ宛メールの処理
if ( $VHOME eq "" )
{
    to "$DELIVER"
}

# 未承諾広告メールの削除(ここから)
# 件名が日本語の場合
if (/^Subject:.*iso-2022-jp/:h)
{
    # 件名をUTF-8コードへ変換※システムの文字コードがUTF-8(デフォルト)の場合
    SUBJECT=`cat |grep Subject|nkf -mw`

    # 件名をEUCコードへ変換※システムの文字コードがEUCの場合
    SUBJECT=`cat |grep Subject|nkf -me`

    # 件名に未承諾広告※が含まれているメールを削除
    if ($SUBJECT =~ /.*未承諾広告※.*/)
    {
        to "/dev/null"
    }
}
# 未承諾広告メールの削除(ここまで)

# SpamAssassinによるスパムチェック
# ※fetchmail取り込みメールのスパム検査未実施対処
if (!/^X-Spam-/:h)
{
    exception {
        xfilter "/usr/bin/spamc"
    }
}

# SpamAssassinにより判定されたSpam-Levelが一定値(ここでは20)以上の場合は削除
# ※必要なメールが削除されてしまう可能性があることに留意すること
if (/^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/)
{
    to "/dev/null"
}

# SpamAssassinがスパム判定したメールはスパムメール用メールボックスへ配送
if (/^X-Spam-Flag: *YES/)
{
    to "$VHOME/Maildir/.Spam/"
}

# その他のメールは通常どおりに配送
to "$DELIVER"

[root@centos ~]# chown vpopmail:vchkpw /home/vpopmail/etc/maildroprc ← vpopmail用maildrop設定ファイル所有者変更

[root@centos ~]# chmod 600 /home/vpopmail/etc/maildroprc ← vpopmail用maildrop設定ファイルパーミッション変更

[root@centos ~]# vi /home/vpopmail/domains/ドメイン名/.qmail-default ← 全ドメインの.qmail-default編集
| /var/qmail/bin/dot-forward `/home/vpopmail/bin/vuserinfo -d $EXT@$HOST`/.forward
| /home/vpopmail/bin/vdelivermail '' delete
↓
| maildrop /home/vpopmail/etc/maildroprc ← 変更

[root@centos ~]# vi /etc/logrotate.d/maildrop ← maildropログローテーション設定ファイル作成
/home/vpopmail/.maildrop.log {
    missingok
    nocreate
    notifempty
}

■スパムチェック誤認識対応のvpopmail対応(メールサーバーでウィルス&スパムチェック導入している場合のみ)

[root@centos ~]# vi spamassassin-learn ← SpamAssassin学習スクリプト作成
#!/bin/bash

PATH=/usr/sbin:/usr/bin:/bin

for domains in `/home/vpopmail/bin/vdominfo -n|grep -v "^$"`
do
    for user in `/home/vpopmail/bin/vuserinfo -n -D $domains`
    do
        # 正常メール格納ディレクトリ
        hamdir=`/home/vpopmail/bin/vuserinfo -d $user@$domains`/Maildir/cur

        dbdir=`/home/vpopmail/bin/vuserinfo -d $user@$domains`/.spamassassin/
        [ ! -d $dbdir ] && mkdir $dbdir && chown vpopmail:vchkpw $dbdir && chmod 700 $dbdir
        
        # 正常メール学習
        if [ -d "$hamdir" ]; then
            su vpopmail -s "/bin/bash" -c \
            "sa-learn --ham $hamdir --dbpath $dbdir | \
            logger -p mail.info -t 'sa-learn for $user'"
        fi

        # スパムメール格納ディレクトリ
        spamdir=`/home/vpopmail/bin/vuserinfo -d $user@$domains`/Maildir/.Spam/cur

        # スパムメール学習
        if [ -d "$spamdir" ]; then
            # スパムメールをSpamAssassinに学習させる
            su vpopmail -s "/bin/bash" -c \
            "sa-learn --spam $spamdir --dbpath $dbdir | \
            logger -p mail.info -t 'sa-learn for $user'"

            # 受信後一ヶ月経過したスパムメールを削除
            tmpwatch -m 720 $spamdir
        fi
    done
done

[root@centos ~]# chmod +x spamassassin-learn ← SpamAssassin学習スクリプトへ実行権限付加

[root@centos ~]# /bin/mv spamassassin-learn /etc/cron.daily
 ← SpamAssassin学習スクリプトを毎日自動実行されるディレクトリへ移動

■rpmbuildで作成&インストールしたパッケージの自動アップデート無効化

rpmbuildで作成&インストールしたパッケージ(courier-authlib、courier-authlib-devel、dovecot、maildrop、maildrop-man)をyumによる自動アップデート対象外にする。
yumによる自動アップデートを無効化するには参照



▲このページのトップへ戻る

LPIロゴ Copyright© 2005-2010 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします