qmail によるメールサーバ構築

作業:村田泰洋・田中伸
  1. qmail
  2. apop
  3. imap
  4. smtp
  5. ezmlm
  6. MUA

[1] qmail

[1.1]ソース取得,コンパイル

qmail のディレクトリを作成する.

# mkdir /var/qmail

qmail ユーザ, グループを追加する.

http://www.jp.qmail.org/q103/jinstall/install.ids.html に加筆: Linux(shadow), Solaris
   # groupadd -g gid nofiles
   # useradd -g nofiles -d /var/qmail/alias -u uid alias
   # useradd -g nofiles -d /var/qmail -u uid qmaild
   # useradd -g nofiles -d /var/qmail -u uid qmaill
   # useradd -g nofiles -d /var/qmail -u uid qmailp
   # groupadd -g gid qmail
   # useradd -g qmail -d /var/qmail -u uid qmailq
   # useradd -g qmail -d /var/qmail -u uid qmailr
   # useradd -g qmail -d /var/qmail -u uid qmails

Slink 版では qmail関連グループはシステムインストール時にすでに存在して いた. しかし Potato 版では, qmail 関連のシステムユーザおよびグループユー ザはすべて存在しなくなったので追加する. これらはシステムユーザ・グルー プなので,gid, uid は 100-999 を使う (詳細は Debian Policy Manual - The Operating System). 特に 1000-29999 は gate-system が使用するので, 使わない. あらかじめ変更する.

ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz を取得. 展 開する. できたディレクトリ(qmail-1.03/)に移って, コンパイル.

$ tar xvfz qmail-1.03.tar.gz
$ cd qmail-1.03
# make
# make man
# make setup
# make check

[1.2]初期設定

[1.2.1]制御ファイル

qmail 制御ファイルに設定を書き込む. 詳細は文献 2を見よ. 制御ファイルは /var/qmail/control/ 以下にあり, 制御ファイルの詳細は qmail-controlに記述されている.

まず, 自ホスト名を設定する.

# ./config

このスクリプトは, ホスト名を DNS 検索し, それぞれの制御ファイ ルへ以下の情報を書き込む.

/var/qmail/control/defaultdomainep.sci.hokudai.ac.jp
/var/qmail/control/locals localhost
grey.ep.sci.hokudai.ac.jp
/var/qmail/control/me grey.ep.sci.hokudai.ac.jp
/var/qmail/control/plusdomain ac.jp
/var/qmail/control/rcpthosts localhost
grey.ep.sci.hokudai.ac.jp

DNS に登録がなされていないと正しく動作しないことに注意されたい.

上記スクリプトがエラー出力される場合

今回, gate 登録システムによって DNS 登録を行った直後にサーバの構築を行っ たがエラーが出力された. これは DNS の逆引きができなかった事が原因となっ っていた(DNS の逆引きは専攻サーバではサービスしていない. しばらくする と北大大計の DNS サーバで逆引きできるようになる). このような場合, DNS 検索をしないスクリプトを用いて設定を行う.

# ./config-fast blue.ep.sci.hokudai.ac.jp

その結果は以下のとおり.

/var/qmail/control/defaultdomainep.sci.hokudai.ac.jp
/var/qmail/control/locals grey.ep.sci.hokudai.ac.jp
/var/qmail/control/me grey.ep.sci.hokudai.ac.jp
/var/qmail/control/plusdomain ac.jp
/var/qmail/control/rcpthosts grey.ep.sci.hokudai.ac.jp

yellow によって, ep.sci.hokudai.ac.jp の MX を向けられている場合, 「別ホストあての メイルも受け取りたい」に従って作業する.

# echo ep.sci.hokudai.ac.jp >> /var/qmail/control/locals
# echo ep.sci.hokudai.ac.jp >> /var/qmail/control/rcpthosts

locals に書かれる情報は"ローカル処理すべきドメイン名"である. サー バの移行期間ではまだ MX は向けられていないため上記の作業は行わない.

また, 「ホス ト名を隠したい」に従って, ドメイン部のないアドレスにつけるホスト名 を設定する.

# echo ep.sci.hokudai.ac.jp >> /var/qmail/control/defaulthost
# chmod 644 /var/qmail/control/defaulthost

そのほかに, 以下を設定も行う.

# echo 10000000 >> /var/qmail/control/databytes
# chmod 644 /var/qmail/control/databytes
# echo 259200 >> /var/qmail/control/queuelifetime
# chmod 644 /var/qmail/control/queuelifetime

これら制御ファイルの効果は, qmail-showctl コマンド(詳細はqmail-showctl(8))で確認できる.

[1.2.2]各種エイリアスアドレス

システムのアドレスを設定する.

