qmail とその周辺

www@kyoma.org
作業:高橋共馬・杉山耕一朗・西願寺善彦

もくじ


qmail

最終更新:1999/9/22

ソース取得,コンパイル

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

Debian では,このうちいくつかのユーザ,グループはインストール時に作られる.具体的には,ユーザ alias とグループ nofiles 以外は,Debian インストール時に入るようだ.そこで,ユーザ alias とグループ nofiles を追加する.これらは,システムユーザ・グループなので,gid, uid は 100-999 を使う(詳細は Debian Policy Manual - The Operating System).特に 1000-29999 は gate-system が使用するので,使わない.また,alias, qmaild, qmaill, qmailp は,グループ nofiles に属すべきとあるが,nobody に属しているため変更する.

あるいは,deluser, delgroup で Debian インストール時に作られるこれらのユーザ・グループを一旦消してからこれ(上)に従えばよい.ただし,Debian Policy Manual - The Operating System には反することになる.Debian インストール時に作られる UID/GID = 0-99 のユーザ・グループは,どの Debian システムでも同一とされているからである.

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

# make
# make man
# make setup
# make check

初期設定

制御ファイル

qmail 制御ファイルに設定を書き込む.詳細は文献 2,制御ファイルは /var/qmail/control/ 以下にあり,その一覧は,http://www.jp.qmail.org/q103/jman5/qmail-control.html

まず,自ホスト名を設定する.qmail-1.03.tar.gz を展開してできたディレクトリ(qmail-1.03/)に移る.

# ./config

このスクリプトは,ホスト名を DNS 検索する.以下の内容が書き込まれる.

/var/qmail/control/defaultdomain     ep.sci.hokudai.ac.jp
/var/qmail/control/locals            localhost
                                     blue.ep.sci.hokudai.ac.jp
/var/qmail/control/me                blue.ep.sci.hokudai.ac.jp
/var/qmail/control/plusdomain        ac.jp
/var/qmail/control/rcpthosts         localhost
                                     blue.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

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

# 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 コマンド(マニュアルは http://www.jp.qmail.org/q103/jman8/qmail-showctl.html にある)で確認できる.

各種エイリアスアドレス

# cd /var/qmail/alias

# echo '&kyoma@cosmos.sci.hokudai.ac.jp' > .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 '&root' > .qmail-www
# echo '&root' > .qmail-dns
# echo '&root' > .qmail-ftp
# echo '&root' > .qmail-news


# chmod 644 .qmail-*
以上により,postmaster,mailer-daemon,bin,daemon,games,ingres,nobody,system,toor,uucp,usenet,anonymous,mail,www,dns,ftp,news あてのメールは,root に転送され,root あてのメールは kyoma@cosmos.sci.hokudai.ac.jp に転送される.詳細は,dot-qmail(5).

法人ユーザ作成後は,例えば以下のように変更すべきである.

.qmail-root           &blue
                      &red
                      &gate
.qmail-postmaster     &blue
.qmail-mailer-daemon  &blue
.qmail-mail           &blue
.qmail-www            &red
.qmail-dns            &yellow
.qmail-ftp            &green
.qmail-news           &white

パスを通す

/var/qmail/bin 以下のコマンドにパスを通す.

/etc/profile の PATH= の行に,/var/qmail/bin を加える.例えば以下のようにする.

PATH="/usr/local/bin:/usr/bin:/bin:/var/qmail/bin"
export PATH
/etc/csh.cshrc には以下のように書く.
setenv PATH /usr/local/bin:/usr/bin:/bin:/var/qmail/bin

man を有効にする

/etc/profile に以下を書き加える.
MANPATH="/usr/man:/usr/local/man:/usr/bin/man:/var/qmail/man"
export MANPATH
/etc/csh.cshrc に以下を書き加える.
setenv MANPATH /usr/man:/usr/local/man:/usr/bin/man:/var/qmail/man

~/Mailbox への配送

/etc/profile に以下を書き加える.
MAIL="$HOME/Mailbox"
MAILDROP="$HOME/Mailbox"

export MAIL MAILDROP
/etc/csh.cshrc に以下を書き加える.
setenv MAIL $HOME/Mailbox
setenv MAILDROP $HOME/Mailbox

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

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 &'
root に実行許可を出しておく.
# 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/
(以下同様)
このリンクの名前の S に続く2桁の数字(80)が,起動のタイミングを決定する. reboot して,qmail デーモン群の起動を ps で確認.

テスト

文献6に従う.

ローカル配送テスト1:自分に送ってみる.kyoma は自分のユーザ名に変える.

% echo to: kyoma | /var/qmail/bin/qmail-inject
~kyoma/Mailbox にメールが送られることを確認.

