俺だけのために Ore! Tips!

vpopmail を使ったバーチャルドメイン対応メールサーバ構築

2004年09月10日 作業

qmail + vpopmail の組み合わせで仮想ドメイン対応のメールサーバを構築する。
ちなみに、qmail と tcpserver は既にインストール済み。


まずは vpopmail の最新ソースを取ってくる。

serv2# cd /usr/local/src
serv2# lynx http://www.inter7.com/

SOFTWARE→vpopmail→Download とリンクを伝っていき、
http://www.inter7.com/vpopmail/vpopmail-5.4.0.tar.gz
からダウンロード

serv2# tar xvfz vpopmail-5.4.0.tar.gz
vpopmail-5.4.0/
vpopmail-5.4.0/ChangeLog
vpopmail-5.4.0/AUTHORS
<略>
vpopmail-5.4.0/ldap/vpopmail.ldif
vpopmail-5.4.0/oracle/
vpopmail-5.4.0/oracle/oracle.create

serv2# cd vpopmail-5.4.0


vpopmail 実行ユーザー&グループを作成する

serv2# vi /etc/group

vchkpw:*:89: ← 追加

serv2# vipw

vpopmail:*:89:89::0:0:vpopmail user:/home/vpopmail:/bin/csh ← vpopmail 追加

serv2# mkdir /home/vpopmail
serv2# chown 89:89 /home/vpopmail


次に、リレー可否を書いたリレーファイルを用意する。
(/etc/tcp.smtp などが既にあるが、vpopmail ユーザーで編集が可能でないといけないので、~vpopmail/etc 以下に作成する)

serv2# mkdir /home/vpopmail/etc
serv2# chown 89:89 /home/vpopmail/etc
serv2# cp /etc/tcp.smtp /home/vpopmail/etc
serv2# tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
serv2# ls -la /home/vpopmail/etc
total 10
drwxr-xr-x  2 root      vchkpw   512 Sep  9 20:35 .
drwxr-xr-x  3 vpopmail  vchkpw   512 Sep  9 20:31 ..
-rw-r--r--  1 root      vchkpw  2114 Sep  9 20:35 tcp.smtp.cdb
-rw-r--r--  1 root      vchkpw    33 Sep  9 20:32 tcp.smtp

vpomail ユーザーが更新出来るように所有者を変更。

serv2# chown -R vpopmail /home/vpopmail/etc/
serv2# ls -la /home/vpopmail/etc/
total 10
drwxr-xr-x  2 vpopmail  vchkpw   512 Sep  9 20:35 .
drwxr-xr-x  3 vpopmail  vchkpw   512 Sep  9 20:31 ..
-rw-r--r--  1 vpopmail  vchkpw  2114 Sep  9 20:35 tcp.smtp.cdb
-rw-r--r--  1 vpopmail  vchkpw    33 Sep  9 20:32 tcp.smtp


configure を実行。

serv2# pwd
/usr/local/src/vpopmail-5.4.0
serv2# ./configure --prefix=/home/vpopmail --enable-roaming-users=y --enable-clear-passwd=n --enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp --enable-relay-clear-minuts=30 --enable-qmail-ext=n- -enable-default-domain=netandfield.com
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
<略>
checking whether many-domains is enabled... yes
checking whether any discontinued --enable commands have been used... yes
configure: error: --enable-default-domain has been superceded. The default domain should be put into the file ~vpopmail/etc/defaultdomain instead

ありゃ、エラー!?
ディフォルトドメインは configure する時に指定するんじゃなくて、~vpopmail/etc/defaultdomain を作れや・・・と言うてる?

--enable-default-domain 設定抜きでやり直し。

serv2# ./configure --prefix=/home/vpopmail --enable-roaming-users=y \
--enable-clear-passwd=n --enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp \
--enable-relay-clear-minuts=30 --enable-qmail-ext=n