# cd /var/qmail/alias
# echo '&epmail' > .qmail-root
# echo '&root' > .qmail-postmaster
# echo '&root' > .qmail-mailer-daemon
# echo '&root' > .qmail-bin
# echo '&root' > .qmail-daemon
# echo '&root' > .qmail-games
# echo '&root' > .qmail-ingres
# echo '&root' > .qmail-nobody
# echo '&root' > .qmail-system
# echo '&root' > .qmail-toor
# echo '&root' > .qmail-uucp
# echo '&root' > .qmail-usenet
# echo '&root' > .qmail-anonymous
# echo '&root' > .qmail-mail
# echo '&epwww' > .qmail-www
# echo '&yellow' > .qmail-dns

# echo '&epnews' > .qmail-news
# chmod 644 .qmail-*

以上により, postmaster, mailer-daemon, bin, daemon, games, ingres, nobody, system, toor, uucp, usenet, anonymous, mail あてのメールは, root に転送され, root あてのメールは epmail に転送される. 詳細は, dot-qmail(5).

[1.2.3]パスを通す

/var/qmail/bin 以下のコマンドにパスを通す. bash の場合, /etc/profile の PATH= の行を編集し, /var/qmail/bin を付け加える.

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/var/qmail/bin"

csh の場合, /etc/csh.cshrc を編集し, 同様に付け加える.

# /etc/csh.cshrc: system-wide .cshrc file for csh(1)/tcsh(1).
# $Id: csh.cshrc,v 1.4 1998/06/05 21:04:02 luisgh Exp $

setenv PATH /usr/local/bin:/usr/bin:/bin:/var/qmail/bin

[1.2.4]man を有効にする

/etc/manpath.config を編集し以下の部分を付け加える.

#MANDATORY_MANPATH/usr/src/pvm3/man
......
MANDATORY_MANPATH/usr/local/man
MANDATORY_MANPATH/var/qmail/man
...
#*PATH**MANPATH*
.........
MANPATH_MAP/opt/sbin/opt/man
MANPATH_MAP/var/qmail/bin/var/qmail/man
...
#*PATH**CATPATH*
.........
MANDB_MAP/opt/man/var/cache/man/opt
MANDB_MAP/var/qmail/man/var/qmail/man

[1.2.5]~/Mailbox への配送

/etc/profile に以下を書き加える.

...
export PATH PS1

umask 022

MAIL="$HOME/Mailbox"
MAILDROP="$HOME/Mailbox"

export MAIL MAILDROP

/etc/csh.cshrc に以下を書き加える.

...
set prompt = "%U%m%u:%B%~%b%# "
endif
endif

setenv MAIL $HOME/Mailbox
setenv MAILDROP $HOME/Mailbox

なお, 各ユーザのホームディレクトリのパーミッションは 755 でないと, メール配送時にエラーが出るらしい.

[1.3]qmail 起動

# cp /var/qmail/boot/home /var/qmail/rc
# csh -cf '/var/qmail/rc &'

qmail は起動する. qmail-send, splogger qmail, qmail-lspawn, qmail-rspawn, qmail-clean を ps で確認する.

次にブート時に qmail を走らせるようにするため, 以下のことを行う. ブー トスクリプトに関わる設定ファイルは/etc/inittab/etc/init.d/rc である.

/etc/init.d/qmail に以下の起動スクリプトを記述し, 実行許可を与える.

# 起動スクリプト
csh -cf '/var/qmail/rc &'
# chmod 755 /etc/init.d/qmail

/etc/rc[2-5].d/ の下に, これへのリンクを置く. この数字(2-5)は RUNLEVEL に対応する. 2-5 はマルチユーザモード, 0 は halt, 1 は single user mode, 6 は reboot に対応する.

# cd /etc/rc2.d/
# ln -s ../init.d/qmail S80qmail
# ls -al S80qmail
lrwxrwxrwx  1 root  root  15  S80qmail -> ../init.d/qmail

# cd /etc/rc3.d/
(RUNLEVEL 3-5 も同様)

このリンクの名前の S に続く2桁の数字(80)が, 起動のタイミングを決定する. reboot して, qmail デーモン群の起動を ps で確認.

[1.4]テスト

(編集中) 文献 6 に従い, 配送テスト(ローカル配送, リモー ト送り出しテスト)を行う.

[テスト1]ローカル配送テスト part1

自分に送ってみる. hoge は自分のユーザ名に変え, 以下のコマ ンドを実行する. ~kyoma/Mailbox にメールが送られることを確認.

$ echo to: hoge | /var/qmail/bin/qmail-inject

[テスト2]ローカル配送テスト part2

存在しない宛先に送ってみる. バウンスメールが~kyoma/Mailbox に送られてくるのなら OK.

