[Memo2008][EPA]tako作業メモ(納多)(080723)
qmail
qmail に新たに qmail-realrcptto パッチを適用するため, qmail の再インストールを行う
qmail-realrcptto パッチの解説
qmail-realrcptto パッチ は, あて先が有効であるかを確認する機能を qmail に付加するパッチである.
これを適用することにより, 存在しないアドレスへのメール (SPAM など) を拒否することができ, サーバへの無用な負荷を避けることができる. (参考: http://ya.maya.st/mail/lwq.html#smtp-reject )
qmail の再インストール
# cd /usr/local/src
念のため, tar.gz ファイルの展開からやり直すことにする.
# rm -r qmail-1.03 # tar zxfv qmail-1.03.tar.gz # cd qmail-1.03
パッチを当てていく.
# patch -p1 < ../qmail-1.03-realrcptto-2006.12.10.patch patching file Makefile patching file qmail-qmtpd.c patching file qmail-smtpd.c patching file realrcptto.c # patch -p1 < ../qmail-date-localtime.patch patching file date822fmt.c # patch -p0 < ../qmail-glibc.patch patching file error.h patching file dns.c patching file cdb_seek.c # patch -p0 < ../qmail-local.patch patching file qmail-local.c
再インストールのためサービスを停止する.
# /etc/init.d/qmail stop
インストールを行う.
# make # make man # make setup ./install install: fatal: unable to write .../bin/splogger: text busy make: *** [setup] Error 111
tcpserver が停止していなかったため上書きできなかったようだ.
# /etc/init.d/tcpserver stop # make check
OK. サービスを再開する.
# /etc/init.d/qmail start # /etc/init.d/tcpserver start
宛先の有効性をチェックしたくない場合
宛先の有効性をチェックしたくない場合には
# echo '#' > /var/qmail/alias/.qmail-default
とすればよい.
動作テスト
外部から存在しないアドレス, 例えば hoge_at_tako.epa.scitec.kobe-u.ac.jp にメールを送る.
tako:/var/log/mail.log に受信した内容が追記されていた.
今度は宛先の有効性をチェックしないでみる.
# echo '#' > /var/qmail/alias/.qmail-default
再び, 外部から存在しないアドレスにメールを送る. アドレスが存在しないことを伝えるエラーメールが帰ってきた. tako:/var/log/mail.log には何も追記されていない.
設定を元に戻す.
# rm /var/qmail/alias/.qmail-default
みたび, 外部から存在しないアドレスにメールを送る. 最初のように, tako:/var/log/mail.log にメールを受信した内容が追記されていた.
qpopper
qpopper は APOP をサポートする POP3 サーバである.
qpopper のインストール
最新版である qpopper 4.0.13 をインストールする.
# cd /usr/local/src # wget ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper4.0.13.tar.gz # tar zxfv qpopper4.0.13.tar.gz # cd qpopper4.0.13
ビルドの前に, qpopper を動作させるためのユーザ pop を作成する.
# adduser --system --ingroup mail --no-create-home --shell /bin/false --disabled-password --home /nonexistent pop Warning: The home dir you specified does not exist. Adding system user `pop' (UID 117) ... Adding new user `pop' (UID 117) with group `mail' ... Not creating home directory `/nonexistent'. # vipw
上の行を下の行にする ('Post Office Owner' と追記しただけ)
pop:x:117:8::/nonexistent:/bin/false pop:x:117:8:Post Office Owner:/nonexistent:/bin/false
ちなみに, ユーザ ID とグループ ID は システムによって順に割り振られていくので, いつも上記のようになるとは限らない.
ビルド
以下のコマンドを打つ.
# ./configure \ --prefix=/usr/local/qpopper \ # インストール場所 --enable-apop=/usr/local/qpopper/pop.auth \ # APOP の設定ファイルの場所 --enable-popuid=pop \ # qpopper を動作させるユーザ --enable-shy \ # qpopper のバージョン番号を隠蔽 --enable-nonauth-file=/usr/local/qpopper/popusers \ # 接続拒否ユーザを書いたリストの場所 --without-pam \ # POP3 に PAM による認証を行わない --with-gdbm # データベースの取り扱いに GDBM を使う
configure の設定オプションについては ./configure --help コマンドで参照できる.
APOP のみにするため, popper/Makefile を編集する. OS_DEFS の行を以下のように変更する.
OS_DEFS = -DLINUX -DUNIX -DAPOP_ONLY
make する.
$ make (略) pop_user.c: In function 'pop_user': pop_user.c:149: error: 'DBM' undeclared (first use in this function) pop_user.c:149: error: (Each undeclared identifier is reported only once pop_user.c:149: error: for each function it appears in.) pop_user.c:149: error: 'db' undeclared (first use in this function) pop_user.c:153: error: 'datum' undeclared (first use in this function) pop_user.c:153: error: expected ';' before 'key' pop_user.c:332: error: 'key' undeclared (first use in this function) pop_user.c:345: error: 'value' undeclared (first use in this function) make: *** [pop_user.o] Error 1
DBM が宣言されていない, ということは, gdbm が怪しい.
# apt-get install gdbm
gdbm なるパッケージはないようだ. debian のパッケージ検索をしてみると, libgdbm-dev なるものがあるようだ.
# apt-get install libgdbm-dev
configure をやり直す.
# make
今度はエラーなく完了.
2007 年度の構築ドキュメントにおける, バージョン 4.0.9 のインストールでは, 「qpopper の Makefile はディレクトリの作成を行ってくれないため, 自前で箱は用意した後に make install する.」 とあるが, 何もせず
# make install
と実行しても普通に /usr/local/qpopper ディレクトリ以下は作られていた (構築ドキュメントの修正は既に完了).
しかし, 以下のメッセージが現れた.
(略) Installed popper as /usr/local/qpopper/sbin/popper /bin/sh: line 1: @/usr/bin/install: No such file or directory /bin/sh: line 3: @echo: command not found /bin/sh: line 5: /usr/local/qpopper/sbin/popauth: No such file or directory /bin/sh: line 6: @echo: command not found make[1]: *** [install] Error 127 make[1]: Leaving directory `/usr/local/src/qpopper4.0.13/popper' make: *** [install] Error 2
/usr/local/qpopper/sbin/popper の存在は確認したが, /usr/local/qpopper/sbin/popauth は見つからない.
popper/Makefile より, 関係がありそうなところを以下に引用する:
(略) install: popper ${pop_auth} @if [ ! -d ${installdir} ]; then \ mkdir -m 0755 ${installdir}; \ chown root:wheel ${installdir}; \ fi @${INSTALL} -s -m 0755 -o root popper ${installdir}/popper @echo "Installed popper as ${installdir}/popper" @if [ "x${poppassd}" != "x" ]; then \ cd ${password_dir} && ${MAKE} install ;\ fi @if [ "x${pop_auth}" != "x" ]; then \ @${INSTALL} -s -m 4755 -o ${apop_uid} -g 0 ${pop_auth} \ ${installdir}/${pop_auth}; \ @echo "Installed popauth as ${installdir}/${pop_auth} " \ "with uid ${apop_uid}"; \ ${installdir}/${pop_auth} -init -safe; \ @echo "Initialized popauth database"; \ fi (略)
上に引用したものの後半部において, '@' がなぜかコマンドの一部と解釈されてしまっているようだ.
# cp popper/Makefile popper/Makefile.org
上に引用したものの後半部において, '@' を消去してみる.
# make install
前にエラーが出た箇所は以下のように出力された.
Installed popper as /usr/local/qpopper/sbin/popper if [ "xpopauth" != "x" ]; then \ /usr/bin/install -c -s -m 4755 -o pop -g 0 popauth \ /usr/local/qpopper/sbin/popauth; \ echo "Installed popauth as /usr/local/qpopper/sbin/popauth " \ "with uid pop"; \ /usr/local/qpopper/sbin/popauth -init -safe; \ echo "Initialized popauth database"; \ fi Installed popauth as /usr/local/qpopper/sbin/popauth with uid pop Initialized popauth database make[1]: Leaving directory `/usr/local/src/qpopper4.0.13/popper'
コマンドが陽に表示されたが, うまく実行されたようだ. /usr/local/qpopper/sbin/popauth の存在も確認.
inetd に登録を行う.
# vi /etc/inetd.conf
以下の行を追加する.
pop3 stream tcp nowait root /usr/lcoal/qpopper/sbin/popper popper -s
inetd を再起動する.
# /etc/init.d/openbsd-inetd restart
パスの設定
インストールした qpopper の実行ファイル群, マニュアル群へパスを通す.
実行ファイルへのパスの設定
[EPA]パスの設定 の <一般ユーザ用コマンドのパス> に /usr/local/qpopper/sbin を追加する. (大抵, sbin はシステム用コマンドがインストールされる場所であるが, 一般ユーザが使用する pop_auth もインストールされているため, 一般ユーザ用コマンドのパスとして登録する).
マニュアルへのパスの設定
/etc/manpath.config に以下の行を追加する. 詳しくは [EPA]パスの設定#man 関連のパスの設定 を参照のこと.
MANDATORY_MANPATH /usr/local/qpopper/man MANPATH_MAP /usr/local/qpopper/sbin /usr/local/qpopper/man MANDB_MAP /usr/local/qpopper/man /usr/local/qpopper/man
popauth の使い方の例
APOP を使うようにする.
$ popauth または # popauth -u (ユーザ名)
登録しているユーザ全員を表示する
# popauth -list ALL
ユーザ testuser を削除する
# popauth -delete testuser
動作確認
ユーザ chikuwa1 で qpopper による APOP の動作確認を行う まず APOP で使用するパスワードを設定する.
$ popauth Changing only APOP password for mondo1. New password: (パスワードを入力) Retype new password: (パスワードを入力) $ sudo -s # mail chikuwa1 Subject: test of APOP test [Enter] [Ctrl + D] Cc: [Enter]
ユーザ chikuwa1 になると,
You have new mail in /home/chikuwa1/Mailbox
というメッセージが現れた. メールがメールスプール /home/chikuwa1/Mailbox にあることを確認.
最後に, APOP 対応のメーラーからメールを受け取れるか確認する.
メーラーからのログインには成功するが, Mailbox のメッセージが 手元に来ない. 設定を確認する必要あり.
Keyword(s):
References:[[EPA2008]2008年度前期サーバ構築ログ] [[Memo2008][EPA]tako作業メモ(納多)(080424)] [[Memo2008][EPA]tako作業メモ(納多)(080724)]