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


  1. qmail
  2. apop
  3. imap
  4. smtp
  5. ezmlm
  6. MUA

[1-A] qmail インストール

[1.1]デフォルトでインストールされている exim4 をアンインストール

[1.1.1]exim4 関連のパッケージを削除

# apt-get remove --purge exim4 exim4-base exim4-configenter

[1.1.2]exim 関連のディレクトリ, ファイルを削除

# rm -r /etc/eximenter
# rm /etc/cron.weekly/eximenter

[1.2]ucspi-tcp, qmail をインストール

# apt-get install qmail-src ucspi-tcp-srcenter
# build-ucspi-tcpenter
# build-qmailenter

[1.3]apt-get で依存関係を再チェック

# apt-get -f installenter
# apt-get updateenter
# apt-get upgradeenter

[1.4]qmail 起動

# /etc/init.d/qmail startenter
# ps aux | grep qmailenter で確認

[1.5]周辺パッケージインストール

# apt-get install mailutilsenter

参考: Debianでqmailをパッケージからインストールする。〜Debian関係

[1-B] qmail 設定

[1.6]現在の設定を確認

注: 以下の作業が本当に必要であるかは自信がないです。

[1.6.1]qmail のディレクトリがあることを確認

    $ ls /var/qmail

[1.6.2]nofile グループ内のユーザ ID の確認

    # id alias
    # id qmaild
    # id qmaill
    # id qmailp

qmail ユーザ/グループはシステムユーザ/グループであるが,
システムユーザの uid は adduser に--systemオプションを付けることで
自動的に debian policy に沿ったuidをつけてくれる.
グループユーザに関しては gid 100-999 の中で空いている番号を使う.
(詳細は Debian Policy Manual - The Operating System)
特に 1000-29999 は gate-system が使用するので,使わない.あらかじめ変更する.

[1.6.3]ユーザの削除

      # deluser alias
      # deluser qmaild
      # deluser qmaill
      # deluser qmailp

[1.6.4]nofiles グループを再追加

      # groupadd -g 110 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

[1.6.5]qmail グループの ID の確認

      # grep qmail /etc/group

[1.6.6]qmail グループの ID の変更

      $ groupmod -g 109 qmail

[1.6.7]qmail グループ内のユーザの削除

      # deluser qmailq
      # deluser qmailr
      # deluser qmails

[1.6.8]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

[1.7]各種設定

[1.7.0]制御ファイルの確認

制御ファイルに以下の内容が記述されていることを確認

  /var/qmail/control/defaultdomain      ep.sci.hokudai.ac.jp
  /var/qmail/control/locals             localhost
                                        usuzumi.ep.sci.hokudai.ac.jp
  /var/qmail/control/me                 usuzumi.ep.sci.hokudai.ac.jp
  /var/qmail/control/plusdomain         ac.jp
  /var/qmail/control/rcpthosts          localhost
                                        usuzumi.ep.sci.hokudai.ac.jp
      $ lv /var/qmail/control/defaultdomain
      $ lv /var/qmail/control/locals
      $ lv /var/qmail/control/me
      $ lv /var/qmail/control/plusdomain
      $ lv /var/qmail/control/rcpthosts

[1.7.1]制御ファイルに追記

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 に書かれる情報は"ローカル処理すべきドメイン名"である.

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

# 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

それぞれのファイルには最終的に以下のように書き込まれていればよい.

/var/qmail/control/databytes
10000000
/var/qmail/control/defaultdomain
ep.sci.hokudai.ac.jp
/var/qmail/control/defaulthost
ep.sci.hokudai.ac.jp
/var/qmail/control/locals
localhost

usuzumi.ep.sci.hokudai.ac.jp

ep.sci.hokudai.ac.jp
/var/qmail/control/me
usuzumi.ep.sci.hokudai.ac.jp
/var/qmail/control/plusdomain
ac.jp
/var/qmail/control/queuelifetime
259200
/var/qmail/control/rcpthosts
localhost

usuzumi.ep.sci.hokudai.ac.jp

ep.sci.hokudai.ac.jp

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

$ /var/qmail/bin/qmail-showctl
./config でエラー出力される場合

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

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

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

/var/qmail/control/defaultdomain
ep.sci.hokudai.ac.jp
/var/qmail/control/locals
usuzumi.ep.sci.hokudai.ac.jp
/var/qmail/control/me
usuzumi.ep.sci.hokudai.ac.jp
/var/qmail/control/plusdomain
ac.jp
/var/qmail/control/rcpthosts
usuzumi.ep.sci.hokudai.ac.jp

当然この場合も先のように各 control ファイルに必要なものを書き込んでおく.