$ echo to: nonexistent | /var/qmail/bin/qmail-inject

[テスト3]リモート送り出しテスト

他のホスト上のアカウントへ送ってみる. 届いていれば OK. 届かなければ, /var/log/syslog を参照して原因を追求する.

% echo to: hoge@gfd-dennou-org | /var/qmail/bin/qmail-inject

[1.5]sendmail の「置き換え」

文献 4, 5に従う.

ただし, sendmail ではなく, exim がインストールされている場合は, exim を無効にする.

exim のブートスクリプトは, /etc/init.d/exim で, これに /etc/rc[2-5].d/S20exim, /etc/rc{1,6}.d/K20exim からリンクが張られている. これを無効にする.

# chmod 000 /etc/init.d/exim
# mv /etc/init.d/exim /etc/init.d/exim.bak

また, cron から呼び出される処理も無効にする. /etc/cron.daily/exim の先頭の方に次の行を書き足す. 3 行目の [ と ! の間にはスペースが一つある ことに注意.詰めて書くとエラーが出る.

#!/bin/sh
# by TOYODA Eizi, 1999-09-22. We need not exim.
if [ ! -f /etc/exim.conf ]; then
exit 0
fi
# Uncomment the following lines to get daily e-mail reports
...

これで /etc/cron.daily/exim は無効になり, いずれ /etc/exim.conf を使って設定を行った暁には本当に動作するだろう. (豊田, 1999/09/22)

次に文献 4, 5 の通りの「sendmail 置き換 え」作業を行う.

# chmod 000 /usr/lib/sendmail
# chmod 000 /usr/sbin/sendmail

# mv /usr/lib/sendmail /usr/lib/sendmail.bak
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak

# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

最後にリンクを張ったのは, 「qmail の "sendmail" wrapperを MUA から使えるようにする」ため. /usr/lib/sendmail は, cron や gate-system がメールを出すのに使うので, リンクを張るのを忘れないこと.

[1.6]smtp(仮)

後に tcpserver をインストールするため, ここでの設定は最終的に反映されな い. しかし, メールサーバはたくさんのアプリケーションをインストールする ためインストールの設定が確かであるか一つずつ確かめた方が無難である. そのため, ここでは smtp 受信テストを行うための設定を行う.

/etc/inetd.conf に以下を一行で追加.

#:OTHER: Other services
# SMTP 2001-03-12
smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd

これを有効にするため, inetd に HUP を送る.

# kill -HUP xxxx

xxxx は /usr/sbin/inetd のプロセス番号(ps aux |grep inetdでわかる)

受信テスト

他のホストから自分に送ってみる. 詳しくは, 文献7.

[1.7]文献

  1. http://www.jp.qmail.org/q103/jinstall/install1.html
  2. http://www.jp.qmail.org/q103/jinstall/install.ctl.html
  3. http://www.y-min.or.jp/~nob/qmail/install.html
  4. http://www.jp.qmail.org/q103/jinstall/install3.html
  5. http://www.jp.qmail.org/q103/jinstall/remove.sendmail.html
  6. http://www.jp.qmail.org/q103/jinstall/test.deliver.html
  7. http://www.jp.qmail.org/q103/jinstall/test.receive.html

2. apop

[2.1]取得・コンパイル

http://checkpw.sourceforge.net/checkpw/より,check-1.00.tar.gz を取得, 展開. checkpw-0.80/INSTALL に従ってコンパイルする. 具体的には以下のコマンドを実行する.

$ cd checkpw-0.80/
$ make 
# su 
# make setup check

/bin/checkapoppw ができる.

[2.2]設定

[2.2.1]inetd からの呼び出し

/etc/inetd.conf に以下を一行で追加し, inetd に HUP を送る.
#:OTHER: Other services

# SMTP 2001-03-12
smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd
# APOP 2001-03-12
pop-3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup grey.ep.sci.hokudai.ac.jp /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir
# Kill -HUP xxxx

xxxxは /usr/sbin/inetd のプロセス番号

[2.2.2]~/Maildir/ への配送

[2.2.2.1]環境変数の設定

すでに ~/Mailbox へ配送するための環境変数は設定した. apop, imap によるメールの読み出しは専攻サーバでは maildir 形式を用いる.

はじめに, 環境変数 MAILDIR を設定する. 環境変数の設定は ~/Mailbox への配送でも行ったが, bash は /etc/profile, csh は /etc/csh.cshrc に書き込む.

/etc/profile に次の 1 行を加える.

...
umask 022

MAIL="$HOME/Mailbox"
MAILDROP="$HOME/Mailbox"

export MAIL MAILDROP
MAILDIR="$HOME/Maildir/"
export MAILDIR

/etc/csh.cshrc には次の 1 行を加える.

...
setenv PATH /usr/local/bin:/usr/bin:/bin:/var/qmail/bin
setenv MAIL $HOME/Mailbox
setenv MAILDROP $HOME/Mailbox

setenv MAILDIR $HOME/Maildir/

次に配送テストのために一般ユーザで次の設定を行う.

[2.2.2.2]~/Maildir の作成
$ /var/qmail/bin/maildirmake
~/Maildir
[2.2.2.3] .qmail の編集

次に ~/Maildir への配送を qmail に指示する(.qmail へ配送先ディレクトリ を記述する).

$ echo ./Maildir/ > ~/.qmail
$ chmod 600 ~/.qmail

.qmail のパーミッションは, 600 か 644 でなければならない. 要は, 実行許 可が出ていないこと, オーナー以外に書き込みが許可されていないこと, が要 求される.

[2.2.2.4][認証パスワードの設定]
~/Maildir/.password ファイルを作る.
$ echo 'APOPPASSWORD' > ~/Maildir/.password
$ chmod 600 ~/Maildir/.password

この中身(ここでは, APOPPASSWORD)が, apop でメールを読むときの認証パ スワードとなる.

[2.3]テスト

blue の外のホストから, apop 対応メーラー(例. eudora-J1.3.8.8r6 for Macintosh)を用いて, apop サーバを blue に指定して blue 上の自分のアカ ウントあてに届いたメールを読んでみる.

[2.4]文献

  1. http://www.geocities.co.jp/SiliconValley/4777/qmail/checkpw/index.html
  2. http://www.y-min.or.jp/~nob/qmail/qmail-pop3d.html
  3. http://www.jp.qmail.org/qmail/top.html

3. imap

[3.1]取得・展開

imap サーバのバージョンは現在(2001/03/12)4.7 である. バージョン 4.7 においても Maildir 形式を正式にサポートしていない. Maildir のパッチがあてられている imap-4.7-maildirpatched-1.00.tar.gz を http://www.davideous.com/imap-maildir/distrib/imap-4.7/ から取得する. 展開すると imap-4.7-maildirpatched-1.00 が作られる.

$ tar xfvz imap-4.7-maildirpatched-1.00.tar.gz
$ cd imap-4.7-maildirpatched-1.00/

[3.2]コンパイル

パスワード認証形式は CRAM-MD5 を使う. imap-4.7-maildirpatched-1.00/doc/md5.txt によると make 時に PASSWDTYPE=nul と与えれば, MD5 形式のパスワードを使うことができるらし い. ただし, Makefile, md5.txt を熟読後に以下のコマンドを実行する.

docs/md5.txt から抜粋.

... If the CRAM-MD5 authentication database exists, then plaintext password authentication (e.g. the LOGIN command) will also use the CRAM-MD5 passwords instead of UNIX passwords. Alternatively, it is possible to build the IMAP toolkit so that plaintext password authentication is disabled entirely, by using PASSWDTYPE=nul, e.g. ...

# make slx PASSWDTYPE=nul

デフォルトでは PASSWDTYPE=std となっている. このタイプでコンパイルした 場合, imap 認証にはログインに使うパスワードと同じ物が用いられる. これ はアンセキュア !

次にコンパイルされた imapd をシステムに反映させるためしかるべき場所へ コピーする.

# cp imap-4.5/imapd/imapd /usr/local/sbin/imapd

[3.3]設定と imap の起動

[3.3.1]inetd からの呼び出し

/etc/services に, imap2 ポートがあることを確認する.
......
netbios-ssn 139/udp
imap2   143/tcp# Interim Mail Access Proto v2
imap2   143/udp
snmp 161/udp# Simple Net Mgmt Proto
......

/etc/inetd.conf に以下の一行を加える.

# APOP 2001-03-12
pop-3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup grey.ep.sci.hokudai.ac.jp /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir

# IMAP 2001-03-21
imap2 stream tcp nowait root /usr/local/sbin/imapd imapd

inetd に HUP を送る.

# kill -HUP xxxx

xxxx: inetd のプロセス番号.

[3.3.2]~/Maildir/ への配送

~/Maildir/ への配送を指定する. 既に apop を導入している場合には, この作業は不要のはずである.

[3.4]MD5 認証データベースファイル

[3.4.1]認証データベースファイルの作成<

imap-4.7-maildirpatched-1.00/docs/md5.txt に従って, /etc/cram-md5.pwd を書く. これが, CRAM_MD5 の認証データベースファイルとなる. 以下がその 書式. ユーザ名と imap 用パスワードの間は tab で区切るとされている.

# CRAM-MD5 authentication database
# Entries are in form <user><tab><password>
# Lines starting with "#" are comments

kyoma xxxxxxxx
# chmod 400 /etc/cram-md5.pwd

[3.4.2]MD5 認証データベースファイル自動生成

CRAM_MD5 の認証データベースファイル /etc/cram-md5.pwd の書き込みには root 権限が要る. そのため, imap 認証のパスワードを各ユーザが編集するこ とはできない. そこで, apop 認証パスワード ~/Maildir/.password を読み出 して, /etc/cram-md5.pwd を生成するスクリプトを書いた. これを root 権限 で定期的に実行すれば, (遅れはあるものの)/etc/cram-md5.pwd が更新され る.

スクリプトは以下のとおり. ファイル名は/etc/cron.daily/imappwdbg とした. パー ミッションは, 755.

#!/usr/bin/perl
#Kyoma TAKAHASHI 1999.7.9
#                1999.10.02
#Thanks for Toyoda's help.

$chmodbin = '/bin/chmod';
$imappwdb = '/etc/cram-md5.pwd';
$userpwfile = 'Maildir/.password';

system "$chmodbin 600 $imappwdb";
open(DBFILE,"> $imappwdb");
        print DBFILE '# CRAM-MD5 authentication database',"\n";
        print DBFILE '# Entries are in form <user><tab><password>',"\n";
        print DBFILE '# Lines starting with "#" are comments',"\n";
	print DBFILE "\n";
	while (($user,$passwd,$uid,$gid,$quota,$comm,$gcos,$dir) = getpwent) {
if ( $uid >= 1000 ) {
if ( $uid <= 29999 ) {
        open(PWFILE,"< $dir/$userpwfile");
	$pass = '';
        $pass = $_ while(<PWFILE>);
        chop($pass);
        close(PWFILE);
        if($pass ne '') {
        open (GATEUS,"/usr/local/bin/gate-user-show $user |");
	while () { if (/type/) { ($typeq) = /type: (.*)/; } }
        close (GATEUS);
        if ( $typeq eq 'person' ) {
                        print DBFILE $user;
		        print DBFILE "\t";
                        print DBFILE $pass;
                        print DBFILE "\n";
	}}
}}
}

close(DBFILE);
system "$chmodbin 400 $imappwdb";

より頻繁にこのデータベースを更新するために cron を用いる. 具体的な作業は以下の通り.

$ sudo -s
# whoami
root
# crantab -e
以下のように編集する.
50 8-20 * * * /etc/cron.daily/imappwdbg

[3.5]テスト

blue の外のホストから, imap 対応メーラー(例. Netscape Communicator 4 for Macintosh)を用いて, imap サーバを blue に指定して, blue 上の自分 のアカウントあてに届いたメールを読んでみる.

[3.6]文献

  1. http://www.ne.jp/asahi/cyber/taki/server/qmail/uw-imapd.html

[4] smtp

パソコンのメールソフトを使ってメールを利用するユーザは多いと考えられる ことから, mail が smtp 要求を受けるべきは, 1) mail にあるアカウント宛 に届くメール, 2) 地惑内のホスト(サブドメイン取得後なら, *.ep.sci.hokudai.ac.jp か)からの送られてきたメール, であろう.

