第13回 qmailを使う
2003/1/31作成
2003/2/12更新
1.ソースの入手
qmailのソースを入手します。
執筆時点でのqmailの最新版は1.03ですが、実は数年前から1.03のままです。
それだけ安定しているということなんでしょう。
日本からだとここが近いと思います。ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
他にもいくつか使うものがあるので必要なものも一緒に入手しておきましょう。
qmail-1.03.tar.gz qmail本体 checkpassword-0.81.tar.gz qmailのpop用パスワードツール ucspi-tcp-0.88.tar.gz inetdの代わりにこのtcpserverでqmailとpop3サーバを起動 daemontools-0.76.tar.gz qmailなどのデーモンの稼働状態を監視するツール ezmlm-0.53.tar.gz qmail用のメーリングリストパッケージ
2.パッチを入手
qmailはほとんどパッチをあてる必要がないのですが、メールのタイムスタンプ関連で、qmailはデフォルトでUTC時間を使っているみたいなので、これで都合が悪い場合に日本時間が使えるようにするため、パッチをあてます。
パッチはなぜか上記のサイトに置いてありません。
こちらにあるみたいです。ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch
ここには他にもいくつか使えそうなパッチがあるので、いいのがあったら一緒に持ってきましょう。
3.ソースの展開とパッチの適用
入手したソースとパッチをとりあえず/usr/local/srcに置くことにします。
あとは、いつものように展開しますが、コンパイルする前にパッチをあてる必要があります。
% cd /usr/local/src
% tar zxvf qmail-1.03.tar.gz
% cd qmail-1.03
% patch -p1 < ../qmail-date-localtime.patch
4.qmailユーザの作成
ここまで来ると、すぐにコンパイルしたくなりますが、その前にqmailが使うユーザとグループを作っておく必要があります。
やり方はいろいろあると思いますが、とりあえずpasswdファイルにこいつを書いておけばOKです。
FreeBSDではpasswdファイルはダミーになっているので、vipwとか使ってください。
alias:*:60001:60001::0:0:qmail alias:/var/qmail/alias:/sbin/nologin
qmaild:*:60002:60001::0:0:qmaild:/var/qmail:/sbin/nologin
qmaill:*:60003:60001::0:0:qmaill:/var/qmail:/sbin/nologin
qmailp:*:60004:60001::0:0:qmailp:/var/qmail:/sbin/nologin
qmailq:*:60005:60002::0:0:qmailq:/var/qmail:/sbin/nologin
qmailr:*:60006:60002::0:0:qmailr:/var/qmail:/sbin/nologin
qmails:*:60007:60002::0:0:qmails:/var/qmail:/sbin/nologin
/etc/groupには以下の1行を追加です。
nofiles:*:60001
qmail:*:60002:
もちろんuidやgidはこれじゃなくてもOKです。
FreeBSDの場合はこの一連のコマンドを入れればOKです。
aliasだけはホームディレクトリが違いますので注意してください。
これを入れないとaliasは一切の仕事をしてくれませんでした。
# pw groupadd nofiles -g 60001
# pw groupadd qmail -g 60002
# pw useradd alias -g 60001 -u 60001 -d /var/qmail/alias -s /sbin/nologin
# pw useradd qmaild -g 60001 -u 60002 -d /var/qmail -s /sbin/nologin
# pw useradd qmaill -g 60001 -u 60003 -d /var/qmail -s /sbin/nologin
# pw useradd qmailp -g 60001 -u 60004 -d /var/qmail -s /sbin/nologin
# pw useradd qmailq -g 60002 -u 60005 -d /var/qmail -s /sbin/nologin
# pw useradd qmailr -g 60002 -u 60006 -d /var/qmail -s /sbin/nologin
# pw useradd qmails -g 60002 -u 60007 -d /var/qmail -s /sbin/nologin
5.コンパイル
長いことお待たせしました。ようやくコンパイルです。
configureしなくてもいいみたいなので、いきなりこんな感じです。
# make
# make setup
# make check
これでインストール作業は完了です。
あとは設定作業になります。
6.コントロールファイルの作成
qmailでは自分の管理するドメインやホスト名などの情報を/var/qmail/controlに置きます。
自動的にこれを生成するスクリプトがあらかじめ用意されているのでこれを使います。
# cd /usr/local/src/qmail-1.03
# ./qmail-config
このスクリプトは自分のドメイン名やホスト名を勝手に調べて設定を入れてくれるのですが、情報が足りないと設定が完了しないという難点があります。そんなときには強制的に自分の管理するドメイン名を指定する以下のコマンドが有効です。
# cd /usr/local/src/qmail-1.03
# ./config-fast [hostname.mydomain]
[hostname.mydomain]には完全解決ドメイン名(FQDN)を入れてください。
実行後、/var/qmail/controlに5個くらいのファイルができます。それぞれのファイルの意味は以下の通りです。
ファイル名 意味 例 defaultdomain "@"省略時のドメイン名(plusdomainとの関連は不明) yggdrasil.jp locals 自分のFQDN mail.yggdrasil.jp, localhost me 自分が受け取るドメイン yggdrasil.jp, mail.yggdrasil.jp plusdomain "@"以下を省略したときに追加されるドメイン名 yggdrasil.jp rcphosts 中継許可ホスト・ドメイン一覧 yggdrasil.jp, localhost
確認しておきたいのはmeファイルです。また、この中で必須なのはmeファイルだけです。
meファイルがFQDNになっていることがあります。でも、大抵のメールサーバの運用ではドメインに対するメールサーバなので"yggdrasil.jp"というドメインに届いたメールを受け取りたいと思うでしょう。なので、ここではホスト名を消しておきましょう。
もちろん、ドメイン名宛てのメールを受け取るためにはDNSのMXレコードも書いておきましょう。ここでは説明しないのでDNS関連の本を探してみてください。
controlには他にもいくつかファイルを置けるので詳しくはマニュアルを読んで試してみましょう。
7.起動ファイルの準備
本格的な起動ファイルは後でちゃんと作りますが、とりあえずqmailのdaemon群を立ち上げるファイルを作ります。
と言っても、実は用意されているのでこいつをコピーすればOKです。/var/qmailの直下にrcというファイルを置きます。
実行属性忘れないようにしましょう。
# cp /var/qmail/boot/home /var/qmail/rc
# chmod 755 /var/qmail/rc
8.sendmailの無効化
sendmailをあげっぱなしにするとqmailと相互にいろいろとよくない影響をおよぼしあうのでsendmailと関連の設定を無効にします。
まず、sendmailがあがっている場合はkillしておきます。
# killall sendmail
続いてsendmail関連のファイルを名前を替えておきます。/usr/sbinと/usr/libにsendmailがあるので、こいつを待避させます。
ついでに実行属性も奪っておきましょう。
# chmod 0 /usr/sbin/sendmail
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
# chmod 0 /usr/lib/sendmail
# mv /usr/lib/sendmail /usr/lib/sendmail.bak
/usr/sbin/sendmailが無くなると、他のアプリに影響が出ることがあるので、qmailが用意したsendmailの代わりになるものがあるのでこいつにリンクを張っておきましょう。
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
ちなみに、このあと/usr/bin/mailも無効にするようにと本に書いてあったのですが、これをやるとcronがメールを出せなくなるのでうちではやってません。無効にしなくても影響がなかったみたいだし。
ちなみにこの状態になったらqmailを起動することができます。
ですが、不正中継の設定がまだ済んでいないのでもう少し待ちましょう。
9.tcpserverの導入
ここからはちょっと難しいです。
システム同士の連携を理解するのが難解です。
先ほどダウンロードしておいたucspi-tcpをインストールします。
これはinetdのかわりのような動作をしますが、inetdよりもsecureだと言われています。
qmailの作者が作ったツールなので相性も抜群です。
これを使ってsmtpとpop3サーバを立ち上げます。
まず、入手したソースの展開とコンパイルです。
# tar zxvf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
# make
# make setup
# make check
続いて中継ホストのデータベースを作ります。
まず、/etc/tcp.smtpというファイルを用意します。
内容はこんな感じです。
# vi /etc/tcp.smtp
192.168.0.1-254:allow,RELAYCLIENT=""
127.0.0.1:allow,RELAYCLIENT=""
他にも許可したいIPアドレスがあったらこれを例に加えておきましょう。
ではさっそくデータベースを作成してみます。
# rehash
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
csh系の場合、インストールしたてのコマンドはrehashかけないと見えないのでやっておきます。bashとかだったら不要ですが。
/usr/local/bin/tcprulesとフルパスでもいいのですが。
10.pop3サーバ
pop3の認証で利用するためにcheckpasswordをインストールします。
これもさっきソースを入手したやつです。
# tar zxvf checkpassword-0.81.tar.gz
# cd checkpassword-0.81
# make
# make setup
# make check
実はこれが無くてもpop3サーバは動作するのですが、パスワード認証が何度やっても失敗してしまいます。
checkpasswordはログインパスワードとpop3パスワードのハンドリングをやってくれているようです。
11.起動ファイルの準備
続いてrcファイル群からも削除して、勝手に起動しないようにします。
Redhatだったらchkconfig使って無効化できると思います。たぶん"chkconfig --level 345 sendmail off"ってな感じでしょうかねぇ。(ちゃんとマニュアル読んでください。)
古いFreeBSDだったらrc.confの一番最後に以下のようなのを追加してください。
sendmail_enable="NO"
qmail_enable="YES"
ダブルクオーテーションを付け忘れないように注意しましょう。付け忘れるとシングルユーザモードで設定変更という罰ゲームが待ってます。
あと、実はrcファイルにqmail関連の記述がないのでこのままではやっぱりダメです。
FreeBSD4.5のときに私はrcファイルのsendmailの付近にこんなの追加しておきました。
if [ -r /etc/mail/sendmail.cf ]; then case ${sendmail_enable} in [Yy][Ee][Ss]) echo -n ' sendmail' /usr/sbin/sendmail ${sendmail_flags} ;; *) case ${sendmail_outbound_enable} in [Yy][Ee][Ss]) echo -n ' sendmail' /usr/sbin/sendmail ${sendmail_outbound_flags} ;; esac ;; esac elif [ -r /var/qmail/rc ]; then case ${qmail_enable} in [Yy][Ee][Ss]) echo -n ' qmail' /var/qmail/rc & ;; fi
話は変わってFreeBSD4.7ではdefaultのrc.confでrc.sendmailに導くようにしくんでいるみたいなので、rc.confの内容が変わります。
mta_start_scriptも書かなければいけないようです。
sendmail_enable="NO"
qmail_enable="YES"
mta_start_script="/etc/rc.qmail"
それから、/etc/rc.qmailを作ります。rc.sendmailを参考にしながら作りましたが、startしたりstopしたりする機能を盛り込んでいないのでまだまだ改善の余地があります。ていうか、とりあえず動くものを作ったので手抜きです(汗)
#!/bin/sh if [ -r /etc/defaults/rc.conf ]; then . /etc/defaults/rc.conf source_rc_confs elif [ -r /etc/rc.conf ]; then . /etc/rc.conf fi start_mta() { if [ -r /var/qmail/rc ]; then case ${qmail_enable} in [Yy][Ee][Ss]) echo -n ' qmail' /var/qmail/rc & ;; esac fi }
これでqmailは立ち上がるのですが、tcpserverから立ち上がってくるsmtpdとpop3があがってこないのでどこかに書いてあげなければいけません。
/var/qmail/rcに書き加えるのがいいのでしょうが、うまく動かないときはrc.localに入れてもいいと思います。
私が入れたときは/var/qmail/rcに書いたら動かなかったのでrc.localに書きました。
下のコマンドは自動改行になっていると思いますが、コマンドは一気に1行で書くか、"\"で改行をエスケープしてください。
# Starting smtp/tcpserver
/usr/local/bin/tcpserver -x /etc/tcp.smtp.cdb -u 60002 -g 60001 0 smtp /var/qmail/bin/qmail-smtpd &
# Starting pop3d/tcpserver
/usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup [hostname.mydomain] /usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
12.細かい設定
あとはユーザサイドの設定が残っています。
qmailではMaildir方式のメールボックスになっているので、メールユーザのホームディレクトリにMaildirを作成します。
下記コマンドはメールのユーザで実行してください。
% /var/qmail/bin/maildirmake ~/Maildir
それから、ホームディレクトリに".qmail"というファイルを作り中には"~/Maildir/"と書いておきます。
% cd ~
% echo "./Maildir/" > .qmail
あと、rootやmail-daemonのアドレスを転送したいという場面も多いと思います。そういうときは/var/qmail/aliasに.qmail-rootなどのファイルを作って中に転送先のアドレスを入れておきます。
# cd /var/qmail/alias
# vi .qmail-root
ファイルの中身はこんな感じでアドレスの前には"&"を入れます。複数入れることもできます。
&usename1@domain
&usename2@domain
同様にmail-daemonやpostmasterも作っておきましょう。
おまけ
固定IPアドレスやDynamicDNSを使えば独自ドメインを使ったメールサーバの運用ができます。
ドメインの登録方法やDNSの設定方法、運用なども含めてここで紹介しようと思ったのですが、DNSやメールサーバの運用は大きな責任を伴うため、ここで安易に紹介することは差し控えようと思います。
でも本当にやる気のある人は、それなりに調べてちゃんとたどり着けると思います。がんばって探してみてください。
参考文献
Software Design 2000/2月号 メールシステムパワーアップ大作戦
Software Design 2001/4月号 これでわかった!メールサーバのリニューアル
qmail-1.03 付属文書 http://man.qmail.jp/