以下にFreeBSD上でdracを使った pop before smtp を実現します。 環境
- FreeBSD 3.
- DRAC 1.10
- qpopper 3.0.1
dracの入手
まず http://mail.cc.umanitoba.ca/drac/からdrac.tar.Zを入手します。dracのインストール
を実行してパッケージを展開します。それからMakefileを以下のように 編集してください。
tar zxvf drac.tar.Z 編集したら以下のようにしてmakeしてインストールします。
さらにここで出来上がったlibdrac.aを /usr/libにコピーします。
# cp libdrac.a /usr/lib qpopperへのパッチ当て
で展開したあとで、qpopper3.0.1/popper/pop_pass.cを以下ように編集します。
$ tar zxvf qpopper3.0.1.tar.Z の下に以下の内容を追加する
/* * Initialize the last-message-accessed number */ p->last_msg = 0;さらに popper/Makefile.inに
{ char *err; if (dracauth("localhost", inet_addr(p->ipaddr), &err) != 0) /* pop_log(p,POP_PRIORITY,err); */ pop_log (p,POP_PRIORITY,"",0,err); }のように -ldracを追加してください。
LIBS = @NETWORK_LIBS@ @KERBEROS_LIBS@ @DBM_LIBS@ @LIBS@ -ldrac この後qpopper3.0.1/のディレクトリで
出来上がった popperを/etc/inetd.confに登録します。
sendmail.cfの作成
次に以下のようにCF-3.7wpl1 を使ってsendmail.cfを作ります。 まずdefファイルを作ります。 例(ariake.def)このファイルを作ったあとで、
を実行してariake.cfを作ります。これに以下の>>の部分を追加します。 先頭の部分に以下の内容を追加する
さらに以下の内容を追加してください。
"client address check..."の部分は2カ所あるので注意してください。 ここで挿入する部分のR$*とかR$+の後はtabを入れなければなりません。
# client address check -- accept messages from hosts within allowed domain R$={RoamIP}$* $| $* $| $* $| $* $@ $>Check_rcpt_roam $4 $| $5 R$* $| $*$={RoamDom} $| $* $| $* $@ $>Check_rcpt_roam $4 $| $5 R$={LocalIP}$* $| $* $| $* $| $* $@ $>Check_rcpt_inside $4 $| $5 R$* $| $*$={LocalDom} $| $* $| $* $@ $>Check_rcpt_inside $4 $| $5 R$={ClientIP}$* $| $* $| $* $| $* $@ $>Check_rcpt_inside $4 $| $5 R$* $| $*$={ClientDom} $| $* $| $* $@ $>Check_rcpt_inside $4 $| $5 R$* $| $* $| $* $| $* $: $>Check_rcpt_local $3 $| $4 remove client info R$@ OK destination is local >># allow recent POP/IMAP mail clients to relay >>R$* $: $&{client_addr} >>R$+ $: $(drac $1 $: ? $) >>R? $@ $#error $@ 5.7.1 $: 553 Relay operation rejected >>R$+ $@ $#OK R$* $@ $>Check_rcpt_outside $1 必要なディレクトリとファイルの作成
/etc/mailというディレクトリが存在しなければ作成する/etc/mail/dracd.allowを以下のように作る
ここで記述したホストからはあらかじめpopサーバと接続していなくても smtpにアクセスできる。
プログラムの起動
portmapが動いていなければあらかじめ起動しておく必要があります。 そして,rpc.dracdを起動してください。さらにsendmail.cfを書き直したので killしてsendmail -bd -q30m のように再起動してください。動作確認