qmail のディレクトリを作成する.
# mkdir /var/qmail
qmail ユーザ, グループを追加する.
# groupadd -g gid nofiles # adduser --system --ingroup nofiles --home /var/qmail/alias alias # adduser --system --ingroup nofiles --home /var/qmail qmaild # adduser --system --ingroup nofiles --home /var/qmail qmaill # adduser --system --ingroup nofiles --home /var/qmail qmailp # groupadd -g gid qmail # adduser --system --ingroup qmail --home /var/qmail qmailq # adduser --system --ingroup qmail --home /var/qmail qmailr # adduser --system --ingroup qmail --home /var/qmail qmails |
Slink 版では qmail関連グループはシステムインストール時にすでに存在して いた. しかし Potato 版では, qmail 関連のシステムユーザおよびグループユー ザはすべて存在しなくなったので追加する. これらはシステムユーザ・グルー プなので,グループユーザに関しては gid 100-999 の中で空いている番号を使う.システムユーザのuidに 関してはadduser に--systemオプションを付けることで 自動的にdebian policy に沿ったuidをつけてくれる(詳細は Debian Policy Manual - The Operating System). 特に 1000-29999 は gate-system が使用するので, 使わない. あらかじめ変更する.
ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz を取得. /usr/local/src/ 展 開する. できたディレクトリ(qmail-1.03/)に移って, コンパイル.
# tar xvfz qmail-1.03.tar.gz $ cd qmail-1.03 # make # make man # make setup # make check |
qmail 制御ファイルに設定を書き込む. 詳細は文献 2を見よ. 制御ファイルは /var/qmail/control/ 以下にあり, 制御ファイルの詳細は qmail-controlに記述されている.
まず, 自ホスト名を設定する.
# ./config
このスクリプトは, ホスト名を DNS 検索し, それぞれの制御ファイ ルへ以下の情報を書き込む.
/var/qmail/control/defaultdomain | ep.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 grey.ep.sci.hokudai.ac.jpその結果は以下のとおり.
/var/qmail/control/defaultdomain ep.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))で確認できる.使い方は以下.
$ /var/qmail/bin/qmail-showctl |
システムのアドレスを設定する.
# 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 '&epdns' > .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).
/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
/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
/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 でないと, メール配送時にエラーが出るらしい.
# 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 で確認.
自分に送ってみる. hoge は自分のユーザ名に変え, 以下のコマ ンドを実行する. ~kyoma/Mailbox にメールが送られることを確認.
$ echo to: hoge | /var/qmail/bin/qmail-inject
存在しない宛先に送ってみる. バウンスメールが~kyoma/Mailbox に送られてくるのなら OK.
$ echo to: nonexistent | /var/qmail/bin/qmail-inject
他のホスト上のアカウントへ送ってみる. 届いていれば OK. 届かなければ, /var/log/syslog を参照して原因を追求する.
% echo to: hoge@gfd-dennou-org | /var/qmail/bin/qmail-inject
文献 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 がメールを出すのに使うので, リンクを張るのを忘れないこと.
後に tcpserver をインストールするため, ここでの設定は最終的に反映されな い. しかし, メールサーバはたくさんのアプリケーションをインストールする ためインストールの設定が確かであるか一つずつ確かめた方が無難である. そのため, ここでは smtp 受信テストを行うための設定を行う.
/etc/inetd.conf に以下を一行で追加.
#:OTHER: Other services
# SMTP 2001-03-12smtp 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.
http://checkpw.sourceforge.net/checkpw/より,checkpw-1.00.tar.gz を取得, 展開. checkpw-0.80/INSTALL に従ってコンパイルする. 具体的には以下のコマンドを実行する.
# tar zxvf checkpw-1.00.tar.gz $ cd checkpw-1.00/ # make # su # make setup check |
/bin/checkapoppw ができる.
#: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-12pop-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 のプロセス番号
すでに ~/Mailbox へ配送するための環境変数は設定した. apop によるメールの読み出しは専攻サーバでは maildir 形式を用いる.
はじめに, 環境変数 MAILDIR を設定する. 環境変数の設定は ~/Mailbox への配送でも行ったが, bash は /etc/profile, csh は /etc/csh.cshrc に書き込む.
/etc/profile に次の 行を加える.
...
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/
次に配送テストのために一般ユーザで次の設定を行う.
$ /var/qmail/bin/maildirmake ~/Maildir
次に ~/Maildir への配送を qmail に指示する(.qmail へ配送先ディレクトリ を記述する).
$ echo ./Maildir/ > ~/.qmail $ chmod 600 ~/.qmail |
.qmail のパーミッションは, 600 か 644 でなければならない. 要は, 実行許 可が出ていないこと, オーナー以外に書き込みが許可されていないこと, が要 求される.
$ echo 'APOPPASSWORD' > ~/Maildir/.password $ chmod 600 ~/Maildir/.password |
この中身(ここでは, APOPPASSWORD)が, apop でメールを読むときの認証パ スワードとなる.
grey の外のホストから, apop 対応メーラー(例. eudora-J1.3.8.8r6 for Macintosh)を用いて, apop サーバを grey に指定して grey 上の自分のアカ ウントあてに届いたメールを読んでみる.
imap の最新版をとってくる.2002/11/1現在の最新版は,imap-2002.RC10. ftp://ftp.cac.washington.edu/imap/imap.tar.Z から取得する.
$ cd /usr/local/src # tar xzvf imap.tar.Z $ cd imap-2002.RC10 |
パスワード認証形式は CRAM-MD5 を使う. ./doc/md5.txt によると make 時に PASSWDTYPE=nul と与えれば, MD5 形式のパスワードを使うことが できるらしい. しかしnulを指定すると平文でのパスワードを受け付 けてくれなくなる. これではoutlook express ユーザーが接続できないので PASSWDTYPE=std でコンパイルすることにする.
なお,PASSWDTYPE がnul でもstd でも,ログインパスワード(/etc/passwd) でのimap ログインは出来ないことは確認している.
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=std SSLTYPE=none
次にコンパイルされた imapd をシステムに反映させるためしかるべき場所へ コピーする.
# cp imapd/imapd /usr/local/sbin/imapd
... ... 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 のプロセス番号.
imap でのメール読みだしは,~/Mailbox から行なわれる. ここでテストメール受信を行なうため,管理者自身のホーム ディレクトリの~/.qmail を編集する.
~/.qmail を編集. 以下の一行を加える.
./Mailboxメールが ~/Mailbox へ配送されるようになる.
./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
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 # # Morikawa Yasuhiro 2002.04.28 # # Kyoma TAKAHASHI 1999.7.9 # 1999.10.02 # Thanks for Toyoda's help. # # imappwdbg - imap 用パスワードファイル生成スクリプト # # ・ 概要 # # 一般ユーザの ~/Maildir/.password に記述されるパスワードを # /etc/cram-md5.pwd ファイルに列挙する. # # 利用するコマンド $chmodbin = '/bin/chmod'; $usershow = '/usr/local/bin/gate-user-show'; # 利用するファイル $imappwdb = '/etc/cram-md5.pwd'; $userpwfile = 'Maildir/.password'; # cram-md5.pwd に書き込みできるように # パーミッションを変更 system "$chmodbin 600 $imappwdb"; open(DBFILE,"> $imappwdb"); # cram-md5.pwd の始めにコメントを書き出す. print DBFILE '# CRAM-MD5 authentication database',"\n"; print DBFILE '# Entries are in form',"\n"; print DBFILE '# Lines starting with "#" are comments',"\n"; print DBFILE "\n"; while (($user,$passwd,$uid,$gid,$quota,$comm,$gcos,$dir) = getpwent) { # # 一般ユーザの .password のみ参照する # if ( $uid >= 1000 && $uid <= 29999 ) { open(PWFILE,"< $dir/$userpwfile"); $pass = ''; $pass = $_ while( ); chop($pass); close(PWFILE); if($pass ne '') { # # gate-user-show を利用して, 個人ユーザか # グループユーザか判別する # unless (-x $usershow) { die "imappwdbg require $usershow\.\n" ."Please install gate-toroku-system\.\n"; } open (GATEUS,"$usershow $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); # cram-md5.pwd を書き込み不可にしておく system "$chmodbin 400 $imappwdb";
# chmod 755 /etc/cron.daily/imappwdbg |
より頻繁にこのデータベースを更新するために cron を用いる. 具体的な作業は以下の通り.
$ sudo -s # whoami root # crontab -e |
50 8-20 * * * /etc/cron.daily/imappwdbg
grey の外のホストから, imap 対応メーラー(例. Netscape Communicator 4 for Macintosh)を用いて, imap サーバを grey に指定して, grey 上の自分 のアカウントあてに届いたメールを読んでみる.
パソコンのメールソフトを使ってメールを利用するユーザは多いと考えられる ことから, mail が smtp 要求を受けるべきは, 1) mail にあるアカウント宛 に届くメール, 2) 地惑内のホスト(サブドメイン取得後なら, *.ep.sci.hokudai.ac.jp か)からの送られてきたメール, であろう.
qmail の FAQ 5.4「特定のクライアントにだけリレーとして使わせたい」(文献 1)に従って作業を行う. この FAQ では, tcpserver を使うやり方と, tcp-wrappers を使うやり方の二つが述べられて いる. tcpserver の導入によって, 同時に多くの smtp 要求を受け付けられ, 接続の記録が取れるようになる(文献 2)という利点 から, tcpserver を使うことにする.
文献 2に従って, qmail-smtpd の呼び出しを inetd から tcpserver に移す.
su になって, /etc/inetd.conf 中の smtp の行をコメントアウト (行頭に # を付す)して, inetd に HUP を送る . これによって, qmail-smtpd が inetd から呼び出されなくなる.
tcpserver は ucspi-tcp ツール群のひとつの機能である. ucspi-tcp ツール群のうち tcpserver は入ってくる TCP 接続を受け付けるプログラムである. http://tools.qmail.jp/ucspi-tcp/ucspi-tcp-0.88.tar.gz を取得. 展開する. 続いて付属ドキュメントに従ってコンパイルする.
$ cd /usr/local/src # tar xvfz ucspi-tcp-0.88.tar.gz # cd uscpi-tcp-0.88 # 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 &
# 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 も同様) |
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 への受け 渡しが記述されている.
grey を reboot する. tcpserver の起動を確認する.
先ほど /etc/tcp.smtp に書いた IP アドレス(ここでは, 133.87.52.40)を 持つパソコンから, メーラー(例. eudora-J1.3.8.8r6)を使って, smtp サー バを grey に設定し, grey 以外の任意のホストにあるアカウント宛のメール を発信してみる.
/var/log/syslog に残るログは, 以下のようなものとなる事を確認する.
Jul 8 18:06:15 grey smtpd: 931424775.300370 tcpserver: status: 1/40
Jul 8 18:06:15 grey smtpd: 931424775.301735 tcpserver: pid 185 from 133.50.133.146
Jul 8 18:06:15 grey smtpd: 931424775.326543 tcpserver: ok 185 grey.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 grey smtpd: 931424775.862705 tcpserver: end 185 status 0
Jul 8 18:06:15 grey smtpd: 931424775.863054 tcpserver: status: 0/40
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);
# chmod 755 /usr/local/sbin/list-2-tcp |
/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 |
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 xxxx -g yyyy 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
http://cr.yp.to/software/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/を追加するだけ).
メーリングリスト(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://mlm.qmail.jp/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
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 |
$ which crontab /usr/bin/crontab |
MySQL(解説は http://www.mysql.com/. もしくは日本語マニュ アル) を使うか否かを決定. ここでは, 使わないこととして, 先に進む. 使う場合には, この段階でやるべき作業がある.
% make clean % make; make man % make jp |
最後の行は使用言語を選ぶものである. jp は日本語を意味する. これによって, 自動管理要請に ezmlm が応えてユーザに送る文言 (詳細) が日本語になる.
ユーザ eztest を作って, ezmlm-idx のコマンドバイナリ群が実行できるか確 かめる(ezmlm-testコマンド). ezmlm-test を実行する前に ezmlm-idx のコ マンドバイナリ群にパスが通っているかを確認されたい.
$ chmod 755 ezmlm-test $ su # adduser eztest # exit $ su eztest $ cd ezmlm-0.53/ $ ./ezmlm-test $ exit |
ここで su eztest と行ったが sudo コマンドを用いると環境変数$HOME が デフォルトではログインしたユーザとなったままなので正しく実行されない.
MySQL を使わない場合は, 以下を実行する(使う場合には, 異なる作業が要る).
$ make std $ make |
以下を実行して, ezmlm-idx のコマンドバイナリを /usr/local/bin/ezmlm/ 以下にコピーする.
$ su # make setup |
ezmlm-test を実行する. 実行する前に /usr/local/bin/ezmlm/ 以下のコマンドバイナリ群にパスが通っているか確認 する.
% su eztest $ cd ezmlm-0.53/ $ ./ezmlm-test $ exit % su # userdel eztest # groupdel eztest # rm -r ~eztest/ |
以下よりパッケージ取得。
http://packages.debian.or.jp/stable-jp/news/index.html.ja
dpkg でインストール。
# dpkg -i mnews_1.22DebianJP-1.deb\
最終更新日: 2003/01/09(島沢竜平) | Copyright © 2001 epcore |