ローカル配送テスト2:存在しない宛先に送ってみる.

% echo to: nonexistent | /var/qmail/bin/qmail-inject
バウンスメールが ~kyoma/Mailbox に送られることを確認.

リモート送り出しテスト:他のホスト上のアカウントへ送ってみる.

% echo to: kyoma@cosmos.sci.hokudai.ac.jp | /var/qmail/bin/qmail-inject

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 の先頭のほうに
# by TOYODA Eizi, 1999-09-22. We need not exim.
if [ ! -f /etc/exim.conf ]; then
        exit 0
fi
と書き足す.これで /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 がメールを出すのに使うので,リンクを張るのを忘れないこと.

smtp(仮)

/etc/inetd.conf に以下を一行で追加.
smtp  stream  tcp  nowait  qmaild  /var/qmail/bin/tcp-env  
tcp-env /var/qmail/bin/qmail-smtpd
これを有効にするため,inetd に HUP を送る.
# kill -HUP xxxx
xxxx: ps ax で調べた /usr/sbin/inetd のプロセス番号

受信テスト

他のホストから自分に送ってみる.詳しくは,文献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

apop

最終更新:1999/9/8

取得・コンパイル

http://www.geocities.co.jp/SiliconValley/4777/qmail/checkpw/checkpw-0.50.tar.gz を取得,展開. checkpw-0.50/INSTALL に従ってコンパイル.

$ cd checkpw-0.50/
$ make
# su
# make setup check
を実行.

/bin/checkapoppw ができる.

設定

inetd からの呼び出し

/etc/inetd.conf に以下を一行で追加し,inetd に HUP を送る.
pop-3   stream  tcp     nowait  root    
/var/qmail/bin/qmail-popup      qmail-popup     
blue.ep.sci.hokudai.ac.jp       /bin/checkapoppw  
/var/qmail/bin/qmail-pop3d      Maildir

余談:はじめ,この行の最初を "pop3" と書いてしまったのだが,メールクライアントから apop でメールを読もうとすると「サーバが応答しない」旨のエラーが出た.そこで,/etc/services を見ると,

pop-3           110/tcp                         # POP version 3
pop-3           110/udp
とあったので,/etc/inetd.conf の pop の行の最初を "pop3" から "pop-3" に書き換えたところ,うまくいった,

~/Maildir/ への配送

はじめに,環境変数 MAILDIR を設定する. /etc/profile, /etc/csh.cshrc に
MAILDIR="$HOME/Maildir/"
export MAILDIR
etenv MAILDIR $HOME/Maildir/
をそれぞれ追加する.

各ユーザごとに,~/Maildir を作成する.

$ /var/qmail/bin/maildirmake ~/Maildir
~/Maildir への配送を qmail に指示する.
$ echo ./Maildir/ > ~/.qmail
$ chmod 600 ~/.qmail
.qmail のパーミッションは,600 か 644.要は,実行許可が出ていないこと, オーナー以外に書き込みが許可されていないこと,が要求される.

認証パスワード

~/Maildir/.password ファイルを作る.この作業も各ユーザごとに行う.
$ echo 'APOPPASSWORD' > ~/Maildir/.password
$ chmod 600 ~/Maildir/.password
この中身(ここでは,APOPPASSWORD)が,apop でメールを読むときの認証パスワードとなる.

テスト

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

文献

  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

imap

1999/10/16

取得・編集・コンパイル

imap サーバ ftp://ftp.cac.washington.edu/imap/imap.tar.Z を取得,展開. imap-4.6.BETA/docs/formats.txt によれば,qmail の Maildir は問題があり, 公式には対応しない,Maildir への対応はサードパーティーによれ,とある.

Maildir に対応させるパッチ ftp://ftp.win.ne.jp/pub/network/mail/qmail/imap4maildir-pre.tar.gz を取得・展開.

imap4maildir-pre/README に従って,パッチをあてる. 要点は以下.

$ cp imap4maildir-pre/maildir.c imap-4.6.BETA/src/osdep/unix/
$ cp imap4maildir-pre/maildir.h imap-4.6.BETA/src/osdep/unix/
指定位置に Maildir ドライバをコピーする.

$ vi imap-4.6.BETA/src/osdep/unix/Makefile
編集する.編集結果は以下.強調は追加部.
...(前略)
DEFAULTDRIVERS=maildir imap nntp pop3 mh mx mbx tenex mtx mmdf unix news phile
...(中略)
BINARIES=mail.o misc.o newsrc.o smanager.o osdep.o utf8.o siglocal.o \
 dummy.o pseudo.o netmsg.o flstring.o fdstring.o \
 rfc822.o nntp.o smtp.o imap4r1.o pop3.o \
 unix.o mbox.o mbx.o mmdf.o tenex.o mtx.o news.o phile.o mh.o mx.o maildir.o
