TOPへ
起票 2005.2.13/更新 2005.2.13
 目次へ  
   


qmail/1 APOPを使う前提でのインストール

 

 


こちらの記事も前のものを編集せずそのまま転記いたしました
記事は2002年のもので、付随するファイルもその時代のものです。多少新しくなったりしている様なのですが私はその当時のファイルを使っていて、qmailに関しては不都合が無いのでです。作者の方にも、読んでいただく方にも申し分けありませんが、旧バージョンのままですいません。


qmailを稼動させる為のインストール手順

qmailのインストールは、実験しながらすすめるとそのまま本になるほどの手順があります。
普通は
 1) qmail本体をインストールして稼動させる
 2) popの機能を実装する
 3) SMTPのリレーに制限をつける為の策を練る
 4) セキュリティを気にした設定をする
こんな感じの順に解説されています。
でも、ここでは一気にインストールしてしまう為の説明をします。

※私はqmailでもバーチャルホストでの運用をしているのですが、説明が混乱するので、バーチャルドメインを使っていないという前提で書きます

構築の前提条件を決めてしまいます。
・qmail本体のインストール
・popやsmtpの起動にはxinetdではなく、tcpserverを使う。
・POPはパスワードを暗号化したAPOPとPOPの両方を使える様にする
・パスワードはユーザーのログインパスワードとは切り離し、$HOME/Maildir/.password に書き出したものをPOPパスワードとする
・SMTPのリレー制御は、POP before SMTPを実装して実施する。

ではこれらを実施する為に効率の良い手順で説明してしまいます。


★ まずAPOP対応のパッチを準備し、インストールもしておきます。
qmailのコンパイルの時にパッチを当てないといけないので先に用意します。
使う圧縮モジュールは checkpw-1.00.tar.gz です。
まず http://checkpw.sourceforge.net/checkpw/ からダウンロードします。
解凍してパッチファイルを用意するついでにインストールまで済ませておきます。

# tar xvzf checkpw-1.00.tar.gz
# cd checkpw-1.00
# make
# make setup check
これでインストールは完了です。これは簡単ですね。

(解説)普通はPOPの説明でcheckpasswordというパスワードをチェックするだけのモジュールの説明が出てきます。
それを使う場合はAPOPは使えません。そして、ユーザーのログインパスワードをそのまま使う事になりますので、非常にセキュリティ上よくありません。
インストールの手間は同じなので、パスワードを暗号化するAPOPを使う事が出来、更にログインパスワードとはべつのパスワードを使える selectcheckpwと言うのが便利そうです。
パスワードがばれてもサーバーが乗っ取られる危険は減るという事ですね。

さて、この checkpw  のインストールにより3つのモジュールがインストールされます。
先のcheckpasswordとその3つのモジュールを並べてみます。

/bin/checkpassword Linuxのユーザーとパスワードを使う
/bin/checkapoppw APOPを使い、パスワードはユーザーのホームに置く
/bin/checkpw 通常のPOPらしいが、パスワードはユーザーのホームに置くらしい
/bin/selectcheckpw POP と APOPをクライアントのリクエストで自動に使い分けてくれる便利なやつ。でもqmailにパッチをあててから再コンパイルが必要。ちょっと注意です。パスワードはユーザーのホームに置く

先程のインストールでこの表の下3つは使える様になっています。
ではこの中の一番下のモジュールを使ってPOPとAPOPを両方使える様にする説明を続けます。


★qmail本体を準備

qmail本体の入るディレクトリを作ります。
# mkdir /var/qmail

qmail用ユーザーとグループを作っておきます
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails


qmail本体とパッチ(日本時間対応にするパッチ)をftpでダウンロードします。
$ ftp ftp.nlc.net.au
・・・name : ftpを入力
・・・password : メールアドレスを入力
ftp>cd /pub/unix/mail/qmail
ftp>dir で一覧が確認できたら
ftp>get qmail-1.03.tar.gz これが本体
とする。
さらに
ftp>get qmail-date-localtime.patch
これがパッチ

ftp>quit
で終了です。

$ tar xzvf qmail-1.03.tar.gz 解凍
$ cd qmail-1.03
$ patch -p1< ../qmail-date-localtime.patch
でコンパイル前にパッチを当てます。
paching file date822fmt.c
と表示されます。

