qmail-1.03+vpopmail-5.4.0 インストールメモ #--------------------------------------------------------------------------------------------- # vpopmail 概要 #--------------------------------------------------------------------------------------------- vpopmail はPOP を手助けするパッケージです。通常linux システムユーザーをメールアカウントとするシステムではPOP 認証にcheckpassword パッケージを利用しますが、checkpassword パッケージはバーチャルアカウント対応がされていません。一台のサーバーで複数ドメインを管理する場合はメールサーバーをバーチャル対応する必要がありますが、これにはvpopmail のvchkpw パッケージを利用します。 #--------------------------------------------------------------------------------------------- # 構築するシステム概要 #--------------------------------------------------------------------------------------------- test01.com : バーチャルドメイン名その1 test : test01.com ドメインに属するシステム仮想ユーザー test@test01.com : メールアドレス test02.com : バーチャルドメイン名その1 test : test02.com ドメインに属するシステム仮想ユーザー test@test02.com : メールアドレス 上記のように、vpopmail では一台のサーバーでtest01.com、test02.com 等複数ドメインのメールアカウントを管理することが出来ます。test01.com、test02.com ドメインのtest メールアカウントはメールサーバー的には別メールアカウントとして管理され、linux システムアカウントとは切り離してvpopmail によって管理されます。 #--------------------------------------------------------------------------------------------- # インストール方法 #--------------------------------------------------------------------------------------------- あらかじめ、qmail をインストールします。qmail は「/usr/local/qmail」 にインストールします。qmail のインストールに関してはこのドキュメントでは割愛します。 また、メールサーバーのPOP プログラム(qmail-pop3d) は通常スーパーサーバーより起動されます。qmailでは、詳細なアクセス制御が可能なtcpserver をスーパーサーバーとして利用します。tcpserver のインストールも割合させていただきます。 vpopmail のソースをインターネットよりダウンロードします。 # su root # cd /usr/local/src # wget vpopmail-5.4.0.tar.gz 続けて、vpopmail のインストール先ディレクトリ、およびグループ・ユーザーを作成します。 # mkdir /usr/local/vpopmail # mkdir /usr/local/vpopmail/etc # touch /usr/local/vpopmail/etc/tcp-smtp (必要であれば) # groupadd vchkpw # useradd -g vchkpw -d /usr/local/vpopmail -s /bin/nologin vpopmail vpopmail ソースを解凍した後、インストールを行います。 # tar zxvf vpopmail-5.4.0.tar.gz # cd ./vpopmail-5.4.0 # ./configure # make # make install ※ configure について ※ vpopmail では、configure オプションによって動作を定義します。下記のうち、必要なオプションのみを./configure で指定してください。 ● vpopmail の基本的な設定 --enable-clear-passwd=[y|n] | メールアカウントのパスワードを平文で残すか? | y : 残す n : 残さない --enable-qmaildir=[Qmail Path] | qmail 本体へのパスを設定 従来はディフォルトドメインを--enable-default-domain にて設定していましたが、5.4.0 より「/usr/local/vpopmail/etc/defaultdomain」に設定します。 ● APOP に関する設定 vpopmail 5.4.0 では、APOP にディフォルトで対応しています。つまり、vadddomain やvadduser にてドメインまたは、アカウントを生成する際に明視的にAPOP 対応オプションをつける必要はありません。 ただ、ひとつ気をつけるべき点は、メールサーバーをAPOP に対応する際は--enable-clear-passwd=y としてメールアカウントのパスワードをサーバー上に残すようコンパイルする必要があります。 --enable-md5-passwords=[y|n] | メールアカウントのパスワードをMD5 暗号化するか? | y : する n : しない ● 拡張アドレスに関する設定 --enable-qmail-ext=[y|n] | 仮想メールアカウントに拡張アドレスを利用させるか? | y : 利用させる n : 利用させない --enable-qmail-ext=n にした場合、例えば、test-ext@test.com 宛にメールを送るとqmail はバウンスしますが、--enable-qmail-ext=y にした場合はtest-ext@test.com 宛のメールはtest メールアカウントに配信されます。 ● quota によるドメインごと容量制限 vpopmail 管理のアカウントに容量制限を実装したい場合は2 つの方法があります。 ・ユニークシステムユーザーに対してドメインを割当て、ドメインごとにquota を掛ける(システム quota) ・vpopmail 仮想ドメインごとにquota を掛ける(vpopmail が実装するquota) > システムquota を用いる場合 ドメインを作成する際、次のコマンドでシステムユーザーとひも付けします。 /usr/local/vpopmail/bin/vadddomain -i [システムユーザーID] -d [ディレクトリパス] [ドメイン名] > vpopmail が実装するquota を用いる場合 vpopmail 全体での総容量管理は、通常「/usr/local/vpopmail/etc/vlimits.default」にて定義します。ただし、各ドメインごとに制限したい場合は、ドメインごとディレクトリ配下に「.qmailadmin-limits」を作成し、容量制限の定義を記述します。また、アカウントごとに容量制限することもできます。 ドメイン単位 でのquota 制限 | quota 項目を設定する アカウント単位でのquota 制限 | default_quota 項目を設定し、アカウント作成時のディフォルト | quota を設定 なお、受信メールを削除(PC のメーラーがサーバー上のメールを残さない設定としている場合など) した後のMaildir 容量や、.qmail ファイルの転送によって配送されたメール(qmail-local より直接的に配送されたメール) の容量は、総容量には反映されません。これを反映させるには、vpopmail 付属のqmail-maildir++.patch パッチをqmail に当てる必要があります。パッチを当てた場合、qmail-pop3d によってメールが受信された際にmaildirquota 値が更新されます。 ※ 注意 ) vpopmail は、configure の prefix オプションにてインストール先を指定しても、vpopmail ユーザーのホームディレクトリにインストールされてしまいます。 システムquota とvpopmail によるquota は同居できません。なぜなら、システムquota がMAX となった際、vpopmail によるquota 制御ファイルが書き込めなくなるからです。 ドメイン単位でのquota 制限を行う場合は次のコンパイルオプションを追加する必要があります。 --enable-domainquotas=[y|n] | ドメイン全体での総容量管理をするか? | y : する n : しない > コマンドにてvpopmail が実装するquota 値を設定するには? ドメインごとの容量制限はvmoddomlimits コマンドにて変更することができます。 vmoddomlimits [-Q xxx|-q xxx|-M +++|-m +++] [Domain Name] -Q xxx : 指示されたドメインの総容量をMByte 単位で指定 -q xxx : 指示されたドメインに属するメールアカウントの総容量をByte 単位で指定 -M +++ : 指示されたドメインの最大保持メッセージ数を指定 -m +++ : 指示されたドメインに属するメールアカウントの最大保持メッセージ数を指定 アカウントごとの容量制限はvsetuserquota コマンドにて変更することができます。 vsetuserquota [email address] [xxxxxS or xxxxxS,+++++C] xxxxxS : 指示されたメールアカウントの総容量をByte 単位で指定 +++++C : 最大保持メッセージ数を指定 ※ 注意 ) ドメイン全体のquota 容量制限に引っかかった場合は送信者宛に「domain is over quota」のメールが送信され、メールアカウントごとのquota 容量制限に引っかかった場合は送信者宛に「user is over quota」のメールが送信されます。 メール容量の利用率が90 % を超えた場合は「/usr/local/vpopmail/domains/.quotawarn.msg」の内容が送信者にメールされます。 vpopmail が実装する容量制限は domains/[ドメイン]/.qmail-default ファイルによって処理されます。例えば、.qmail ファイルに「./Maildir/」の記述をし、.qmail-default ファイルを経由せずにローカル配送した場合はvpopmail が実装する容量制限が有効になりません(これはvpopmail の仕様)。この場合は.qmail ファイルに「&[自身のメルアド]」と記載することで回避できます。 maildrop でローカル配送した際も、vpopmail が実装するドメイン単位のquota は有効にはなりません。これに対処するにはシステムquota を使うしかなさそうです。 ● POP BEFORE SMTP の実装 --enable-roaming-users=[y|n] | POP BEFORE SMTP を実装するか? | y : 実装する n : 実装しない --enable-tcpserver-file=[filePath] | tcpserver が利用するIP を記憶するファイル(tcp-smtp) | へのパス | ディフォルト : /home/vpopmail/etc/tcp.smtp --enable-tcprules-prog=[programPath] | tcprules プログラムへのパス | ディフォルト : /usr/local/bin/tcprules --enable-relay-clear-minutes=[Minutes] | POP BEFORE SMTP のアクセス元情報の削除間隔 | ディフォルト : 180 分 ● ロギング --enable-log-name=[Text] | syslog に残すログの名称 --enable-logging=[Log Type] | syslog に残すログのタイプ | n=nothing、e=errors only、y=all attempts, | p=errors with passwords 例 ) # ./configure \ --prefix=/usr/local/vpopmail --enable-clear-passwd=y --enable-qmail-ext=n \ --enable-qmaildir=/usr/local/qmail --enable-domainquotas=n \ --enable-roaming-users=y --enable-tcpserver-file=/usr/local/vpopmail/etc/tcp-smtp \ --enable-tcprules-prog=/usr/local/ucspi-tcp/bin/tcprules \ --enable-relay-clear-minutes=15 \ --enable-log-name=vpopmail --enable-logging=y 最後にvpopmail をコンパイル、インストールします。 上記手順が正常に行われれば、以下の環境が作成されます。 qmail 本体 :/usr/local/qmail/ 以下にインストール vpopmail 本体 :/usr/local/vpopmail/ 以下にインストール tcpserver スーパーサーバー :/usr/local/ucspi-tcp/ 以下にインストール #--------------------------------------------------------------------------------------------- # qmail の設定 #--------------------------------------------------------------------------------------------- /usr/local/qmail/control 配下にはqmail の設定ファイルが置かれます。ここのファイルを元に、qmail の動作が決定されるのです。以下、/usr/local/qmail/control 配下に置くqmail の設定ファイルに関して説明します。 ● me ファイル(メールサーバー自体の設定) 自身のドメインを記述します。シェルスクリプトやCGI などで、サーバー内部からメールを送信する場合、補完されるドメインを記載します。 下記の例では、サーバー内部から xxxx 宛にメール送信した場合、実際はxxxx@test.com 宛にメールが送信されます。 例 ) ------------------------------------------------------------ test.com ------------------------------------------------------------ ● locals ファイル(受信側の設定) 通常、qmail で受信するドメインはlocals ファイルに記載しますが、vpopmail によってドメインをバーチャル管理する際はlocals に管理するドメインを記述してはいけません。locals ファイルはvpopmail によって更新されるので、特に手動で編集する必要はありません。 ● rcpthosts ファイル(送信側の設定) qmail は、rcphosts ファイルの定義に従ってメール送信するか否かの判断が行われます。これは主にメール中継をする際の定義を記述します。rcphosts ファイルはvpopmail によって更新されるので、特に手動で編集する必要はありません。 ● virtualdomains ファイル(バーチャルドメインの設定) virtualdomains ファイルはバーチャルドメインを管理するためにqmail が参照するファイルです。virtualdomains ファイルはvpopmail によって更新されるので、特に手動で編集する必要はありません。 #--------------------------------------------------------------------------------------------- # バーチャルドメイン、仮想メールアカウントの作成 #--------------------------------------------------------------------------------------------- バーチャルドメイン、仮想メールアカウントは全てvpopmail にて管理されます。vpopmail にてqmail を構成していない環境下では、POP アカウントは全てqmail によって管理されていました。vpopmail にてバーチャル対応されたことによりPOP アカウントは全てvpopmail のCDB パスワードファイルによって一元管理します。 vpopmail では、通常/usr/local/vpopmail/domains 直下にバーチャルドメインのディレクトリを作成し、さらにその配下に各バーチャルドメインごとの仮想メールアカウントのメールボックスが作成されます。 ● バーチャルドメイン登録/削除 ※ test.com ドメインを新規に作成する # /usr/local/vpopmail/bin/vadddomain test.com ※ test.com ドメインを削除する # /usr/local/vpopmail/bin/vdeldomain test.com ● 仮想ユーザー登録/削除 ※ test 仮想メールアカウントをtest.com ドメインのメールアカウントとして作成する # /usr/local/vpopmail/bin/vadduser test@test.com ※ test.com ドメインのtest 仮想メールアカウントを削除する # /usr/local/vpopmail/bin/vdeluser test@test.com #--------------------------------------------------------------------------------------------- # 拡張メールアドレスの対応 #--------------------------------------------------------------------------------------------- vpopmail ではオプションによって仮想メールアカウントの拡張メールアドレスが対応できます。ただし「/usr/local/qmail/assign」を独自に編集し、拡張メールアドレスを独自で編集した定義で処理すると下記の通りではありません。 ● 拡張メールアドレスに対応した(--enable-qmail-ext=y) 場合のvpopmail の動き 拡張メールアドレスに対応したvpopmail では、test-ext@test.com 宛にメールを送るとqmail はtest メールアカウントにメールを配送します。 ただし、test-ext@test.com 宛のメールは全てtest メールアカウントの.qmail、および.qmail-defaultにて処理されることに注意してください。もし、.qmail-ext にて処理したい場合は、「/usr/local/qmail/users/assign」を編集してください。 ● 拡張メールアドレスに対応していない(--enable-qmail-ext=n) 場合のvpopmail の動き 拡張メールアドレスに対応していないvpopmail では、test-ext@test.com 宛にメールを送るとqmail は”メールアカウントなし”の理由でメールを送信者にバウンスします。 ただし、「/usr/local/qmail/users/assign」に下記のように、vpopmail を経由しないでメール配送を行う場合は、メールボックス配下の.qmail-default にてメールが処理されます。 +local:user:uid:gid:homedir:dash:ext: #--------------------------------------------------------------------------------------------- # サービスの起動 #--------------------------------------------------------------------------------------------- vpopmail では./configure のオプションによってはPOP BEFORE SMTP を有効にすることができます。 POP BEFORE SMTP では、外部中継判断のためにtcp-smtp.cdb ファイルを用い、tcpserver がメールを送信する際に参照されます。ただし、tcp-smtp.cdb が更新されるタイミングはメールアカウントがPOP した時となります。 ● tcp-smtp.cdb ファイルの作成に関して tcp-smtp.cdb ファイルはメールアカウントがPOP してきた時に更新されます。実際は、vpopmail 付属のvchkpw が(POP 時に) 作成するopen-smtp ファイルとtcpserver 付属の静的アクセス制御ファイルtcp-smtp ファイルを元にtcp-smtp.cdb が作成されます。 open-smtp ファイル :POP した外部ユーザーのIP を記憶 tcp-smtp ファイル :静的に許可する外部ユーザーのIP を記憶 open-smtp + tcp-smtp = tcp-smtp.cdb となります ● tcp-smtp ファイルの作成に関して まず、ディフォルトで外部中継を許可するIP を記載するtcp-smtp ファイルを作成します。このファイルは必ず/usr/local/vpopmail/etc 直下に作成してください。さもないとPOP 時に「tcp-smtp.cdb」が「tcp-smtp」を含めた形で作成されません。 # cd /usr/local/vpopmail/etc # vi tcp-smtp 例 ) 下記設定では、100.100.100.100、200.200.200.** からの接続はSMTP 中継が強制的に許可され、それ以外のホストについては「/usr/local/qmail/control/rcpthosts」の設定により中継可否が決定されます。 ------------------------------------------------------------ 100.100.100.100:allow,RELAYCLIENT="" 200.200.200.:allow,RELAYCLIENT="" :allow ------------------------------------------------------------ ※ 最後の「:allow」を記述しないと、rcphosts の設定が無効となります。 次に作成した「tcp-smtp」をデータベース化します。 # /usr/local/bin/tcprules tcp-smtp.cdb tcp-smtp.tmp < tcp-smtp これにより以降、POP されたと同時に「tcp-smtp」の定義と「open-smtp」の定義を含む「tcp-smtp.cdb」が作成されます。 #--------------------------------------------------------------------------------------------- # 起動スクリプト作成 #--------------------------------------------------------------------------------------------- qmail を利用するにはqmail のqmail-startd を起動させるスクリプトを用意します。これはqmail にすでに用意してあるのでこれを利用します。なお、今回はMaildir 形式でqmail を利用するのでスクリプトを変更します。 # cd /usr/local/qmail # cp ./boot/home ./rc # chmod 700 ./rc # vi rc ↓ ココから ------------------------------------------------ #!/bin/sh # Using splogger to send the log through syslog. # Using qmail-local to deliver messages to ~/Mailbox by default. exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start ./Maildir/ splogger qmail ~~~~~~~~~~ ← Maildir 形式に変更 ↑ ココまで ------------------------------------------------ 次に、qmail を実際起動するための起動スクリプトを用意します。 # cd /etc/rc.d/init.d/ # vi qmail ↓ ココから ------------------------------------------------ !/bin/sh # # qmail vpopmail 対応qmail 起動スクリプト # # chkconfig: 345 80 30 # description: Qmail # # config: /usr/local/qmail/controls/ # # 共通シェル関数を読み込む . /etc/rc.d/init.d/functions QMAILPATH=/usr/local/qmail VPOPMAILPATH=/usr/local/vpopmail TCPSERVERPATH=/usr/local/ucspi-tcp [ -f $QMAILPATH/rc ] || exit 0 case "$1" in start) echo -n $"Starting qmail: " sh $QMAILPATH/rc & # SMTP 起動 # 1. -H -R にてリモート先に関する情報を集めない # 2. -v にてログを詳細に出力 # $TCPSERVERPATH/bin/tcpserver -H -R -v \ -u `/usr/bin/id -u qmaild` -g `/usr/bin/id -g qmaild` \ -x $VPOPMAILPATH/etc/tcp-smtp.cdb \ 0 25 \ $QMAILPATH/bin/qmail-smtpd 2>&1 | \ $QMAILPATH/bin/splogger smtpd 3 & # POP3 起動 # 1. -H -R にてリモート先に関する情報を集めない # 2. -v にてログを詳細に出力 # /usr/local/ucspi-tcp/bin/tcpserver -H -R \ 0 110 \ $QMAILPATH/bin/qmail-popup ns.tiwata.mirai.ad.jp \ $VPOPMAILPATH/bin/vchkpw \ $QMAILPATH/bin/qmail-pop3d Maildir 2>&1 | \ $QMAILPATH/bin/splogger pop3d 3 & echo touch /var/lock/subsys/qmail ;; stop) echo -n $"Shutting down qmail: " # POP3/SMTP 停止 PID1=`/bin/ps -ax | /bin/grep 'tcpserver.*0 [110|25].*' | /bin/awk '{print $ 1}'` # qmail 停止 PID2=`/bin/ps -aef | /bin/grep qmail | /bin/awk '{print $2}'` if [ "x$PID1" != "x" -a "x$PID2" != "x" ] ; then /bin/kill ${PID2} ${PID1} 1> /dev/null 2>&1 fi echo rm -f /var/lock/subsys/qmail ;; restart) $0 stop $0 start ;; *) echo "Usage: qmail {start|stop|restart}" exit 1 esac exit 0 ↑ ココまで ------------------------------------------------ #--------------------------------------------------------------------------------------------- # qmail の起動 #--------------------------------------------------------------------------------------------- 以上でqmail、vpopmail の設定が全て終わりました。下記のスクリプトを実行することによりqmail、vpopmail はtcpserver 経由で起動されます。 qmail 起動方法 : /etc/rc.d/init.d/qmail start qmail 停止方法 : /etc/rc.d/init.d/qmail stop