はじめに
別のエントリでqmailをrelay-ctrlを使ってPOP Before SMTPを実現し、Virtual Domainはqmaiの機能を使ったやり方で紹介しましたが、今回はqmail+vpopmailを使用した方法について説明します。既にqmailが動いている人向けの移行注意点も一緒に記載します。
前回と同じくセットアップの前提条件として
を含んでいます。APOPには今回も対応しませんが、vpopmailのビルドオプションで簡単に実現はできそうです。
vpopmailの特徴
普通にqmailだけでメールアドレスを管理すると最終的に配信されるユーザ毎にUNIXアカウントが必要になりますが、vpopmailはUNIXアカウントとは別にメールアドレスとパスワードを保持し、メールスプールも一括管理されます。
また、Virtual Domainの追加や、ユーザ、aliasの追加は全てコマンドラインからvpopmailのコマンドを入力することによって行われます。Web上からユーザやaliasの管理ができるqmailadminやvqadminなどのツールもオープンソースで出ています。
更に標準でPOP Before SMTPにも対応しています。
必要なパッケージ
qmail+vpopmailを運用させるのに必要なパッケージは以下の通りです。
portsを最新にして、portinstall等からインストールして下さい。
もし、qmailの付与するヘッダの日付がGMTじゃなく、localtime(JST)で表示させたい場合は先に以下の設定をしてパッチの準備をしておきます。
| # cd /usr/ports/mail/qmail/files # fetch http://mirror.averse.net/pub/FreeBSD/ports/local-distfiles/sada/qmail-date-localtime.patch.gz # gzcat qmail-date-localtime.patch.gz > patch-date-localtime # rm qmail-date-localtime.patch.gz |
※一応標準設定で不正中継対策は大丈夫なように出来ていますが、「telnet relay-test.mail-abuse.org」 で全てのチェックをパスしたいときには先に以下の設定をしてパッチの準備をしておきます。
| # cd /usr/ports/mail/qmail/files # fetch http://www.qmail.org/qmail-smtpd-relay-reject # mv qmail-smtpd-relay-reject patch-qmail-smtpd-relay-reject |
簡単にそれぞれのパッケージの説明をします(間違っているかもしれません)。
| qmail | MTA本体 |
| ucspi-tcp | qmailをセキュアな状態で運用するためのwrapper tcpserverというプログラムからqmailの各種プログラムを呼び出す |
| checkpassword | popでメール受信する際に行うパスワードチェックプログラム qmailのパッケージに入っているpop3デーモンが呼び出す |
| vpomail | qmailでVirtual DomainとPOP Before SMTPを実現するためのプログラム群 |
vpopmailのインストール先について
portsからvpopmailをインストールすると、/usr/local/vpopmail配下に設定されます。また、vpopmailはこのインストールされたディレクトリ配下に各ドメイン、ユーザ、alias、受信メールをストアするので、なんかイヤです。できるだけ/usrパーティションが増えすぎないように考慮して、私はvpopmailの各設定ファイルについては/var/vpopmailに設定するように変更しました。
| # mkdir /var/vpopmail # mkdir /var/vpopmail/domains # rmdir /usr/local/vpopmail/domains # ln -s /var/vpopmail/domains /usr/local/vpopmail/. |
qmail+vpopmailの設定
※既にqmail単体でVirtual Domainを実現している人は、全てのユーザのメール受信を確認後、qmailサービスを停止し、以下のファイルを削除して、qmailを停止してから作業を行って下さい。
/var/qmail/controlの設定
qmailの各種初期設定情報は/var/qmail/controlディレクトリ配下に準備します。設定するマシンのIPアドレスがグローバルアドレスでネームサーバで逆引き設定がされている場合は以下のコマンドで自動で設定されます。
| # /var/qmail/configure/config |
私の環境では上記コマンドを実行するとプロバイダの名前が各種設定ファイルに登録されてしまうので、自分で/var/qmail/controlディレクトリ配下のファイルを編集する事になりました。以下に個々のファイルの設定内容を示します。
| /var/qmail/control/defaultdomain
hijiki.net |
↑これは@以下が省略されたメールを送信した際に自動的に付与するドメイン名です。
| /var/qmail/control/locals
localhost |
↑受信するホスト名ドメイン名を記述します。これはqmail-sendというプロセスが参照します。
| /var/qmail/control/rcpthosts
localhost |
↑受信するホスト名ドメイン名を記述します。これはqmail-smtpdというプロセスが参照します。後述するVirtual Domainを設定する時にもこのファイルをいじります。
| /var/qmail/control/me
hijiki.net |
↑自サーバのFQDNを指定します。
| /var/qmail/control/plusdomain
net |
↑ドメイン部が+で終わっている場合にその後ろに付与する文字列を指定します。何の為にあるのかよく分かりません。適当でいいと思います。
qmailのaliasの削除
qmailインストール直後には/var/qmail/alias配下に.qmail-*というaliasファイルがあります。既にqmailを利用している人もaliasファイルはこのディレクトリ上に作成していると思いますが、vpopmailを使用する場合、aliasの管理もvpopmailが/usr/local/vpopmail/domainsディレクトリ配下で管理しますので、全て一旦削除します。
| # cd /var/qmail/alias # rm -f .qmail-* |
Virtual Domainの作成
それでは必要なVirtual Domainを作成しましょう。今回はhijiki.netのドメインを作成します。別にvpopmailを使ってVirtual Domainを利用するからといって、複数のドメインである必要はありません。ドメインが一つだけでも、コマンドラインでユーザ管理等が行えるので便利ですよ。
さて、作り方ですが、/usr/local/vpopmail/binにあるvadddomainコマンドを使います。vadddomainは指定ドメインの設定を行うほかに、「postmaster@指定ドメイン名」を作成しますので、postmasterのメール受信パスワードの設定も同時に行います。
具体的には「vadddomain ドメイン名パスワード」の形式で実行します。パスワードはコマンドライン引数で省略した場合、コマンド実行後に聞いてきますのでそこで入力してもOKです。
「vdominfo ドメイン名」で作成されたドメイン情報が表示されます。ドメイン名を間違えて入力してしまったら、「vdeldomain ドメイン名」で削除もできます。
| # cd /usr/local/vpopmail/bin # ./vadddomain hijiki.net password01 # ./vdominfo hijiki.net domain: hijiki.net uid: 89 gid: 89 dir: /usr/local/vpopmail/domains/hijiki.net users: 1 |
ユーザの追加
ユーザの新規追加は「vadduser ユーザ名@ドメイン名」の形式で行います。実行するとパスワード入力を二回聞かれますので、同じパスワードを入力してください。
追加確認は「vuserinfo ユーザ名@ドメイン名」でOKです。また、ユーザ名を間違えてしまったら「vdeluser ユーザ名@ドメイン名」で削除します。
| # ./vadduser hoe@hijiki.net Please enter password for hoe@hijiki.net:[パスワードを入力] enter password again:[パスワードを入力] # ./vuserinfo hoe@hijiki.net name: hoe passwd: $1$o1AXafVj$mMC9X8tz.cEdxE3Nw7B1D0 clear passwd: uid: 1 gid: 0 flags: 0 gecos: hoe limits: No user limits set. dir: /usr/local/vpopmail/domains/hijiki.net/hoe quota: NOQUOTA usage: NOQUOTA account created: Sat Nov 27 20:10:28 2004 last auth: Never logged in |
aliasの設定
メールサーバを立ち上げると、root,webmaster,postmaster,infoあたりのユーザにメールが必ずと行っていいほど来るようになりますね。まあ基本的にはSPAMなんでしょうけど、その辺のメールをaliasで一人のユーザに転送する設定をしましょう。postmasterはvadddomainで自動的に個別のアカウントが作成されますが、aliasを設定すればそちらが優先されますので、転送しておいた方が便利です。
コマンドは「valias -i ユーザ名@ドメイン名 alias名@ドメイン名」となります。一覧を見るには「valias -s ドメイン名」とします。aliasの削除は「valias -d alias名@ドメイン名」です。
| # ./valias -i yotan@hijiki.net asd@hijiki.net # ./valias -s hijiki.net root@hijiki.net -> yotan@hijiki.net webmaster@hijiki.net -> yotan@hijiki.net info@hijiki.net -> yotan@hijiki.net postmaster@hijiki.net -> yotan@hijiki.net asd@hijiki.net -> yotan@hijiki.net rabi# ./valias -d asd@hijiki.net |
tcpserverの設定
qmailのデーモンはtcpserverから起動されます。tcpserverはいわゆる接続制御を行ってくれます。
qmailのデフォルトでは/etc/tcp.smtpを使用するのが一般的ですが、vpopmailはPOP Before SMTPの制御の為に動的に/usr/local/vpopmail/etc配下に、このtcp.smtpとPOPログイン情報を追加したtcp.smtp.cdbを作成しますので、デフォルト設定を変更するファイルは/usr/local/vpopmail/etc/tcp.smtpになります。
今回はsmtpに対するアクセスをローカルエリア内からのみアクセス可能な設定をします。自宅の環境はネットワークが192.168.0.0/24となっています。
/usr/local/vpopmail/etc配下にtcp.smtpという名前でファイルを作成します。中身は以下の様に設定します。
| /usr/local/vpopmail/etc/tcp.smtp
192.168.0.:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT="" |
一旦vpopmailを組み込んだqmailが動作してしまえばtcpserverが認識できるcdb形式のファイルは自動的に作成されるのですが、始めは一応手動で作成しておいた方がよさそうです。以下のコマンドで/usr/local/vpopmail/etc/tcp.smtp.cdbが作成されます。
| # /usr/local/bin/tcprules /usr/local/vpopmail/etc/tcp.smtp.cdb /usr/local/vpopmail/etc/tcp.smtp.tmp < /usr/local/vpopmail/etc/tcp.smtp |
今回はsmtpに対する制限だけを説明します。pop3についても制限をかけることが出来ますが、今回は省略します。
POP Before SMTPタイムアウトの設定
POPへのアクセス後一定時間経ったらSMTPの許可リストをクリアするために、cronで5分周期程度でプログラムを実行させる必要があります。
crontab -eでcrontabに以下の一行を追加します。
| */5 * * * * /usr/local/vpopmail/bin/clearopensmtp > /dev/null 2>&1 |
/var/qmail/rcの作成
portsからqmailをインストールすると、/usr/local/etc/rc.d/qmail.shの実体は/var/qmail/rcにシンボリックリンクされています。しかし実際にはそのファイルは存在しませんので、一から作る必要があります。
以下にサンプルのrcファイルを示します。
/var/qmail/rc (/usr/local/etc/rc.d/qmail.sh)
#!/bin/sh
case $1 in
start)
echo "Start qmail ..."
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail &
/usr/local/bin/tcpserver -v -u 82 -g 81 \
-x /usr/local/vpopmail/etc/tcp.smtp.cdb 0 smtp \
/var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
/usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup hijiki.net \
/usr/local/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
;;
stop)
echo "Stop qmail ..."
PID=`/bin/ps -afwww | grep qmail | awk '{print $1}'`
if [ ! -z "$PID" ] ; then
/bin/kill ${PID} 1> /dev/null 2>&1
fi
;;
status)
/bin/ps -afw | grep qmail
;;
*)
echo "usage: `basename $0` {start|stop|status}" >&2
exit 64
;;
esac |
非常に難解ですが、これもqmailの特徴でqmail単体では非常にシンプルなメール配送しか行わず、他のアドインソフト(tcpserver,vpopmaill等)を色々組み合わせて順番に指定して複雑な機能を実現する形を取っています。
qmailの起動
既に他のMTAが動いている場合は止めて下さい。またPOPサーバも停止します。ここからしばらくはメールの送受信が行えなくなりますので手際よく作業を行って下さい。
sendmailの停止(必要に応じて作業)
以下のコマンドで停止します。
| # sh /etc/rc.d/sendmail stop |
後は再起動時に自動でsendmailが立ち上がらないように/etc/rc.confを修正します
| /etc/rc.conf
sendmail_enable="NONE" |
Postfixの停止(必要に応じて作業)
以下のコマンドで停止します。
| # postfix stop |
後は再起動時に自動でPostfixが立ち上がらないように/usr/local/etc/rc.d/postfix.shをpostfix.sh.norun等にリネームします。
popの停止(必要に応じて作業)
popデーモンをinetd経由で起動していると仮定します。
/etc/inetd.confのpop3の行をコメントアウトします。
| /etc/inetd.conf
#pop3 stream tcp nowait root /usr/local/libexec/qpopper qpopper |
最後にinetデーモンにHUPシグナルを送ればpopサーバは停止します。
| # killall -1 inetd |
mailer.confの編集
FreeBSDは/usr/sbin/sendmail等は全てmailwrapperというプログラムにシンボリックリンクが張られていて、/etc/mail/mailer.confで定義することにより自由に各種コマンドを別のMTAのものに入れ替えることが出来ます。
まあ、既にPostfix等別のMTAを使ったことのある人には説明は不用ですが、今回はqmailを使うのでmailer.confを以下のように設定します。前のファイルをバックアップするかどうかはお任せします。
/etc/mail/mailer.conf
sendmail /var/qmail/bin/sendmail send-mail /var/qmail/bin/sendmail mailq /var/qmail/bin/qmail-qread newaliases /var/qmail/bin/newaliases hoststat /var/qmail/bin/qmail-tcpto purgestat /var/qmail/bin/qmail-tcpok |
qmailの起動
さて、いよいよqmailを起動します。別にOSをrebootしてもいいのですが、以下のコマンドで起動て、その直後にステータス確認を行いましょう。
| # /usr/local/etc/rc.d/qmail.sh start Start qmail ... # /usr/local/etc/rc.d/qmail.sh status 61154 p0 S+ 0:00.01 /bin/sh /usr/local/etc/rc.d/qmail.sh status 61156 p0 S+ 0:00.00 grep qmail 84983 p0- I 0:00.10 qmail-send 84984 p0- I 0:00.01 /usr/local/bin/tcpserver -v -u 82 -g 81 -x /usr/local/vpopmail/etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qma 84985 p0- I 0:00.01 /var/qmail/bin/splogger smtpd 3 84986 p0- I 0:00.51 /usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup hijiki.net /usr/local/vpopmail/bin/vchkpw /var 84987 p0- I 0:00.02 splogger qmail 84988 p0- I 0:00.01 qmail-lspawn ./Maildir/ 84989 p0- I 0:00.00 qmail-rspawn 84990 p0- I 0:00.01 qmail-clean |
上記のようにqmail-*が沢山起動していればとりあえずOKだと思います。
動作確認
Windows等のメーラーでアカウント設定する場合、アカウント名には「ユーザ名%ドメイン名」の形式で指定します。別に%は@でも大丈夫そうですが、一応言われたとおりに設定して下さい(笑)。
あとはローカル配送、外へ向かっての配送、外からの受信を確認します。
おわりに
ドメインの追加(vadddomain)以外のユーザの追加等はqmailの再起動なしに行うことができます。
コマンドラインからの設定が面倒な人にはqmailadminというWeb用ツールがお勧めです。ただし、このCGIはApacheのsuexec環境では動作させることができませんでした。一応それでも動作確認はしたのですが別にこれといって特筆するべき事も無いので説明は省略します。
興味のある方はqmailadminも入れてみて下さい。
投稿者 yotan : 2004年11月27日 20:53| トラックバック(0)※コメント内にURLを書くとSPAM扱いとなります。2ch風に表記はOKです


