qmail の導入
 最近、ジャンクメールとか、SPAM メールとか言う言葉を良く耳にします。私のドメインも net ドメインですので良く、ダイレクトメール等が海外から届きます。

 ま、普通に送られてくるだけなら有る程度はあきらめが付くのですが、人のマシン、SMTP を通して送られてくると言うのには困ります。MS/OS が普及して、自分のマシンに SMTP が無い為に人の SMTP を利用するんでしょぅね。きっと。と、言う事で SPAM の諸悪の根源は SMTP サーバを積んでない MS/OSが行けないんだっ!!
 等と、一人で吠えていますが(^^;;、要は、自分のマシンは自分で守る。人の為に自分のマシンの資源を使わせる事は無いじゃないかっ!!と、言う事です。

 さてさて、ここからやっと本題になるのですが(^^;;、通常、SMTP サーバは最初からインストールされている sendmail と言うのを利用していると思います。ま、それでも十分なのですが、ちょっと変更しようとすると、sendmail.cf を書き直さなければならないと言う、非常にくたびれる作業があります。また、メールの安全なる配送にも疑問が残る様です。

 今回は、SMAP 対応をメインに考えた場合の qmail のインストールを考えてみましょう。尚、qmail には他にも沢山の長所があります。是非とも http://www.jp.qmail.org/ にも目を通してみましょう。
 さて、qmail のインストール、設定に付いてですが、以下のステップに別れています。そのステップ毎に考えてみましょう。

1. qmailのインストールと運用。
 インストールが完了すると即、そのマシンのユーザは利用可能状態となります。通常運用の場合の設定は完了します。

2. qmail を SMTP として利用する時の運用。
 qmail を SMTP として利用する場合はちょっと技が必要です。その場合はある設定を施します。また、tcpserver 経由で起動した方が安心です。

3. qmail を POP3 として利用する時の運用。
 pop3 として動作させる場合、qpopper 等を利用しますが、qmail の場合はその機能を凌駕し、更に Maildir 方式を採用する事により素晴らしく効率の良い POP を提供しています。

4. バーチャルドメイン対応にチャレンジ。
 sendmail で言う所の /etc/aliases に相当する部分の設定かな。似ても似付かないですけど・・(^^;;。ま、そんなかんなの設定です。


qmailのインストールと運用。
 まずは、ソースを入手します。今のバージョンは qmail-1.03 になります。後、ローカルタイムを正しく表示するパッチを入手します。

  →  qmail-1.03.tar.gz
  →  qmail-date-localtime.patch

 後は、まだまだいろいろなパッチが出ていると思いますが http://www.asahi-net.or.jp/~pu1t-tkzw/server/qmail-patch.html等で自分に必要だと思われるパッチを選んで当ててください。

では、インストールの手順です。前準備として、qmail のディレクトリを作る事と、user と group を登録します。以下のコマンドで登録する事が可能です。登録後、vipw とかで任意の userID/groupID に変更する事も可;-)。

----------------
roman# mkdir /var/qmail
roman# pw groupadd nofiles
roman# pw useradd alias  -g nofiles -d /var/qmail/alias -s /nonexistent
roman# pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
roman# pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
roman# pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
roman# pw groupadd qmail
roman# pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent
roman# pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent
roman# pw useradd qmails -g qmail -d /var/qmail -s /nonexistent
----------------
 続いて展開、make します。
----------------
roman# tar xvzfp qmail-1.03.tar.gz
roman# cat qmail-date-localtime.patch | patch -p
roman# cd qmail-1.03
roman# make setup
roman# make check
roman# ./config
roman# (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
roman# chmod 644 ~alias/.qmail*
roman# 
----------------
以上で作業は終りです。ちょっと説明を・・。

1. ローカルタイムが有効になるパッチを当てます。
2. make setup でコンパイルして、qmail のディレクトリ全体を作ります。
3. make check でチェックスクリプトを使って検査します。警告がでなければ、OK です。
4. ./config で環境を生成します。
5. その次の二行で qmail で使用する alias の設定を行います。

 以上で設定は終りです。続いて、テストフェーズに移りましょう。一応、qmail システムを全部起動します。起動スクリプトは以下になります。

----------------
#!/bin/sh
#
PATH=/var/qmail/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
export PATH

#  start qmail for inetd
/var/qmail/bin/qmail-start ./Mailbox splogger qmail &

#  start qmail for tcpserver
#/usr/local/bin/tcpserver -x /etc/tcp.smtp.cdb -u 1508 -g 1501 0 smtp /var/qmail/bin/qmail-smtpd &4 
----------------
このスクリプトを /usr/local/etc/rc.d/qmail.sh として、chmod 755 すれば、起動時に自動的に qmail が立ち上がる様になります。尚、テストフェーズに付いては http://www.jp.qmail.org/q103/jinstall/install2.html を参考にしてください。

さて、ここまで来れば後は、sendmail との入れ換えを残すのみです。以下の手順で行いましょう。

1. senmail の残骸を削除します。

----------------
roman# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
roman# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
----------------
2. /etc/inetd.conf を編集し以下の行を追加した後、inetd を restart します。
----------------
smtp   stream  tcp     nowait  qmaild  /var/qmail/bin/tcp-env  tcp-env /var/qmail/bin/qmail-smtpd
----------------
3. 今まで使っていた sendmail の mailque をカラにする為にコマンドを打ちます。/usr/lib/sendmail.bak -q これで OK です。
4. snemail 系のコマンドのパーミッションを落します。以下のファイル群ですね。
   /usr/sbin/sendmail.bak
   /bin/mail
   /usr/local/bin/from 等
5. 続いてテストフェーズに付いては http://www.jp.qmail.org/q103/jinstall/install4.html を参考にしてください。

 以上で一応はセットアップ完了です。これでローカルホスト内でのメール送信と、ホスト内のユーザはメールの送信がが可能です。ふふふ。この段階ではまだ、 POP3 サーバも SMTP サーバもまだ利用出来ない状態です。その辺りは次回に持ち越しです;-)。


qmail を SMTP として利用する時の運用。
 さて、基本的な動作確認は取れていますか?ローカルホストからは正しくメールの送信が出来ていると思います。え?何で送信しているかって?私の場合は mule+mew で送信しています。 mew は、一応私はベータテスタなので毎回最新のを使っています。今は多分、mew-1.92 を使えば ~/.im/Config で qmail 対応されているので簡単に使えると思います。

 さて、通常にインストールした qmail はローカルホストからの送信要求専用のサーバとなります。その根源は、qmail-smtpd と言うデーモンプログラムが /var/qmail/control/rcpthosts に書かれたホストにしかメールの配送をしない為です。いきなり、「qmail-smtpd」等と言うモノが出て来ましたが、qmail の内部構造については http://www.jp.qmail.org/q103/jmisc/internals.html を参考にしてみてください。通常ローカルホスト内部からのメールの送信は qmail-send と言うデーモンが行うので、qmail-smtpd を介さないんですね。

 では、インストールした qmail を SMTP サーバとしても利用出来る様に設定してみましょう。qmail-smtpd は RELAYCLIENT と言う環境変数を宣言すると、/var/qmail/control/rcpthosts と言うファイルを見ずにメールの送信を行う為に動いてくれます。

---------------- /var/qmail/control/rcpthosts
localhost
running-dog.net
.running-dog.net
----------------
 この設定になってた場合、例えば Win95 のメールクライアントソフトから SMTP サーバの設定に当該のマシンを指定した場合、localhost と *running-dog.net にしかメールの送信が出来ません。

 この現象を回避する為には 環境変数として RELAYCLIENT を宣言するしか手が無いのです。では早速設定しましょう。今回 RELAYCLIENT 環境変数を宣言する為に、ucspi-tcp-0.80.tar.gz と言うのをインストールします。これが tcpserver になります。  →  ucspi-tcp-0.80.tar.gz

 これを展開後、以下の要領でインストールが完了します。

----------------
roman# tar xvzfp ucspi-tcp-0.80.tar.gz
roman# cd ucspi-tcp-0.80
roman# make
roman# make setup
----------------
 続いて、tcpserver の設定をしましょう。/etc/tcp.smtp と言うファイルを設定してみます。
----------------
:allow
192.168.1.*:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
----------------
 上の行は全てのクライアントから SMTP 接続要求を受け付ける。その時、/etc/tcp.smtp は有効にしている。と言う意味です。ちなみに、LAN 内部用、なんでもんでも受付サーバを作るには、:allow,RELAYCLIENT="" と言う行を書けば OK です。RELAYCLIENT="" が有ると /var/qmail/control/rcpthosts を参考にしない。と、言う意味になります。
 二番目の行は 192.168.1.0/24 からのみ要求を受け付ける。と言う意味です。"*" でワイルドカードも使えます。三番目はローカルホストの設定です。
 作成したら、DB にしましょう。以下のコマンドをすかさず打ちます。とすると、/etc/tcp.smtp.cdbというファイルが作成されます。
----------------
roman# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
----------------
 さささ、これで環境設定ファイルも出来ました。続いて /etc/inetd.conf に登録した qmail の設定を消します。これは、一部の OS で信頼のおけない inetd 経由のアクセスでは無く、tcpserver 経由にすると言う事です。前出の qmail 起動スクリプトをもう一度見てみましょう。

----------------
#  start qmail for tcpserver
/usr/local/bin/tcpserver -x /etc/tcp.smtp.cdb -u 1508 -g 1501 0 smtp /var/qmail/bin/qmail-smtpd & 
----------------
 この、コメントアウトされた行を有効にします。-u 1508 は "alias" と言う User の userID を、-g 1501 は "nofiles" と言う groupID を指定してあげてください。ふぅぅ。この後、ps コマンドで、/usr/local/bin/tcpserver が立ち上がっている事を確認してください。ふぅぅ。おしまい。疲れたぁぁ・・(^^;;。

 あ・・。最後に telnet でもう一度だけテストしときましょう・・。なんせ、コマンドが sendmail の時とは違うので・・。と、言う事で詳細はこちらで・・。 → http://www.jp.qmail.org/q103/jinstall/install4.html


qmail を POP3 として利用する時の運用。
 qmail を使った場合、 qmail-pop3d と言うのを利用しなければなりません。また、sendmail と qmail を比較した時、/var/mail/takachan に複数のメールを一個のファイルにして、pop の動作を遅くします。

 この様な sendmail のメールの保存方法を mbox 型、mail コマンド等のメールの保存方法を Maildox 型、qmail で利用出来る保存方法はそのどちらでも無い、Maildir 型と言い、メールの保存方法は個人のディレクトリで持ち、尚かつ、1 メール、1 ファイルとして保存します。

 では関連するものをインストールしましょう。POP3 でアクセスされた時のパスワード解析プログラムです。  →  checkpassword-0.76.shar.gz

----------------
roman# mkdir checkpassword
roman# mv checkpassword-0.76.shar.gz checkpassword
roman# cd checkpassword
roman# gunzip checkpassword-0.76.shar.gz
roman# sh checkpassword-0.76.shar
roman# make
roman# 
----------------
 ただしこれでは FreeBSD ではうまくコンパイル出来ないです。-crypt が無いよと怒られてしまいます。Makefile に以下の行を追加してあげましょう。
----------------
*** Makefile    Tue Mar 24 19:46:47 1998
--- Makefile~   Tue Mar 24 19:46:25 1998
***************
*** 4,11 ****
  # To use shadow passwords under Solaris, uncomment the SHADOWOPTS line.
  
  CC=cc $(SHADOWOPTS)
! #LD=cc -s
! LD=cc -s -lcrypt
  all: checkpassword
  
  checkpassword: checkpassword.o
--- 4,11 ----
  # To use shadow passwords under Solaris, uncomment the SHADOWOPTS line.
  
  CC=cc $(SHADOWOPTS)
! LD=cc -s
! 
  all: checkpassword
  
  checkpassword: checkpassword.o
----------------
これが出来たら、/var/qmail/bin にコピーしてその他もろもろ設定します。一応準備が完了;-)。
----------------
roman# cp checkpassword /var/qmail/bin/checkpassword
roman# chmod 700 /bin/checkpassword
----------------
次に、今まで使っていた pop の設定を /etc/inetd.conf から削除して、以下の行を追加します。
----------------
pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup buchi.running-dog.net /var/qmail/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir
----------------
 これで、POP3 対応も完了しました。ただ、これだと Mailbox 形式のメール管理になってしまいます。最後に Maildir の設定を行って完了にしましょう。

 メールの保存形式を Maildir 形式にします。以下のコマンドにより、個々の user のホームディレクトリに Maildir と言うディレクトリを作成します。

----------------
takachan $ /var/qmail/bin/maildirmake Maildir
takachan $ echo "./Maildir/" > .qmail
takachan $ ls -lgaR
----------------
 最後の ls -lgaR で ~/Maildir が 700 のパーミションになっている事を確認してください。これが正しく無いと、qmail はメールを配信してくれません。

後、既に sendmail の .forward とか、qmail の Mailbox が有るとか .qmail が存在している場合はこの限りでは無いです。然るべき対応を施さなければなりません。http://www.kusm.kyoto-u.ac.jp/~yositomi/computer/qmail/qmail_guide.html#maildir で確認してください。

 さささ、これで POP3 の対応も完了しました。どんなにスプールにメールを貯めても、sendmail のスプールよりは軽やかに POP が出来ると思います。



 これで、一応は完結です。ふぅぅ。qmail のインストールから、SMTP 対応、更には POP3 対応を完了しました。では、私の利用形態をちろっと書いてみますね。

1. ローカルマシン内での利用
 ローカル内では mule+mew+im で利用しています。mew がいち早く qmail に対応してくれた為、Maildir 形式でも特に問題無く動きます。送信も全く問題無いです。

2. SMTP サーバとしての利用
 SMTP としてのテストは、MS/OS 上のアウトルックエクスプレスと、FreeBSD 上の mule+mew でテストを行いましたが、tcpserver を利用して qmail-smtpd を起動する事により、簡単にメールの送信が行えます。
 SMTP サーバを外部から利用出来る様になったおかげで、今までは有る程度、/var/qmail/control/* 等で設定出来ていたのですが、更にそこに /etc/tcp.smtp と言う設定ファイルが追加されですました。。これで一応は、SPAM 撃退出来ると思います;-)。

3. POP3 サーバとしての利用
 POP はシャクシャク動きます。早いです。くくく(^^)。FreeBSD では、popclient と言うコマンドで接続してメールを持って来ています(^^)V。


バーチャルドメイン対応にチャレンジ。
 sendmail の設定の時にもバーチャルメールの対応を行いました。私個人が複数のメールアドレスを持っているのでもはやメールエージェントのバーチャルメール化は必須項目になりつつ有ります(^^;;。
 と、言う事で、バーチャルメールの設定をしつつ qmail の各種設定を覗いて行く事にしましょう;-)。
#ちゃんと説明出来るか疑問が残りますが・・(^^;;。

今回の設定に対する環境と前準備です。

----------------
ホスト名:pochi
ドメイン名:uponga.co.jp
	FQDN:pochi.uponga.co.jp
ログイン名:takano
バーチャルメールアドレス:takachan@running-dog.net
DNS の MX レコードは uponga.co.jp/running-dog.net ともに pochi.uponga.co.jp に向いている。
----------------
 上記の設定で、pochi に立ち上がっている qmail の設定を変更します。そして、"takano" と言うアカウントで takano@pochi.uponga.co.jp と takachan@running-dog.net 宛の両方のメールを受信出来る様に設定します。

 と、言う事で基本的に qmail の各種設定ファイルは通常、/var/qmail/control の下のファイル群になります。インストール時の make setup で簡単な環境が完成します。

----------------
defaultdomain		ファイル名の通りです。
locals			ローカルホストで処理するドメインを羅列します。
me			ローカルホストの FQDN が書いてあります。
plusdomain		co.jp と書かれています(^^;;
rcpthosts		配送先ドメインを羅列します。
----------------
virtualdomains		今回必要なファイルで新規作成です;-)。
----------------
 今回変更するファイルは locals と、新たに作成する virtualdomains です。 まず、locals ファイルを見てみると、
----------------
localhost
pochi.uponga.co.jp
running-dog.net
----------------
 と、言う事で、ローカルホストで処理するべきドメインを指定します。続いて関連する alias ファイルに対する設定を行ってみましょぅ。そもそも alias ファイルってのはどこで設定ばえーねん?って事になります。その設定の為に、/var/qmail/alias と言うディレクトリが用意されています。そのディレクトリを ls -a で見ると
----------------
.qmail-mailer-daemon
.qmail-postmaster
.qmail-root
Mailbox
----------------
 三つの dot で始まるファイルが存在しています。それぞれサイズはゼロです。が、もうお解りですね;-)。sendmail で言う所の /etc/aliases の postmaster: root と言う行と意味は一緒です。つまり、root 宛のメールをシステム管理者宛に転送したい場合、このファイルの中にそのメールアドレスを書きます。
----------------
pochi # cat .qmail-mailer-daemon
takano@pochi.uponga.co.jp
----------------
これで転送される様になります。転送しない場合は、/var/qmail/alias/Mailbox に root 宛のメールがどんどん溜ります。

 さて、これに習って同じ設定をします。.qmail-takachan と言うファイルを作り、その中に takano と書いておけば、/var/qmail/alias/.qmail-takachan を見て、"takachan" 宛に来たメールは takano と言うアカウントに配送してくれます;-)。ドメイン名は locals に書かれてありますね。いがっだいがっだ。

 あれれ?新しく、/var/qmail/control/virtualdomains と言うファイルを作る予定だったのに必要なくなってしまいましたね(^^;;。qmail-send は virtualdomains と言う設定ファイルより先に、locals を見てから動くので locals に記述してあるドメインはローカルホスト内でガシガシ処理してしまいます(^^;;

 この時、実は、takachan@running-dog.net も takachan@pochi.uponga.co.jp も takano@pochi.uponga.co.jp 宛のメールも "takano" に転送されると言う事に注意してください。

 では、今度は由緒正しい、virtualdomains を使った設定をしてみましょう;-)。あ、今までの設定は一切合財忘れてくださいね。違う方法による設定です;-)。

1. /var/qmail/control/rcpthosts に running-dog.net を一行として追加します。 三行目は全てのサブドメインも対応するよ。って意味です。

----------------
pochi.uponga.co.jp
running-dog.net
.running-dog.net
----------------
2. いよいよ出番;-)。/var/qmail/control/virtualdomains を設定します。
----------------
running-dog.net:alias-run-dog
.running-dog.net:alias-sub-run-dog
takachan@running-dog.net:alias-run-dog
----------------
これで /var/qmail/alias/.qmail-run-dog と /var/qmail/alias/.qmail-sub-run-dog と言う二つの設定が有効になります。最後の一行はメールアドレス狙い打ちです。

3. /var/qmail/alias/.qmail-run-dog、/var/qmail/alias/.qmail-sub-run-dog に先程の設定と同様、"takano" と一行でアドレスを書きます。この設定により、running-dog.net と、サブドメイン.running-dog に来た全てのメールが "takano" 宛に届く事になります。virtualdomains に三行目だけしか書かれていなかった場合、そのメールアドレスだけが有効となります。

 これで設定は完了ですが、あ、あのですね。 alias ディレクトリの下とか、control ディレクトリの下を変更した時は必ず qmail-send をリスタートして下さい。sendmail とは違うのでびしばし kill -HUP してもメールが消える事は無いですよ;-)。

 ふぅふぅ。alias ディレクトリと、control ディレクトリのつながりがいまいち解りませんよね。私もまだあんまり把握出来ていないです。更に、control ディレクトリの下には沢山の設定ファイルを置く事が出来る様ですし、.qmail-* と言う、alias ディレクトリに置くファイルは実は自分のホームディレクトリに置く事も可能だったりしてもうぅぅぅ・・。複雑・・。(g_g)。http://www.jp.qmail.org/q103/jman5/qmail-control.htmlこちらの方でその詳細を確認してください。

 その他、qmail に付いてはほとんど日本語化が完了しています。私の所の他にも是非とも目を通して下さい。さてと、後は qmail を利用した ML の設定だな・・。


Copyright (c) 1997-2004 takachan@running-dog.net All Rights Reserved.