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

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