? --enable-clear-passwd=n --enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp \
? --enable-relay-clear-minuts=30 --enable-qmail-ext=n
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes checking for gawk... no
<略>
checking whether any discontinued --enable commands have been used... no
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands

           vpopmail 5.4.0
            Current settings
---------------------------------------

vpopmail directory = /home/vpopmail
               uid = 89
               gid = 89
     roaming users = ON  --enable-roaming-users
    tcpserver file = /home/vpopmail/etc/tcp.smtp
    open_smtp file = /home/vpopmail/etc/open-smtp
rebuild tcpserver file = ON  --enable-rebuild-tcpserver-file (default)
 password learning = OFF --disable-learn-passwords (default)
     md5 passwords = ON  --enable-md5-passwords (default)
      file locking = ON  --enable-file-locking (default)
vdelivermail fsync = OFF --disable-file-sync (default)
     make seekable = ON  --enable-make-seekable (default)
      clear passwd = OFF --disable-clear-passwd
 user dir hashing  = ON  --enable-users-big-dir (default)
address extensions = OFF --disable-qmail-ext (default)
          ip alias = OFF --disable-ip-alias-domains (default)
     domain quotas = OFF --disable-domainquotas (default)
       auth module = cdb  --enable-auth-module=cdb (default)
          auth inc = -Icdb
          auth lib =
  system passwords = OFF --disable-passwd (default)
        pop syslog = show only failed attempts
                     --enable-logging=e (default)
      auth logging = ON  --enable-auth-logging (default)


今度は無事終了。
ディフォルト・ドメインファイルを作成。

serv2# echo 'netandfield.com' > /home/vpopmail/etc/defaultdomain
serv2# ls -la /home/vpopmail/etc
total 12
drwxr-xr-x  2 vpopmail  vchkpw   512 Sep 10 10:27 .
drwxr-xr-x  3 vpopmail  vchkpw   512 Sep  9 20:31 ..
-rw-r--r--  1 root      vchkpw    16 Sep 10 10:27 defaultdomain
-rw-r--r--  1 vpopmail  vchkpw  2114 Sep  9 20:35 tcp.smtp.cdb
-rw-r--r--  1 vpopmail  vchkpw    33 Sep  9 20:32 tcp.smtp
serv2# chown vpopmail /home/vpopmail/etc/defaultdomain


make & install を行う。