あとDNSのパケットが512バイトを越える物を処理出来ないバグがあるらしく取っておきます。
dns.cのソースを開き、PACKETSZという文字を探して65536に書き換えます。

次にPOPとAPOPが両方使えるようにする為のパッチを準備しておいたのでそれを当てます。
patch -p1 < [checkpw-1.0を展開したディレクトリ]/qmail-popup-auth.patch
とします。
以上でパッチは完了です。
では
# make setup check
としてコンパイルです。


さて、/var/qmail/controls/以下に必要な設定ファイルを作る操作です。
# ./config
とするのですが・・・・・・・
この手順ではDNS設定を参照してドメインなどを自動にセットしてくれますが、逆引きなどの関連でたいてい思い通りにセットされません。だから、半手動で設定します。
# ./config-fast ホスト名としてFullドメインを指定してしまいましょう。
私の場合は
# ./config-fast ns.ayamizu.com
ですね。

この結果設定されるのは、
/var/qmail/control/以下に出来る5つのファイルです。
できたらチェックしておきましょう。

me ns.ayamizu.com  
locals ayamizu.com
localhost
ns.ayamizu.com
ここは環境によって localhostがないとローカル配送でエラーが出る場合があったので動作をみてあとでチェック
defaultdomain ns.ayamizu.com
ayamizu.com
 
plusdomain ayamizu.com  
rcphosts ayamizu.com
.ayamizu.com
完成後、サーバーが受信拒否しているときはここが違ってたりします。注意してね

手動でファイルを書き出しても構いません。5つ全部が必要な訳でもありませんが全部そろっていた方が安心です。

次に起動スクリプトを作ります。
cp /var/qmail/boot/home /var/qmail/rc
これでOK。
そして、qmailはMaildir形式が特徴なので、それを有効にする為に、この起動スクリプトを書き換えてしまいます。
さっきの /var/qmail/rc  を開き次の行の通りに書き換えます
qmail-start ./Maildir/ splogger qmail
赤いところが書換ポイントで、メールディレクトリ形式にするためのものです。
Maildirはメールがディレクトリに一つづつのファイルとして区分けされて保存されるので、いろいろな面で非常に有用だとされています。
この ./Maildir/という記載により $HOME/Maildir/ 以下にメールが配信されます。最初の配信は
$HOME/Maildir/new に
既読は
$HOME/Maildir/cur に保存されます。

ここで注意ですが、ユーザーのホームディレクトリにMaildirを作ってあげないといけません。
必ず該当ユーザでログインしておいて
$ /var/qmail/bin/maildirmake  Maildir
とします。

既に作成されているユーザーへは、上記のように手動でMaildirを作ってあげます。

今後新規にユーザーを作成する時にMaildirが自動に作られるようにするには
# /var/qmail/bin/maildirmake /etc/skel/Maildir
として雛形を作っておきます。


次に、sendmailを止めないといけません。

まずサービスを止めます
# /etc/rc.d/init.d/sendmail stop で止めて
# cd /usr/sbin
# mv sendmail sendmail.bak
# chmod 0 sendmail.bak

としてそのファイルを変えてしまいそのうえで起動しないようにパーミッションまで変えます。
このままではsendmailを使うソフトが動かないのでqmailを擬似的にsendmailを立ち上げます。
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
とします。これでsendmailを使うソフト(CGIなど)も普通に動作します。

qmailの起動は
# /var/qmail/rc &
これでOK。

配信テストをしてみますか?
/var/qmail/bin/qmail-inject
to : ユーザー名
ctrl + D

でダミーのメールをtoの先に送ります。
そのユーザーのMaildir/new/以下にファイルができているか確認します。
OKなら動作完了です。試しに携帯のメールアドレスなんかにも届きますよ。