...(中略)
# Dependencies

...(中略)
utf8.o: mail.h misc.h osdep.h utf8.h
maildir.o: mail.h misc.h osdep.h maildir.h dummy.h
...(後略)

$ vi imap-4.6.BETA/src/c-client/mail.h
編集する.編集結果は以下.強調は追加部.
...(前略)
/* Entry in the message cache array */

typedef struct message_cache {
...(中略)
  unsigned long user_flags;     /* user-assignable flags */
  unsigned long data1;          /* needed for maildir driver */
} MESSAGECACHE;
...(後略)

続いて,imap-4.6.BETA/README に従って,コンパイルを行う.

$ cd imap-4.6.BETA/

imap-4.6.BETA/Makefile を見ると,

# The following plaintext login types are defined:
# afs   AFS authentication database
# dce   DCE authentication database
# md5   MD5 database (must also have md5 as an authenticator)
# nul   no plaintext authentication (note: this will break some secure
#        authenticators -- don't use without checking first!!)
# std   system standard (typically passwd file), determined by port

PASSWDTYPE=std
とあるので,
PASSWDTYPE=md5
に書き換える.imap-4.5/docs/md5.txt には,MD5 を用いた認証について書かれている.これによれば,この認証方式はパケット盗聴に対してセキュアだそうだ.PASSWDTYPE=std としてコンパイルした場合,imap 認証にはログインに使うパスワードと同じ物が用いられる.これはアンセキュア!
$ make slx

su になって,

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

設定

inetd からの呼び出し

/etc/services に,
imap2           143/tcp                         # Interim Mail Access Proto v2
imap2           143/udp
があることを確認.

/etc/inetd.conf に以下の一行を加える.余談:はじめ,imap-4.5/docs/BUILD に従ってプロトコル名を "imap" としていたのだが,うまく動作しなかった."imap2" に改めたのは,/etc/services にそう表記されていたため.

imap2   stream  tcp     nowait  root    /usr/local/sbin/imapd    imapd
inetd に HUP を送る.
# kill -HUP xxxx
xxxx: inetd のプロセス番号.

~/Maildir/ への配送

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

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

imap-4.5/docs/md5.txt に従って,/etc/cram-md5.pwd を書く.これが,CRAM_MD5 の認証データベースファイルとなる.
# CRAM-MD5 authentication database
# Entries are in form <user><tab><password>
# Lines starting with "#" are comments

kyoma	xxxxxxxx
ユーザ名と imap 用パスワードの間は tab で区切るとされている.
# chmod 400 /etc/cram-md5.pwd

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";

より頻繁にこのデータベースを更新するために,以下を行う.

$ sudo -s
# whoami
root
# crantab -e
	Edit.
# crontab -l
50 8-20 * * *   /etc/cron.daily/imappwdbg

テスト

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

文献

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

smtp

最終更新:1999/10/16

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

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

tcpserver 導入

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

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

ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.84.tar.gz を取得.展開.

付属ドキュメントに従ってインストール.

% make
# make setup check

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 &

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

lrwxrwxrwx  1 root  root  19  S80tcpserver -> ../init.d/tcpserver

tcpserver 設定

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

# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
を実行./etc/tcp.smtp.cdb ができる.

tcpserver 起動スクリプト /etc/init.d/tcpserver の起動行に -x /etc/tcp.smtp.cdb を追加する. これは,データベースファイル /etc/tcp.smtp.cdb を参照させるための設定.

また,接続の記録を取るために,tcpserver 起動スクリプト /etc/init.d/tcpserver に -v オプションと,splogger への受け渡しを追加する.編集結果は以下となる.

/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.

blue を 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
	skyblue.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

接続制御データベースファイル /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 のプロダクツ.

pop, imap の受付も tcpserver に移す

inetd から呼び出されていた pop, imap の受付を tcpserver に移すには, /etc/inetd.conf の pop, imap の行をコメントアウトしたうえで, tcpserver 起動スクリプト /etc/init.d/tcpserver に以下を加えて,再起動する.
#  pop-3
/usr/local/bin/tcpserver -v -u 0 -g 0 0 pop-3 /var/qmail/bin/qmail-popup \
blue.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 &
ログは,以下のようになる.
Jul 28 01:00:25 blue pop3d: 933091225.430984 tcpserver: status: 1/40
Jul 28 01:00:25 blue pop3d: 933091225.431641 tcpserver: pid 2535 from 133.50.133.146
Jul 28 01:00:25 blue pop3d: 933091225.439887 tcpserver: ok 2535 blue.ep.sci.hokudai.ac.jp:133.87.45.26:110
	skyblue.sci.hokudai.ac.jp:133.87.52.40::2055