serv2# make
make  all-recursive
Making all in cdb
( cat warn-auto.sh;  echo CC=\'`head -1 conf-cc`\';  echo LD=\'`head -1 conf-ld`\';  cat find-systype.sh;  ) | sh > systype
<略>
gcc -I. -Icdb -I. -I. -I.      -g -O2 -Wall -c `test -f 'vchangepw.c' || echo './'`vchangepw.c
gcc  -g -O2 -Wall   -o vchangepw  vchangepw.o libvpopmail.a -lcrypt
serv2# make install-strip
make  INSTALL_PROGRAM="/usr/bin/install -c -o vpopmail -m 711 -g vchkpw  -s"  INSTALL_STRIP_FLAG=-s  `test -z '' ||  echo "INSTALL_PROGRAM_ENV=STRIPPROG=''"` install
Making install in cdb
<略>
  /usr/bin/install -c -o vpopmail -m 711 -g vchkpw  vkill /home/vpopmail/bin/vkill
  /usr/bin/install -c -o vpopmail -m 711 -g vchkpw  vmoddomlimits /home/vpopmail/bin/vmoddomlimits
  /usr/bin/install -c -o vpopmail -m 711 -g vchkpw  vchangepw /home/vpopmail/bin/vchangepw

終了。
ついつい、/home/vpopmail にインストールしちゃったけど、FreeBSD 的には、素直に(ディフォルトの)/usr/local/vpopmail にインストールした方がよかったかな。
次回、インストールすることがあればそうしちゃう。


tcpserver の起動スクリプトを修正。(POP プログラムと、リレー許可ファイルの場所を修正)

serv2# ls -la /home/vpopmail/bin/vchkpw
-rwx--x--x  1 vpopmail  vchkpw  150670 Sep 10 10:29 /home/vpopmail/bin/vchkpw
serv2# ls -la /home/vpopmail/etc/tcp.smtp
-rw-r--r--  1 vpopmail  vchkpw  33 Sep  9 20:32 /home/vpopmail/etc/tcp.smtp
serv2# ls -la /usr/local/etc/rc.d/qmail.sh
lrwxr-xr-x  1 root  wheel  13 Jul 28 00:18 /usr/local/etc/rc.d/qmail.sh -> /var/qmail/rc
serv2# cp /var/qmail/rc /var/qmail/rc.20040910; chmod 0 /var/qmail/rc.20040910
serv2# vi /var/qmail/rc

#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.

#/usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
(コメントにする)

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail &

/usr/local/bin/tcpserver -HR -x /home/vpopmail/etc/tcp.smtp -u 81 -g 81 0 smtp \
(tcp.smtp の場所変更)
/var/qmail/bin/qmail-smtpd &

/usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup serv2.netandfield.com \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
(POP プログラムを変更)

↑実は、上の /home/vpopmail/etc/tcp.smtp は間違い。正しくは /home/vpopmail/etc/tcp.smtp.cdb。詳しくは後述。


現在実行中の tcpserver & qmail を落とす。

serv2# ps -ax|grep tcpserver
64609  p0  R+     0:00.00 grep tcpserver
  457 con- I      0:00.96 /usr/local/bin/tcpserver -HR -x /etc/tcp.smtp.cdb -u 81 -g 81 0 smtp /v
  458 con- I      0:00.91 /usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup serv2.ne
serv2# ps -ax|grep qmail
64611  p0  R+     0:00.00 grep qmail
  456 con- I      0:07.04 qmail-send
  458 con- I      0:00.91 /usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup serv2.ne
  465 con- I      0:02.02 splogger qmail
  466 con- I      0:01.52 qmail-lspawn ./Maildir/
  467 con- I      0:00.11 qmail-rspawn
  468 con- I      0:00.67 qmail-clean
serv2# kill 457
serv2# kill 458
serv2# kill 456
serv2# ps -ax | grep tcpserver
serv2# ps -ax | grep qmail
64627  p0  R+     0:00.00 grep qmail


新しい設定で起動。

serv2# /usr/local/etc/rc.d/qmail.sh
serv2# ps -ax | grep tcpserver
64631  p0  S      0:00.00 /usr/local/bin/tcpserver -HR -x /home/vpopmail/etc/tcp.smtp -u 81 -g 81
64632  p0  S      0:00.00 /usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup serv2.ne
serv2# ps -ax | grep qmail
64630  p0  S      0:00.01 qmail-send
64632  p0  S      0:00.00 /usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup serv2.ne
64633  p0  S      0:00.00 splogger qmail
64634  p0  S      0:00.00 qmail-lspawn ./Maildir/
64635  p0  S      0:00.00 qmail-rspawn
64636  p0  S      0:00.00 qmail-clean
64638  p0  R+     0:00.00 grep qmail


おっとお!!その前にドメインやらユーザーやらの設定が必要だった!!

serv2# su vpopmail
%./vadddomain netandfield.com
Please enter password for postmaster:<パスワード>
enter password again:<パスワード>
could not open assign file
Error. Failed to add domain to assign file
Error: Could not update file

あれ〜?エラーになるじゃん。

%exit
exit
serv2# ./vadddomain netandfield.com
Please enter password for postmaster:<パスワード>
enter password again:<パスワード>

OK!
ううむ。ドメイン追加は root でやらないと駄目だったのか・・・
↓root でやったら出来た。(assign file のオーナーを変えればいいんだろうけど。何だかなぁ・・・)

serv2# ls -la ~vpopmail/domains
total 8
drwx------  3 vpopmail  vchkpw  512 Sep 10 10:57 .
drwxr-xr-x  8 vpopmail  vchkpw  512 Sep 10 10:29 ..
-rw-------  1 vpopmail  vchkpw   34 Sep 10 10:57 .dir-control
drwx------  3 vpopmail  vchkpw  512 Sep 10 10:57 netandfield.com

ユーザー追加は vpopmail ユーザーになって行う。

serv2# su vpopmail
%./vadduser shinoda
Please enter password for shinoda:<パスワード>
enter password again:<パスワード>
%ls -la ~vpopmail/domains/netandfield.com
total 18
drwx------  4 vpopmail  vchkpw   512 Sep 10 10:59 .
drwx------  3 vpopmail  vchkpw   512 Sep 10 10:57 ..
-rw-------  1 vpopmail  vchkpw    34 Sep 10 10:59 .dir-control
-rw-------  1 vpopmail  vchkpw    55 Sep 10 10:57 .qmail-default
-rw-------  1 vpopmail  vchkpw     0 Sep 10 10:59 .vpasswd.lock
drwx------  3 vpopmail  vchkpw   512 Sep 10 10:57 postmaster
drwx------  3 vpopmail  vchkpw   512 Sep 10 10:59 shinoda
-rw-------  1 vpopmail  vchkpw   229 Sep 10 10:59 vpasswd
-rw-------  1 vpopmail  vchkpw  2321 Sep 10 10:59 vpasswd.cdb
%exit
exit
serv2# cat ~vpopmail/domains/netandfield.com/vpasswd
postmaster:$1$JUyhck$9H3dmHyTRpbCuEEvIAkVrmN/:1:0:Postmaster:/home/vpopmail/domains/netandfield.com/postmaster:NOQUOTA
shinoda:$1$/7rDoe7b$7Gbf72.YJTOk6k8W9Po8H.:1:0:shinoda:/home/vpopmail/domains/netandfield.com/shinoda:NOQUOTA
serv2# ls -la ~vpopmail/domains/netandfield.com/shinoda
total 8
drwx------  3 vpopmail  vchkpw  512 Sep 10 10:59 .
drwx------  4 vpopmail  vchkpw  512 Sep 10 10:59 ..
drwx------  5 vpopmail  vchkpw  512 Sep 10 10:59 Maildir

で、試しに POP 接続するとOK!でも、SMTP 接続は駄目!!タイムアウトする。

serv2# touch /home/vpopmail/etc/open-smtp
serv2# chown vpopmail /home/vpopmail/etc/open-smtp
serv2# ls -la /home/vpopmail/etc/open-smtp
-rw-r--r--  1 root  vchkpw  58 Sep 10 11:10 /home/vpopmail/etc/open-smtp
serv2# cat /home/vpopmail/etc/open-smtp
221.12.197.34:allow,RELAYCLIENT="",RBLSMTPD=""  1094782252

POP before SMTP で、open-smtp ファイルもちゃんと出来ているようだが・・・

ああ、何かコンソールにエラー出てる。

tcpserver: warning: dropping connection, unable to read /home/vpopmail/etc/tcp.smtp: protocol error

くわぁ!!起動ファイルの記入ミスだ!!
/home/vpopmail/etc/tcp.smtp.cdb と書くところを、/home/vpopmail/etc/tcp.smtp にしていた!!

serv2# vi /var/qmail/rc
/usr/local/bin/tcpserver -HR -x /home/vpopmail/etc/tcp.smtp.cdb -u 81 -g 81 0 smtp \
/var/qmail/bin/qmail-smtpd &

serv2# ps -ax | grep tcpser
64631  p0  I      0:00.01 /usr/local/bin/tcpserver -HR -x /home/vpopmail/etc/tcp.smtp -u 81 -g 81
64632  p0  I      0:00.01 /usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup serv2.ne
serv2# ps -ax | grep qmail
64630  p0  I      0:00.01 qmail-send
64632  p0  I      0:00.01 /usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup serv2.ne
64633  p0  I      0:00.00 splogger qmail
64634  p0  I      0:00.00 qmail-lspawn ./Maildir/
64635  p0  I      0:00.00 qmail-rspawn
64636  p0  I      0:00.00 qmail-clean
serv2# kill 64631
serv2# kill 64632
serv2# kill 64630
serv2# /usr/local/etc/rc.d/qmail.sh


これで、shinoda@netandfield.com で送受信テストOK!

次に、バーチャルドメインの追加を行う。(naosaki-hp.jp)

serv2# /home/vpopmail/bin/vadddomain naosaki-hp.jp
Please enter password for postmaster:<パスワード>
enter password again:<パスワード>
serv2# ls -la /home/vpopmail/domains
total 10
drwx------  4 vpopmail  vchkpw  512 Sep 10 11:33 .
drwxr-xr-x  8 vpopmail  vchkpw  512 Sep 10 10:29 ..
-rw-------  1 vpopmail  vchkpw   34 Sep 10 11:33 .dir-control
drwx------  3 vpopmail  vchkpw  512 Sep 10 11:33 naosaki-hp.jp
drwx------  4 vpopmail  vchkpw  512 Sep 10 10:59 netandfield.com

テストユーザーを追加してみる。(ディフォルトドメインでは無いドメインのユーザーを追加する時は、必ずユーザー名の後ろに user@hogehoge.com のようにドメイン名を付けてやる必要がある)

serv2# su vpopmail
%~/bin/vadduser test@naosaki-hp.jp
Please enter password for test@naosaki-hp.jp:<パスワード>
enter password again:<パスワード>
%ls -la ~/domains/naosaki-hp.jp
total 18
drwx------  4 vpopmail  vchkpw   512 Sep 10 11:35 .
drwx------  4 vpopmail  vchkpw   512 Sep 10 11:33 ..
-rw-------  1 vpopmail  vchkpw    34 Sep 10 11:35 .dir-control
-rw-------  1 vpopmail  vchkpw    55 Sep 10 11:33 .qmail-default
-rw-------  1 vpopmail  vchkpw     0 Sep 10 11:35 .vpasswd.lock
drwx------  3 vpopmail  vchkpw   512 Sep 10 11:33 postmaster
drwx------  3 vpopmail  vchkpw   512 Sep 10 11:35 test
-rw-------  1 vpopmail  vchkpw   218 Sep 10 11:35 vpasswd
-rw-------  1 vpopmail  vchkpw  2310 Sep 10 11:35 vpasswd.cdb

じゃ、他のマシンから test@naosaki-hp.jp にメールしてみる。

%ls -la ~/domains/naosaki-hp.jp/test/Maildir/new
total 6
drwx------  2 vpopmail  vchkpw  512 Sep 10 11:36 .
drwx------  5 vpopmail  vchkpw  512 Sep 10 11:35 ..
-rw-------  1 vpopmail  vchkpw  781 Sep 10 11:36 1094783817.65010.serv2.netandfield.com,S=708

お、来てる。

%cat ~/domains/naosaki-hp.jp/test/Maildir/new/1094783817.65010.serv2.netandfield.com,S=708
Return-Path: <shinoda@netandfield.com>
Delivered-To: test@naosaki-hp.jp
Received: (qmail 65007 invoked by alias); 10 Sep 2004 11:36:57 +0900
Received: from unknown (HELO masamain.netandfield.com) (221.12.197.34)
  by serv2.netandfield.com with SMTP; 10 Sep 2004 11:36:57 +0900
Message-Id: <200409100237.AA00485@masamain.netandfield.com>
From: SHINODA Masanori <shinoda@netandfield.com>
Date: Fri, 10 Sep 2004 11:37:04 +0900
To: test@naosaki-hp.jp
Subject: Test
MIME-Version: 1.0
X-Mailer: AL-Mail32 Version 1.13
Content-Type: text/plain; charset=iso-2022-jp

篠田@ネット・アンド・フィールドです。

これはテストメールです。

----
SHINODA Masanori <shinoda@netandfield.com>
Net & Field Co.,Ltd. Internet Service Section
Phone/FAX 050-5507-3452  Portable 090-6419-9919



ばっちりじゃん!!

最後に、POP before SMTP 用に作成されたリレー許可一時ファイルを掃除するためのスクリプトを crontab に登録してインストールは終了。

%exit
exit
serv2# ls -la /home/vpopmail/etc/open*
-rw-r--r--  1 root  vchkpw  58 Sep 10 11:39 /home/vpopmail/etc/open-smtp
-rw-r--r--  1 root  vchkpw   0 Sep 10 11:39 /home/vpopmail/etc/open-smtp.lock
serv2# cat /home/vpopmail/etc/open-smtp
221.12.197.34:allow,RELAYCLIENT="",RBLSMTPD=""  1094783953
serv2# crontab -e

15,45   *       *       *       *       /usr/home/vpopmail/bin/clearopensmtp 2>&1 1>/dev/null

毎時15,45分にクリア処理が走るようにする。

<参考:勝手に更新される qmail 関連ファイル>
vpopmail をインストールすると、下記の qmail 関連ファイルが勝手に更新される。(だから、自分でバーチャルドメインの設定をしなくてもええわけやね)

■ /var/qmail/control/rcpthosts

(例)
serv2# cat /var/qmail/control/rcpthosts
localhost.netandfield.com
serv2.netandfield.com
netandfield.com
naosaki-hp.jp

このサーバで、これらのドメイン宛のメールも受け取るよ・・・ということ。

■ /var/qmail/control/virtualdomains

(例)
serv2# cat /var/qmail/control/virtualdomains
netandfield.com:netandfield.com
naosaki-hp.jp:naosaki-hp.jp


上の例では、naosaki-hp.jp ドメイン宛のメール(例えば hoga@naosaki-hp.jp)は、naosaki-hp.jp-hoge@localhost 宛のメールとして扱う。そして、naosaki-hp.jp というユーザーのホームディレクトリに置かれている .qmail ファイルを見て適切な処置を行う。(実在のユーザーに転送したり、あるいは vpopmail のようなプログラムにメールを食わせたり・・・)
しかし、今回の場合、実際には naosaki-hp.jp なんてユーザーはいない。じゃ、ここで指定されている naosaki-hp.jp って?

実は、次に紹介する users/assign ファイルに書かれた qmail の処理の中だけで(ローカル配送時にのみ)有効なユーザーというのが存在するわけだね。

■ /var/qmail/users/assign

(例)
serv2# cat /var/qmail/users/assign
+netandfield.com-:netandfield.com:89:89:/home/vpopmail/domains/netandfield.com:-::
+naosaki-hp.jp-:naosaki-hp.jp:89:89:/home/vpopmail/domains/naosaki-hp.jp:-::
.


2行目の意味は、「(例えば)naosaki-hp.jp-hoge@localhost 宛のメールは naosaki-hp.jp というアカウント(virtualdomains で指定してあったユーザーだ!!実際は vpomain の UID, GID である 89:89 が割り当てられている)のホームディレクトリ(/home/vpopmail/domains/naosaki-hp.jp)にある .qmail-hoge の内容に沿って処理される。.qmail-hoge が無ければ当然 .qmail-default が使われる。」という意味だ。

で、.qmail-default に「vpopmail 関連プログラム(/home/vpopmail/bin/vdelivermail)にメールを食わせろ」という設定がしてあるので、バーチャルホスト宛に来たメールが正しく(/home/vpopmail/domains/virtualhost 以下のユーザーの Mailbox に)配送されるわけだね。


前ページに戻る


Copyright (C) 2004 S.Maaasamasa.