あと必須項目として「ある特定の重要なアドレス宛」のメールを受信できる様にします。
qmailはroot宛のメールは受信しません。だから次の3アドレス宛のメールを受けるaleasを作ります。
postmaster と root と mailer-daemon
受け取るユーザーを決めてuseraddでユーザーを作っておいてください。例えばここではuser1がその受取人だとします。
echo user1 > /var/qmail/alias/.qmail-postmaster
echo user1 > /var/qmail/alias/.qmail-root
echo user1 > /var/qmail/alias/.qmail-mailer-daemon
chmod 644 /var/qmail/alias/.qmail*
この様にaliasを作成し、これでOKです。
あと MAILER-DAEMON という大文字の宛先が必要になる場合もあるかもしれません。というか必要になります、きっと。
だから上記の続きで
echo user1 > /var/qmail/alias/.qmail-MAILER-DAEMON
も書いておきましょう。
今まで二度、バウンスメールが無限ループに入ってしまい、サーバーが過負荷になった事があります。
どうやらこのMAILER-DAEMONという宛先が大文字と小文字で両方を使い分けられている為に、どちらかで受け取れずループ入りしたらしいという結果でした。
両方書いておくと安心です。

これでqmailの本体は無事動作するようになっているはずです。

 

★tcpserver をインストールする

qmail作者の強いお薦めによりtcpserverをinetdの代わりに用いてqmail関連のpopやsmtpを起動させます。
ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.88.tar.gz
からucspi-tcp-0.88.tar.gzをダウンロードします。
tar xzvf ucspi-tcp-0.88.tar.gz で解凍して
cd ucspi-tcp-0.88
make setup
make check

これだけです。
ここであらかじめ2つの数値をチェックしておきましょう。
id -u qmaild
id -g qmaild
でqmaildのユーザーIDとグループIDを確認しておきます。メモしておくこと。


★ ここはAPOPでなく、popだけを使う為の手順を以前に書いたものですが不要になりました。読み飛ばして下さい。

qmail-pop3dそのものはqmailと一緒にインストールされるらしいので、あとはパスワードが使える様にするモジュールのセットアップに進みます。
それはcheckpasswordで、早速インストールします。

http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
これをブラウザでダウンロードして使いました。

$ tar xzvf checkpassword-0.90.tar.gz
$ cd checkpassword-0.90
$ make setup check

これでOKです。
起動は
tcpserver -HR 0 110 /var/qmail/bin/qmail-popup ns.ayamizu.com /bin/
checkpassword /var/qmail/bin/qmail-pop3d Maildir &

こんな感じです。
クライアントからPOP3のソフトで取り出してみると取り出せるハズまたはtelnet経由で
telnet hostname 110
trying xxxxxxxx
Connected to host ・・・
+OK
などというセッションが確認できればOK
最後はquitで止めます。
比較的簡単です。

以上、蛇足でした


★pop before smtpを実装させる

SMTPは許可されたクライアント以外はリレーをさせないようにしなくてはいけません。
ここでは pop before smtp を実装させます。
これは、POP (APOP)をパスワードを使って行い、その際、認証されたクライアントだけをSMTPで許すものです。
認証されたクライアントを /var/spool/relay-ctrlというディレクトリに書き出して、SMTPのリレー転送許可をだしてあげよう、そういう仕掛けです。
15分後にその許可のデータは削除されます。

http://untroubled.org/relay-ctrl/
ここからrelay-ctrlをダウンロードしますが、資料の豊富なバージョンの2.5はもう手に入りませんでした。
従いまして資料のない3.0をダウンロードします。この英語のページをじっくり読んで進めます。
と思っていましたが、途中でこちらのサイトがみつかり、参考にさせて頂きました。
http://www.itboost.co.jp/inst/inst_29.php

