以下に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してインストールします。
INSTALL = install EBIN = /usr/local/sbin MAN = /usr/local/man/man DEFS = -DSOCK_RPC -DFLOCK_LOCK -DGETHOST -DDASH_C CC = cc RANLIB = ranlib CFLAGS = $(DEFS) -g LDLIBS = TSTLIBS = -L. -ldrac RPCGENFLAGS = -I -C MANLIB = 3 MANADM = 8さらにここで出来上がったlibdrac.aを /usr/libにコピーします。
$ make; # make install # make install-man
# 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に登録します。
$ configure $ makesendmail.cfの作成
次に以下のようにCF-3.7wpl1 を使ってsendmail.cfを作ります。 まずdefファイルを作ります。 例(ariake.def)このファイルを作ったあとで、
#sendmail.def for kitakyu-techno-ctr.co.jp CF_TYPE=R8V8 OS_TYPE=bsd4.4 MY_DOMAIN='kitakyu-techno-ctr.co.jp' OFFIICIAL_NAME='ariake.kitakyu-techno-ctr.co.jp' FROM_ADDRESS='$m' ACCEPT_ADDRS='ariake.kitakyu-techno-ctr.co.jp' MAIL_RELAY_RESTRICTION=yes LOCAL_HOST_IPADDR='192.168.1'を実行してariake.cfを作ります。これに以下の>>の部分を追加します。 先頭の部分に以下の内容を追加する
$ make ariake.cfさらに以下の内容を追加してください。
# level 8 config file format V8/Berkeley >># dynamic relay authorization control map >>Kdrac btree /etc/mail/dracd"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にアクセスできる。
# dracd.allow: clients trusted by rpc.dracd # # The format of this file is one of more lines of # # netmask netaddr # Both netmask and netaddr must be dotted quads. # 255.255.255.0 192.168.1.0 255.255.255.255 127.0.0.1プログラムの起動
portmapが動いていなければあらかじめ起動しておく必要があります。 そして,rpc.dracdを起動してください。さらにsendmail.cfを書き直したので killしてsendmail -bd -q30m のように再起動してください。動作確認
$ telnet ariake smtp