ネットワークサーバの構築のページに戻る

dracによるpop before smtpの構築

以下にFreeBSD上でdracを使った pop before smtp を実現します。 環境

dracの入手

まず http://mail.cc.umanitoba.ca/drac/からdrac.tar.Zを入手します。

dracのインストール

tar zxvf drac.tar.Z
を実行してパッケージを展開します。それからMakefileを以下のように 編集してください。
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
編集したら以下のようにしてmakeしてインストールします。
$ make;
# make install
# make install-man
さらにここで出来上がったlibdrac.aを /usr/libにコピーします。
# cp libdrac.a /usr/lib

qpopperへのパッチ当て

$ tar zxvf qpopper3.0.1.tar.Z
で展開したあとで、qpopper3.0.1/popper/pop_pass.cを以下ように編集します。
   /*
     * Initialize the last-message-accessed number
     */
    p->last_msg = 0;
の下に以下の内容を追加する
    {
      char *err;
      if (dracauth("localhost", inet_addr(p->ipaddr), &err) != 0)
        /*        pop_log(p,POP_PRIORITY,err); */
        pop_log (p,POP_PRIORITY,"",0,err);
    }
さらに popper/Makefile.inに
LIBS = @NETWORK_LIBS@ @KERBEROS_LIBS@ @DBM_LIBS@ @LIBS@ -ldrac
のように -ldracを追加してください。

この後qpopper3.0.1/のディレクトリで
$ configure
$ make
出来上がった popperを/etc/inetd.confに登録します。

sendmail.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'
このファイルを作ったあとで、
$ make ariake.cf
を実行してariake.cfを作ります。これに以下の>>の部分を追加します。 先頭の部分に以下の内容を追加する
# level 8 config file format
V8/Berkeley
>># dynamic relay authorization control map
>>Kdrac btree /etc/mail/dracd
さらに以下の内容を追加してください。
# 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
"client address check..."の部分は2カ所あるので注意してください。 ここで挿入する部分のR$*とかR$+の後はtabを入れなければなりません。

必要なディレクトリとファイルの作成

/etc/mailというディレクトリが存在しなければ作成する

/etc/mail/dracd.allowを以下のように作る
# 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
ここで記述したホストからはあらかじめpopサーバと接続していなくても smtpにアクセスできる。

プログラムの起動

portmapが動いていなければあらかじめ起動しておく必要があります。 そして,rpc.dracdを起動してください。さらにsendmail.cfを書き直したので killしてsendmail -bd -q30m のように再起動してください。

動作確認

$ telnet ariake smtp