qmail の FAQ 5.4「特定のクライアントにだけリレーとして使わせたい」(文献 1)に従って作業を行う. この FAQ では, tcpserver を使うやり方と, tcp-wrappers を使うやり方の二つが述べられて いる. tcpserver の導入によって, 同時に多くの smtp 要求を受け付けられ, 接続の記録が取れるようになる(文献 2)という利点 から, tcpserver を使うことにする.

[4.1] tcpserver 導入

文献 2に従って, qmail-smtpd の呼び出しを inetd から tcpserver に移す.

[4.1.1] inetd の停止

su になって, /etc/inetd.conf 中の smtp の行をコメントアウト (行頭に # を付す)して, inetd に HUP を送る . これによって, qmail-smtpd が inetd から呼び出されなくなる.

[4.1.2]tcpserver のインストール

tcpserver は ucspi-tcp ツール群のひとつの機能である. ucspi-tcp ツール群のうち tcpserver は入ってくる TCP 接続を受け付けるプログラムである. ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.88.tar.gz を取得. 展開する. 続いて付属ドキュメントに従ってコンパイルする.

$ tar xvfz ucspi-tcp-0.88.tar.gz
$ make
# make setup check

[4.1.3]tcpserver の起動

qmaild の UID, nofiles の GID を確認した上で, 以下を実行する.

# tcpserver -u xxxx -g yyyy 0 smtp /var/qmail/bin/qmail-smtpd &
xxxx: qmaild の UID. yyyy: nofiles の GID.

inetd から qmail-smtpd を呼び出していたときと同様の受信テストを行い, inetd から tcpserver への移行 の成否を確認する.

次に qmail と同様に, ブート時に起動するようにする. /etc/init.d/tcpserver に以下を記述する. 編集後, root に実行許可を出す.

#!/bin/sh
#

# smtp
/usr/local/bin/tcpserver -u xxxx -g yyyy 0 smtp /var/qmail/bin/qmail-smtpd &
# chmod 755 /etc/init.d/tcpserver 

/etc/rc[2-5].d/ の下に, これへのリンクを置く.

# cd /etc/rc2.d/
# ln -s ../init.d/tcpserver S80tcpserver
# ls -al S80tcpserver
lrwxrwxrwx  1 root  root  15  S80tcpserver -> ../init.d/tcpserver

# cd /etc/rc3.d/
(RUNLEVEL 3-5 も同様)

[4.2] tcpserver 設定

smtp 中継を許可するホストを指定する. まず, 文献 1 に従って, /etc/tcp.smtp を書く. 例えば, 133.87.52.40 という IP アドレスのホストからの smtp 中継を許可するためには, この1行目のように 書く. 2 行目の 127. はローカルホストを指す. これは常に書くこと.

133.87.52.40:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""

次に以下のコマンドを実行する. tcp.smtp を元に /etc/tcp.smtp.cdb ができる.

# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

tcpserver 起動スクリプト /etc/init.d/tcpserver の起動行は以下のように 編集しなおす(1 行で書く).

/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u xxxx -g yyyy 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
(xxxx: qmaild の UID. yyyy: nofiles の GID. )
追加された部分を説明すると -x /etc/tcp.smtp.cdb はデータベースファイル /etc/tcp.smtp.cdb を参照させるための設定である. また, 接続の記録を取るために -v オプションと splogger への受け 渡しが記述されている.

[4.3] tcpserver 起動確認

grey を reboot する. tcpserver の起動を確認する.

先ほど /etc/tcp.smtp に書いた IP アドレス(ここでは, 133.87.52.40)を 持つパソコンから, メーラー(例. eudora-J1.3.8.8r6)を使って, smtp サー バを blue に設定し, blue 以外の任意のホストにあるアカウント宛のメール を発信してみる.

/var/log/syslog に残るログは, 以下のようなものとなる事を確認する.

Jul 8 18:06:15 blue smtpd: 931424775.300370 tcpserver: status: 1/40
Jul 8 18:06:15 blue smtpd: 931424775.301735 tcpserver: pid 185 from 133.50.133.146
Jul 8 18:06:15 blue smtpd: 931424775.326543 tcpserver: ok 185 blue.ep.sci.hokudai.ac.jp:133.87.45.26:25
grey.sci.hokudai.ac.jp:133.87.52.40::2064
Jul 8 18:06:15 blue smtpd: 931424775.862705 tcpserver: end 185 status 0
Jul 8 18:06:15 blue smtpd: 931424775.863054 tcpserver: status: 0/40

[4.4]接続制御データベースファイル /etc/tcp.smtp.cdb 自動生成

gate-system から登録 IP アドレス一覧を受け渡してもらい, /etc/tcp.smtp.cdb を自動生成する. そのために, 標準入力から IP アドレス リストを読み込み, /etc/tcp.smtp を書くスクリプトを書いた. これを, /usr/local/sbin/list-2-tcp とする. root への実行許可を忘れずに.

#!/usr/bin/perl
#Kyoma TAKAHASHI 1999.08.11
#                1999.09.09
#                1999.11.09

#      list-2-tcp file

$add = ':allow,RELAYCLIENT=""';
$bottom = '127.';

$rulefile = shift;

open(RULEFILE,"> $rulefile");

while(<>) {
        chop($ip = $_);
        if($ip ne '') {
        if(/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {
                ($_) = /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/;
                s/^0+//;
                s/\.0+/\./g;
                s/^\./0\./;
                s/\.$/\.0/;
                s/\.\./\.0\./g; s/\.\./\.0\./g;
                print RULEFILE $_,$add,"\n";
        }}
}

print RULEFILE $bottom,$add;

close(RULEFILE);

/usr/local/sbin/tcp_smtp_cdb を以下のように書く. root への実行許可を忘 れずに. gate の ip データベース更新時には, gate-system によってこのス クリプトが呼び出される.

#!/bin/sh
# Kyoma TAKAHASHI 1999.9.9
# 10.16

/usr/local/bin/gate-ip-show -f ip `/usr/local/bin/gate-ip-list stable` | /usr/local/sbin/list-2-tcp /etc/tcp.smtp && /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

gate-ip-show, gate-ip-list は, gate-system のコマンドである.

# chmod 755 /usr/local/sbin/tcp_smtp_cdb

[4.5] 他のサービスも tcpserver へ移す

inetd から呼び出されていた pop, imap の受付を tcpserver に移すには, /etc/inetd.conf の pop, imap の行をコメントアウト(inetd の 停止と同じ作業を行う.)した上で, tcpserver 起動スクリプト /etc/init.d/tcpserver に以下の行を加えて(pop, imap 共に一行で), 再起動 する.

#!/bin/sh
#

# smtp
/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u 71 -g 102 0 smtp /var/qmail/ bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &

# pop-3

/usr/local/bin/tcpserver -v -u 0 -g 0 0 pop-3 /var/qmail/bin/qmail-popup grey.ep.sci.hokudai.ac.jp /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3d 3 &
# imap2

/usr/local/bin/tcpserver -v -u 0 -g 0 0 imap2 /usr/local/sbin/imapd 2>&1 | /var/qmail/bin/splogger imapd 3 &
# reboot
ログは, 以下のようになる.
Jul 28 01:00:25 grey pop3d: 933091225.430984 tcpserver: status: 1/40
Jul 28 01:00:25 grey pop3d: 933091225.431641 tcpserver: pid 2535 from 133.50.133.146
Jul 28 01:00:25 grey pop3d: 933091225.439887 tcpserver: ok 2535 grey.ep.sci.hokudai.ac.jp:133.87.45.26:110
skygrey.sci.hokudai.ac.jp:133.87.52.40::2055
Jul 28 01:00:25 grey pop3d: 933091225.498577 tcpserver: end 2535 status 256
Jul 28 01:00:25 grey pop3d: 933091225.498914 tcpserver: status: 0/40
Jul 28 00:45:57 grey imapd: 933090357.824565 tcpserver: status: 1/40
Jul 28 00:45:57 grey imapd: 933090357.825841 tcpserver: pid 2394 from 133.50.133.134
Jul 28 00:45:57 grey imapd: 933090357.835252 tcpserver: ok 2394 grey.ep.sci.hokudai.ac.jp:133.87.45.26:143
geomacg.sci.hokudai.ac.jp:133.50.133.134::1030
Jul 28 00:46:57 grey imapd: 933090417.606449 tcpserver: end 2394 status 0
Jul 28 00:46:57 grey imapd: 933090417.606574 tcpserver: status: 0/40

[4.6]文献

  1. http://www.jp.qmail.org/q103/faq/faq5.html#5.4.
  2. http://www.jp.qmail.org/q103/faq/faq5.html#5.1.
  3. ftp://koobera.math.uic.edu/www/ucspi-tcp.html
  4. http://www.ne.jp/asahi/cyber/taki/server/tcpserver/

5. ezmlm

[5.1] ezmlm 導入

ftp://ftp.jp.qmail.org/ezmlm/ezmlm-0.53.tar.gz を取得, 展 開する. ezmlm-0.53/INSTALL に従って作業を行う.

$ tar xfvz ezmlm-0.53.tar.gz
$ cd ezmlm-0.53/
$ make
$ make man
$ su
# make setup

qmail のコマンドにパスを通したのに習って. /usr/local/bin/ezmlm/ 以下の ezmlm のコマンドバイナリ群にパス 通す(具体的には PATH=... の行に/usr/local/bin/ezmlm/を追加するだけ).

[5.1.1]テスト

メーリングリスト(ML)を作成する. 詳細はezmlm-make の man(日本語訳 ).

$ ezmlm-make ~/testlist ~/.qmail-testlist kyoma-testlist ep.sci.hokudai.ac.jp

次に作成した ML に ML 主催者が手動で購読者を追加する. 詳細は, ezmlm-sub の man(日本語訳 ).

$ ezmlm-sub ~/testlist kyoma@ep.sci.hokudai.ac.jp

登録が終了したら ML へ投稿してみる. 先程登録したアドレスへ届くか確かめ る.

% echo subject:testing | qmail-inject kyoma-testlist@ep.sci.hokudai.ac.jp

次に ML の自動処理コマンドを確かめる. 自動処理コマンドの詳細は http://www.jp.qmail.org/ezmlm/chart.html を見よ. 始めに, 投稿アーカイブから記事を取り出すコマンドを試す. 記事が 送られてくるかを確認する. ep ドメインの MX が張られていない場合 ,/var/qmail/control/defaulthost を ホスト名までいれたドメイン(フルドメイン)にする必要がある.

$ qmail-inject kyoma-testlist-get.1@ep.sci.hokudai.ac.jp < /dev/null

次に ML 参加者による自動登録抹消を試す. 確認メールが送られてくるので, その指示に従い, 登録抹消する. ep ドメインの MX が張られていない場合 ,/var/qmail/control/defaulthost を ホスト名までいれたドメイン(フルドメイン)にする必要がある.

$ qmail-inject kyoma-testlist-unsubscribe@ep.sci.hokudai.ac.jp < /dev/null

登録を抹消できたかどうかの確認は ML 登録アドレス一覧を見る. 詳細は, ezmlm-list の man(日本語訳)を見よ.

$ ezmlm-list ~/testlist

5.2 ezmlm-idx 導入

[5.2.1]ezmlm-idx の取得からコンパイル

ftp://ftp.jp.qmail.org/ezmlm/ezmlm-idx-0.40.tar.gz を取得. 展開する. ezmlm-idx-0.32/INSTALL.idx に従って作業する.

$ tar xfvz ezmlm-idx-0.40.tar.gz
% mv ezmlm-idx-0.40/* ezmlm-0.53/
% cd ezmlm-0.53/
% patch < idx.patch
crontab のありかを調べる.
$ which crontab
/usr/bin/crontab
/usr/bin にあれば先へ進む. 違う場所にある場合は, conf-cron にありかを書き込む.

MySQL(解説は http://www.mysql.com/. もしくは日本語マニュ アル) を使うか否かを決定. ここでは, 使わないこととして, 先に進む. 使う場合には, この段階でやるべき作業がある.

% make clean
% make; make man
% make jp

最後の行は使用言語を選ぶものである. jp は日本語を意味する. これによって, 自動管理要請に ezmlm が応えてユーザに送る文言 (詳細) が日本語になる.

[5.2.2]テスト

ユーザ eztest を作って, ezmlm-idx のコマンドバイナリ群が実行できるか確 かめる(ezmlm-testコマンド). ezmlm-test を実行する前に emzmlm-idx のコ マンドバイナリ群にパスが通っているかを確認されたい.

$ chmod 755 ezmlm-test
$ su
# adduser eztest
# exit
$ su eztest
$ cd ezmlm-0.53/
$ ./ezmlm-test
$ exit

ここで su eztest と行ったが sudo コマンドを用いると環境変数$HOME が デフォルトではログインしたユーザとなったままなので正しく実行されない.

[5.2.3]コンパイル

MySQL を使わない場合は, 以下を実行する(使う場合には, 異なる作業が要る).

$  make std
$ make

以下を実行して, ezmlm-idx のコマンドバイナリを /usr/local/bin/ezmlm/ 以下にコピーする.

$ su
# make setup

[5.2.4]テスト

ezmlm-test を実行する. 実行する前に /usr/local/bin/ezmlm/ 以下のコマンドバイナリ群にパスが通っているか確認 する.

% su eztest
$ cd ezmlm-0.53/
$ ./ezmlm-test
$ exit
% su
# userdel eztest
# groupdel eztest
# rm -r ~eztest/

5.3 文献

  1. http://www.jp.qmail.org/ezmlm/
  2. http://www.jp.qmail.org/ezmlm/idx/

6 MUA (Mail User Agent)の設定

MUA を使えるようにする

[6.1] im の設定

im は mew の下側で用いられている. im は ~/.im が存在しない場合, /etc/im/SiteConfig を見るのでこのファイルを編集します.

以下の行のコメントアウトを外す
Smtpservers=localhost # default server for SMTP
Imget.Src=local # default source of imget (local mailbox)
MBoxStyle=qmail # if folder style mbox of qmail is used
また以下の行を加える.
FromDomain=ep.sci.hokudai.ac.jp
ToDomain=ep.sci.hokudai.ac.jp

[6.2] mh の設定

mh は mnews を始めとして多くの MUA で用いられている. mh は デフォルトでは sendmail 用になっているので, qmail 用に設定をし直す必要がある. 実際には /etc/mh/mtstailor を以下のように編集する.

mmdfldir:   
mmdflfil:   Mailbox
uucpldir:   
uucplfil:   
mmdelim1:   \001\001\001\001\n
mmdelim2:   \001\001\001\001\n
mmailid:   0
umincproc:   
lockstyle:   0
lockldir:   
hostable:   /usr/lib/mh/hosts
sendmail:   /usr/lib/sendmail

以下は一般ユーザ毎の設定である.

$ /usr/bin/mh/inc

各人のホームに .mh_profile が作られる. また, ~/Mailbox に配送されたメー ルを取りにいく. inc コマンドにパスが通っていなかった. 以上により mh を 使う MUA は動くようになる.




最終更新日: 2001/03/13(村田泰洋) Copyright © 2001 epcore