2004年09月20日
POP before SMTP
三連休中ゴルフは1ラウンドだけで、結局練習はなし・・・うーん根性なしw
以前公開サーバーを立ち上げたその初日に、メールサーバーを大量のSPAMの中継の餌食にされ、
それ以降不正中継されるのが嫌で、/etc/mail/のaccessをまるでdocomoのドメイン指定受信のように
超単純かつ大胆に編集しまくって運用して来たものの、今後SMTP-AUTHかPOP before SMTP を採用したくても、
Linux歴1ヶ月では、壁はあまりに厚くFedora Core2を再インストールすること5回、
Fedora Core1にいたっては14,5回のインストールを繰り返し、やっと POP before SMTPを完成させました。
前回FC1を薦めたのは、FC2よりはインストール時間がはるかにかからないためで、
FC2は4枚のCDを忙しく入れ替える必要があるのが大きな理由の一つで、
ハウツー本では最小のインストールを薦めていますが、現実的にはファイルをソースからダウンロードして
Berkeley DBを使ってgccでコンパイルして自分で理想的環境を作ってインストールするなんてのは
現実的にはビギナーにはほとんど絶望的で、初めからFCをフルインストールしてしまえば特殊な目的を除けば、
そこそこの理想的開発環境が知らずのうちに出来てしまうフルインストールを選択したほうが時間をかけても
結局まだましな気がします。
今までMTA(Message Transfer Agent)はトップシェアを誇りながら評判の悪いsendmailを使ってきたけど、
そもそも性格的に高性能の流行物に弱いのでqmailかpostfixに変えたくて qmailはsendmailと
互換性がなくてハードルが高そうだったので今回はパスしました。
やっとの思いで、postfix+drac+qpopperで20時間以上もかけてPOP before SMTPを完成させたのに人間は現金なもので、
完成してしまえば、MAILER-DAEMONのメッセージからして妙にソフトで洗練されているのが気に入らなくて、
sendmailのに無愛想な味気なさが良く思えてきて、結局今のところはsendmail+drac+qpopperで運用しておいて、
次はひそかにqmailに挑戦しようと思っています。
Fedora Core1を使ったsendmail+drac+qpopperでのPOP before SMTPインストール・ノートです。(FC2,FC3でも動作確認済)
1.DRACのインストール
# cd /usr/local/src
# mkdir drac
# cd drac DRACのゲット
# wget ftp://ftp.cc.umanitoba.ca/src/drac.tar.Z 展開
# tar xvzf drac.tar.Z
展開後のMakefileの修正
# vi Makefile
viエディターで以下の部分を修正
INSTALL = install
DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C
CC = gcc
CFLAGS = $(DEFS) -g
LDLIBS = -ldb
RPCGENFLAGS = -C -I
MANADM = 8
※注意ググルと DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C -DREQ_HASH という記述が多いですが、
-DREQ_HASHを追加するとhash形式になるので省いています。
Makeします。
# make
# make install
# mkdir /usr/local/man
# mkdir /usr/local/man/man3
# mkdir /usr/local/man/man8
# make install-man
# cp libdrac.a /usr/local/lib
dracd-setup.linuxを編集して起動スクリプトを作ります。
# vi /usr/local/src/dracd-setup.linux
daemon rpc.dracd& を削除して daemon /usr/local/sbin/rpc.dracd -i -e 5 & ※(-e 5は5分の意味です。未記入で30分)
killproc rpc.dracd を削除して killproc /usr/local/sbin/rpc.dracd
スクリプトをinit.dにコピーしてランレベルを変更します。
# cp dracd-setup.linux /etc/rc.d/init.d/dracd
# ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc0.d/S99dracd
# ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc3.d/S99dracd
# ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc6.d/S99dracd
/etc/mailにdracd.allow-sampleファイルを作成します。
# vi dracd.allow-sample ファイル名がなければ作りますか?と聞いてくるので、はいを選択
255.255.255.255 127.0.0.1 と記述しローカルだけ許可し/etc/mailに保存。
DRACを起動します。
# /etc/rc.d/init.d/dracd start
ntsysvでportmapの起動を確認してない場合は
# /etc/init.d/portmap start
drac.dbのパーミッションを変更します。
# chmod 600 /etc/mail/dracd.db 以上でDRACの設定が完了です。
2.qpopperのインストール
qpopperのゲット
# wget ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper4.0.5.tar.gz
展開
# tar xvzf qpopper4.0.5.tar.gz
自動的にqpopper4.0.5というディレクトリができます。
# cd qpopper4.0.5
# ./configure --enable-drac --enable-specialauth
# make
# make install
qpopperをxinetdから起動するための起動スクリプトを作成します。
# cd /etc/xinetd.d/
# vi popper
service pop3
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/popper
log_on_success += HOST DURATION
log_on_failure += HOST
}
qpopperを起動します。
# /etc/rc.d/init.d/xinetd restart
以上でqpopperの設定が完了です。
3.Sendmailの変更
ここからが裏技です。通常直接sendmail.cfを編集しますが、正直どこに書いていいか分かりませんでした。
それでsendmail.mcを使いファイルを開きます。
# vi /etc/mail/sendmail.mc 最下行に以下の部分を追加してください。
LOCAL_CONFIG
#dynamic relay authorization control map
Kdrac btree /etc/mail/dracd
LOCAL_RULESETS SLocal_check_rcpt
#allow recent POP/IMAP mail clients to relay
R$*<タブキー>$: $&{client_addr}
R$+<タブキー>$: $(drac $1 $: ? $)
R? <タブキー>$@ ?
R$+<タブキー>$@ $#OK
※絶対に<タブキー>で均等なスペースを空けてください。
<無変換>と<変換>の間のスペースキーを使うと無効になります。
sendmail.cfを再構築します。
# cd /etc/mail/ # m4 sendmail.mc > sendmail.cf
変更してあれば/etc/mail/accessファイルをもとに戻します。
# vi /etc/mail/access 下のようにaccessではローカルだけの中継のみにします。
localhost.localdomain RELAY
localhost RELAY 127.0.0.1 RELAY
# makemap -v hash access.db < access
sendmailを再起動すれば出来上がりです。
# /etc/rc.d/init.d/sendmail restart
現在DRACに登録された内容を確認する方法
# strings /etc/mail/dracd.db
若しくは
# db_dump -p /etc/mail/dracd.db
dracのログをリセットする方法
# rpc.dracd -i
トラックバックURL
この記事へのコメント
sendmail を停止中: [ OK ]
sm-client を停止中: [ OK ]
sendmail を起動中: 554 5.0.0 /etc/mail/sendmail.cf: line 1660: unknown configuration line "
SLocal_check_rcpt"
[失敗]
sm-client を起動中: [ OK ]
FedoraCore5に対して手順通りに行った所、このような結果になりました。