[1.7.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 '&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) .

[1.7.3]パスを通す

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

      if [ "`id -u`" -eq 0 ]; then
        PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:
              /sbin:/bin"
      else
        PATH="/usr/local/bin:/usr/bin:/bin:/usr/games:/var/qmail/bin"
      fi

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.7.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.7.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.8]qmail 起動 => [1.4] で行ったので不要?

# 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
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.9]テスト

注: この作業前に [2.2.2.2], [2.2.2.3] の ~/Maildir の作成と .qmail の編集が必要かもしれません.

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

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

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

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

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

存在しない宛先に送ってみる. バウンスメールが~hoge/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.10] sendmail の「置き換え」

文献 4, 5に従う.

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

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

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

また,cron から呼び出される処理も無効にする.
/etc/cron.daily/exim4-base の先頭の方に次の行を書き足す.
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.11] smtp(仮)

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

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

#:OTHER: Other services
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.12]文献

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

2. apop

[2.1] 取得・コンパイル

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

# tar zxvf checkpw-1.02.tar.gz
$ cd checkpw-1.02/
# make
# 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
 
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 によるメールの読み出しは EP サーバでは 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 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] テスト

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

[2.4]文献

  1. http://checkpw.sourceforge.net/checkpw/
  2. http://www.y-min.or.jp/~nob/qmail/qmail-pop3d.html

3. imap

[3.1]取得・展開

imap の最新版をとってくる.2009/10/20 現在の最新版は,imap-2007e.
ftp://ftp.cac.washington.edu/imap/imap.tar.Z から取得する.

$ cd /usr/local/src
# tar xzvf imap.tar.Z
$ cd imap-2007e

[3.2] コンパイル

パスワード認証形式は CRAM-MD5 を使う. ./doc/md5.txt によると make 時に PASSWDTYPE=nul と
与えれば,MD5 形式のパスワードを使うことができるらしい.
しかし nul を指定すると平文でのパスワードを受け付けてくれなくなる.
これではoutlook express ユーザーが接続できないので PASSWDTYPE=std でコンパイルすることにする.

# make slx PASSWDTYPE=std SSLTYPE=none

なお,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. ...

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

# cp imapd/imapd /usr/local/sbin/imapd

[3.3] 設定と imap の起動

[3.3.1]inetd からの呼び出し

/etc/services に imap2 ポートがあることを確認する.

......
netbios-ssn139/udp
imap2   143/tcp# Interim Mail Access P 2 and 4
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
imap2 stream tcp nowait root /usr/local/sbin/imapd imapd

inetd に HUP を送る.

# kill -HUP xxxx

xxxx は inetd のプロセス番号.

[3.3.2] メールの配送

imap でのメール読みだしは ~/Mailbox から行なわれる.
ここでテストメール受信を行なうため,管理者自身のホームディレクトリの ~/.qmail を編集する.

~/.qmail を編集. 以下の一行を加える.

./Mailbox

メールが ~/Mailbox へ配送されるようになる.

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

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

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

以下のコマンドでユーザ名とパスワードを確認
# cat -A /etc/cram-md5.pwd

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

mondo4^Ixxxxxxxx$

root 以外読み込めないようにする

# 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 を生成するスクリプト imappwdbg を書いた.
これを root 権限で定期的に実行すれば(遅れはあるものの)/etc/cram-md5.pwd が更新される.

imappwdbg

パーミッションを755にするのを忘れないこと!
(前回の構築作業では追加したスクリプトに対して実行許可を与えるのを忘れてエラーが出ることが多かった)
注: 実行許可を与えると, 先程書き加えた mondo のパスワードは毎時 50 分に /etc/cram-md5.pwd から消えてしまい, メーラーによる閲覧ができなくなる. そのため, 今後のテストメールの際には, 毎回 /etc/cram-md5.pwd を手動で書き換えるなどの対応を行うこと.

# chmod 755 /etc/cron.daily/imappwdbg

より頻繁にこのデータベースを更新するために cron を用いる.root で以下作業を行う.

# crontab -e

以下のように編集する.

50 * * * * /etc/cron.daily/imappwdbg

[3.5] テスト

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

[3.6]文献

  1. http://www.washington.edu/imap/