Jul 28 01:00:25 blue pop3d: 933091225.498577 tcpserver: end 2535 status 256
Jul 28 01:00:25 blue pop3d: 933091225.498914 tcpserver: status: 0/40

Jul 28 00:45:57 blue imapd: 933090357.824565 tcpserver: status: 1/40
Jul 28 00:45:57 blue imapd: 933090357.825841 tcpserver: pid 2394 from 133.50.133.134
Jul 28 00:45:57 blue imapd: 933090357.835252 tcpserver: ok 2394 blue.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 blue imapd: 933090417.606449 tcpserver: end 2394 status 0
Jul 28 00:46:57 blue imapd: 933090417.606574 tcpserver: status: 0/40

文献

  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/

ezmlm

最終更新:1999/9/8

ezmlm 導入

ftp://ftp.jp.qmail.org/ezmlm/ezmlm-0.53.tar.gz を取得,展開.

ezmlm-0.53/INSTALL に従って作業.

% cd ezmlm-0.53/
% make
% make man
% su
# make setup
/usr/local/bin/ezmlm/ 以下の ezmlm のコマンドバイナリ群にパスを通す. qmail のコマンドにパスを通したのに習って.

以下,テストを行う.

% ezmlm-make ~/testlist ~/.qmail-testlist kyoma-testlist ep.sci.hokudai.ac.jp
     メーリングリスト (ML) を作る.詳細は,ezmlm-make の man(日本語訳)を見よ.
% ezmlm-sub ~/testlist kyoma@ep.sci.hokudai.ac.jp
     ML 主催者によって手動で購読者を追加する.詳細は,ezmlm-sub の man(日本語訳)を見よ.
% echo subject:testing | qmail-inject kyoma-testlist@ep.sci.hokudai.ac.jp
     ML に投稿してみる.上で登録したアドレスにメールが届くか.
% qmail-inject kyoma-testlist-get.1@ep.sci.hokudai.ac.jp < /dev/null
     投稿アーカイブから記事を取り出すコマンドを試す.記事が送られてくるか.
     自動処理コマンドの詳細は http://www.jp.qmail.org/ezmlm/chart.html を見よ.
% qmail-inject kyoma-testlist-unsubscribe@ep.sci.hokudai.ac.jp < /dev/null
     ML 参加者による自動登録抹消を試す.確認メールが送られてくるので,その指示に従う.
     自動処理コマンドの詳細は http://www.jp.qmail.org/ezmlm/chart.html を見よ.
% ezmlm-list ~/testlist
     ML 登録アドレス一覧を見る.上で行った登録抹消が行われているか.
     詳細は,ezmlm-list の man(日本語訳)を見よ.

ezmlm-idx 導入

ftp://ftp.jp.qmail.org/ezmlm/ezmlm-idx-0.32.tar.gz を取得.展開.

ezmlm-idx-0.32/INSTALL.idx に従って作業.

% mv ezmlm-idx-0.32/* 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 は日本語の意.
以下,テストを行う.
% chmod 755 ezmlm-test
% su
# adduser eztest
# exit
% su eztest
$ cd ezmlm-0.53/
     新しくコンパイルした ezmlm-idx のコマンドバイナリ群にパスが通っているか確認.
$ ./ezmlm-test
     テストが実行される.
$ exit
MySQL を使わない場合は,以下を実行.使う場合には,異なる作業が要る.
% make std
% make
バイナリを /usr/local/bin/ezmlm/ にコピーする.手動でやっても良い.
% su
# make setup
再びテスト.
% su eztest
$ cd ezmlm-0.53/
     /usr/local/bin/ezmlm/ 以下のコマンドバイナリ群にパスが通っているか確認.
$ ./ezmlm-test
     テストが実行される.
$ exit

% su
# userdel eztest
# groupdel eztest
# rm -r ~eztest/

文献

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

MUA (Mail User Agent)

ドキュメント執筆:杉山耕一朗

 MUA を使えるようにする


○ im の設定
     im は mew の下側で用いられます.
     im は ~/.im が存在しない場合,/usr/lib/im/SiteConfig を見るので
     このファイルを編集します.
 
     # vi /usr/lib/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




○ mh の設定
     mh は mnews を始めとして多くの MUA で用いられています.
     mh は sendmail 用になっているので,
     qmail 用に設定をし直す必要があります.     
     実際には /usr/lib/mh/mtstailor を編集します.
     
     # cd /usr/lib/mh/mtstailor 
     # vi /usr/lib/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 は動くようになりました.