まずdaemontoolsが必要ですので
http://untroubled.org/rpms/daemontools/
からダウンロードします。解凍してインストールです。
tar xvzf daemontools-0.70.tar.gz
cd daemontools-0.70
make
make setup check
但しエラー make ***[taiなんとか
が表示されて止まる場合は次のように修正します。
tai64nlocalc.cの #include<sys/time.h>を#include<time.h>と書き換えます。

 

※reral-ctrlはこの時点では3.0で書いてますが、どんどんマイナーUPしているみたいです。
起動コマンドで引数の追加、ディレクトリの変更などがあるみたいです。
http://untroubled.org/relay-ctrl/こちらの英文の説明でもじっくりながめればわかりますので、私の文と照らし合わせて頑張ってみてください。


次にrelay-ctrlを解凍してインストールします
tar xvfz relay-ctrl-3.0.tar.gz
cd relay-ctrl-3.0
make
./installer

パーミッションを変更しておきます。
chmod u+s /usr/local/bin/relay-ctrl-allow

relay-ctrl に必須なパスなどを作ります
mkdir /etc/relay-ctrl
mkdir /var/spool/relay-ctrl
echo "/var/spool/relay-ctrl"> /etc/relay-ctrl/RELAY_CTRL_DIR

一定時間(1分)でアカウントをクリーンナップする為にcrondにセットします。
crontab -eを起動して次の行を書きます
* * * * * /usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-age
これで1分ごとに期限切れのデータを消しに行きます。

でもログがcronだらけになってじゃまなので
*/10 * * * * /usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-age
こういう風に10分おきに実施してもぜんぜんだいじょうぶです。

 

★起動スクリプトのセット

私は起動スクリプトを qmail 本体、pop、smtpのファイルに分けて設定しています。
停止スクリプトは用意していません。
3つを紹介します。

【本体
/etc/rc.d/init.d/qmail
#!/bin/sh
csh -cf '/var/qmail/rc &'

【POP
/etc/rc.d/init.d/qmail-pop
#!/bin/sh
/usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/tcpserver -HR 0 110 /var/qmail/
bin/qmail-popup ns.ayamizu.com /bin/
selectcheckpw /usr/local/bin/relay-ctrl-allo
w /var/qmail/bin/qmail-pop3d Maildir &

【SMTP
/etc/rc.d/init.d/qmail-smtp
#!/bin/sh
/usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/tcpserver -HR -u 502 -g 502
0 25 /usr/local/bin/relay-ctrl-check /var/qmail/bin/qmail-smtpd &

色の変っているところはご自分の環境に合わせてくださいね。

 

次に自動起動させる為のシンボリックを /etc/rc.d/rc3.d/以下に貼って、パーミッションをセットします。

turbo7以降は /rc.d/は不要です。
シンボリックを張る
ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S80qmail  
ln -s /etc/rc.d/init.d/qmail-pop /etc/rc.d/rc3.d/S81qmail-pop  
ln -s /etc/rc.d/init.d/qmail-smtp /etc/rc.d/rc3.d/S82qmail-smtp  

パーミッションを変更
chmod +x /etc/rc.d/rc3.d/S80qmail
chmod +x /etc/rc.d/rc3.d/S81qmail-pop
chmod +x /etc/rc.d/rc3.d/S82qmail-smtp

以上でqmailが稼動します。

 

★メールパスワードのセット(メールユーザーに対する)

必須項目です。必ず実施してください。

各ユーザーディレクトリ下の/Maildir/以下に.passwordファイルを作ります。
かくユーザーでログインしてから作ればそれはそれで良し、rootからでも良し。その場合はownerを変更します。rootからセットする手順を書きます。

例として、ユーザ / パスワードを aaaa/pppp とします

# touch /home/aaaa/Maildir/.password
# echo pppp > /home/aaaa/Maildir/.password
# chmod 600 /home/aaaa/Maildir/.password
# chown -R aaaa /home/aaaa/Maildir/.password

わかりますね /home/aaaa/Maildir/.password これをそのユーザーのパーミッションで作っておけばOKなんですね。

chmod 600 /home/aaa/Maildir/.password
これは必須です。
644とか余分なものがついているとどうもうまく動作してくれません。

これでAPOPはOKです。
なお、POPで受信する際もこのパスワードファイルが読込まれます。

完璧!

Last Update 2002.7.30

qmailインストールに関する参考書籍

TurboLinuxServer6.5 サーバー構築ブック 株)メルコテクノスクール 堀口幹友氏著 ASCII
インストールにパッケージCDをつかわせていただきました。

はじめての TurboLinux7Server サーバー構築術 本松慎一郎氏著 秀和システム
インストールにパッケージCDをつかわせていただきました。

qmailで作る快適メールサーバー 濱野賢一郎氏/佐藤文優氏著 秀和システム

sendmailとqmailによるLinuxメールサーバー構築ガイド 高橋隆雄氏著 エーアイ出版

qmailメールサーバーの構築 ExpertUNIX Series ASCII