[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 の停止

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

[4.1.2]tcpserver のインストール

tcpserver は ucspi-tcp ツール群のひとつの機能である.
ucspi-tcp ツール群のうち tcpserver は入ってくる TCP 接続を受け付けるプログラムである.ucspi-tcp パッケージは ucspi-tcp-src によってパッケージ化されているので, まず uscpi-tcp-src をインストールする.

# apt-get install ucspi-tcp-src
# build-ucspi-tcp

途中でいくつか質問をされるが, デフォルトで進む.

[4.1.3]tcpserver の起動

qmaild の UID, nofiles の GID を確認する.

$ id qmaild

以下を実行する.

# 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/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/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 起動確認

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

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

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

Mar 6 10:28:29 usuzumi smtpd: 1141608509.874210 tcpserver: status: 1/40
Mar 6 10:28:29 usuzumi smtpd: 1141608509.874295 tcpserver: pid 1896 from 133.87.45.145
Mar 6 10:28:55 usuzumi smtpd: 1141608535.898609 tcpserver: ok 1896 usuzumi.ep.sci.hokudai.ac.jp:133.50.160.52:2
Mar 6 10:28:55 usuzumi smtpd: 1141608535.952798 tcpserver: end 1896 status 0
Mar 6 10:28:55 usuzumi smtpd: 1141608535.952857 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 への実行許可を忘れずに.

list-2-tcp
# chmod 755 /usr/local/sbin/list-2-tcp

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

tcp_smtp_cdb

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 の行を加えて (pop, imap 共に一行で)再起動する.

tcpserver
# reboot

ログは以下のようになる.

Jul 28 01:00:25 usuzumi pop3d: 933091225.430984 tcpserver: status: 1/40
Jul 28 01:00:25 usuzumi pop3d: 933091225.431641 tcpserver: pid 2535 from 133.50.133.146
Jul 28 01:00:25 usuzumi pop3d: 933091225.439887 tcpserver: ok 2535 usuzumi.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 usuzumi pop3d: 933091225.498577 tcpserver: end 2535 status 256
Jul 28 01:00:25 usuzumi pop3d: 933091225.498914 tcpserver: status: 0/40
Jul 28 00:45:57 usuzumi imapd: 933090357.824565 tcpserver: status: 1/40
Jul 28 00:45:57 usuzumi imapd: 933090357.825841 tcpserver: pid 2394 from 133.50.133.134
Jul 28 00:45:57 usuzumi imapd: 933090357.835252 tcpserver: ok 2394 usuzumi.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 usuzumi imapd: 933090417.606449 tcpserver: end 2394 status 0
Jul 28 00:46:57 usuzumi imapd: 933090417.606574 tcpserver: status: 0/40

[4.6] 文献

  1. http://man.qmail.jp/faq/faq5.html#5.4.
  2. http://man.qmail.jp/faq/faq5.html#5.1.

5. ezmlm

[5.1] ezmlm 導入

ftp://ftp.ep.sci.hokudai.ac.jp/pub/mail/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

もし auto-str エラー とでたら, error.h の
extern int errno; を
#include <errno.h> に書き換える.
ezmlm-manage.o エラー もしくは
ezmlm-return.o エラー とでたら,
ezmlm-manage.c あるいは ezmlm-return.c の先頭に #include "log.h" を書き込む.

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

・/etc/profile
   PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/var/qmail/bin:/usr/local/bin/ezmlm"
・/etc/csh.cshrc
   setenv PATH /usr/local/bin:/usr/bin:/bin:/var/qmail/bin:/usr/local/bin/ezmlm
$ echo $PATH として変更されていなかったら再起動する.

[5.1.1] テスト

メーリングリスト(ML)を作成する. ここで, testlist はメーリングリスト名, username は自分のアカウント名.

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

次に作成した ML に ML 主催者が手動で購読者を追加する.

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

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

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

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

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

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

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

登録を抹消できたかどうかの確認は ML 登録アドレス一覧を見る.

$ ezmlm-list ~/testlist

5.2 ezmlm-idx 導入

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

http://www.ezmlm.org/archive/0.40/ezmlm-idx-0.40.tar.gz
を取得,展開する. ezmlm-idx-0.40/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] コンパイル

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

# make std
# make

ここで, ezmlm-sub と ezmlm-unsub のエラーが出た場合は ezmlm-sub.c と ezmlm-unsub.c に #include "log.h" という記述を加える

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

$ su
# make setup

[5.2.3] テスト

ユーザ eztest を作って ezmlm-idx のコマンドバイナリ群が実行できるか確かめる (ezmlm-testコマンド).

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

ここで su eztest と行ったが sudo コマンドを用いる場合はデフォルトでは環境変数 $HOME が
ログインしたユーザとなったままとなり正しく実行されないので -H オプションをつけて実行する.

[5.2.4] テスト 2

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://mlm.qmail.jp/ezmlm/
  2. http://mlm.qmail.jp/idx/

6 MUA (Mail User Agent)の設定

MUA を使えるようにする

[6.1] mnews のインストール

mnews は etch では apt することができない. よって potato 用の deb パッケージを持ってきて手動でインストールする.
以下よりパッケージ取得.

http://www.ep.sci.hokudai.ac.jp/~epmail/y2010/dvlop/basic/mnews_1.22DebianJP-1.deb

dpkg でインストール.

# dpkg -i mnews_1.22DebianJP-1.deb



最終更新日:2010/11/11 (山田 圭祐) Copyright © 2010 epcore