DRACによるPop Before SMTPの導入

以前Pop Before SMTPの導入について検証しました。
参考までに手順を記載しておきます。(というか自分への覚書)

環境はRedhat ES3.0?+Postfix+qpopper。
既にPostfixとqpopperは設定済み、正常動作を行えていることを前提としています。

1. dracの入手
下記URLの「Obtaining the Source」よりdracを入手します。
http://mail.cc.umanitoba.ca/drac/

2. dracの展開
任意のディレクトリにdrac.tar.Zを置いて展開します。

# cd /tmp
# mkdir drac
# mv drac.tar.Z drac
# tar zvxf drac.tar.Z

3. Makefile等の編集
元のdracのMakefileはUNIXベース用となっています。RedhatなどのLinuxベースに
置き換えるにはMakefileの下記部分をviなどで編集します。

INSTALL = install
EBIN = /usr/local/sbin
MAN = /usr/local/man/man
DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C
CC = gcc
RANLIB = :
CFLAGS = $(DEFS) -g
LDLIBS = -ldb
TSTLIBS = -L. -ldrac
RPCGENFLAGS = -C -I
MANLIB = 3
MANADM = 8

rpc.dracd.cも下記部分を編集します。(postfixの場合)デフォルトではsendmailに対応しているようです。

#define DBFILE “/etc/postfix/dracd.db”
#define ALFILE “/etc/postfix/dracd.allow”

4. コンパイルの実行
makeコマンドにてMakefileからコンパイルします。

[root@www drac]# make
gcc -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C -g -c -o dracauth.o dracauth.c
rm -f libdrac.a
ar cq libdrac.a dracauth.o drac_xdr.o drac_clnt.o
: libdrac.a
gcc -o testing testing.o -L. -ldrac
gcc -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C -g -c -o rpc.dracd.o rpc.dracd.c
gcc -o rpc.dracd rpc.dracd.o drac_xdr.o drac_svc.o -ldb

5. インストールの実行
make installコマンドにてdracのインストールを実行します。

[root@www drac]# make install
install -c -o bin -g bin -m 0755 rpc.dracd /usr/local/sbin

インストール完了後、/usr/local/sbin に rpc.dracd が作れれます。

6. ライブラリファイルのコピー
dracのライブラリファイルを /usr/lib にコピーします。

[root@www drac]# cp libdrac.a /usr/lib

7. 起動スクリプトの作成
dracの起動スクリプトを作成します。テンプレートがdracの解凍ファイルの中にありますので、それを流用。

[root@www drac]# cp dracd-setup.linux /etc/rc.d/init.d/dracd

その後、スクリプト内容を下記のように一部変更します。

—————————————–
#!/bin/sh –
# Put this file into /etc/rc.d/init.d/dracd
# and link it intot he run levels you want to use it
# by doing “ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc./S99dracd”
#
# dracd-setup

# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case “$1” in
start)
echo -n “Starting rpc.dracd daemon: “
daemon /usr/local/sbin/rpc.dracd -i -e 10&
echo
touch /var/lock/subsys/rpc.dracd
;;
stop)
echo -n “Stopping rpc.dracd daemon: “
killproc rpc.dracd
echo
rm -f /var/lock/subsys/rpc.dracd
;;
*)
echo “Usage: dracd {start|stop}”
exit 1
esac

exit 0
—————————————–

init.d の下に起動スクリプトを作成したら、そこから起動させるランレベルに
応じてシンボリックリンクを作成します。下記例では2345。
[root@www init.d]# ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc2.d/S99dracd
[root@www init.d]# ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc3.d/S99dracd
[root@www init.d]# ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc4.d/S99dracd
[root@www init.d]# ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc5.d/S99dracd

8. portmapの起動
dracはportmapを使いますので、portmapを起動しておきます。

[root@www drac]# service portmap start
[root@www drac]# chkconfig –level 2345 portmap on
[root@www drac]# chkconfig –list portmap
portmap 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ

9. qpopperの再コンパイル&インストール
dracより先にqpopperを導入している場合、qpopperは再インストール&再コンパイルが必要になります。

まずコンパイル。
[root@www qpopper4.0.8]# ./configure –enable-drac –enable-specialauth
[root@www qpopper4.0.8]# make

次にインストール。
[root@www qpopper4.0.8]# make install

ディレクトリが無いとかどうのこうのというエラーが出力されたらとりあえずそのディレクトリを作成してみてください。

10. dracの起動
起動スクリプトを使ってdracを起動してみます。

[root@www init.d]# /etc/rc.d/init.d/dracd start
Starting rpc.dracd daemon:
[root@www init.d]# [ OK ]

11. Postfixの設定
Postfixとdracが連携するようPostfixのmain.cfを編集します。

main.cf をバックアップ
[root@www postfix]#cp /etc/postfix/main.cf /etc/postfix/main.cf.XXXXXX
[root@www postfix]#cp /etc/postfix/main.cf /etc/postfix/main.cf.new

main.cf.newを編集(ここからが連携の設定です)
下記をmain.cf.newに追記してください。
(mynetworksに check_client~を追記)
(ネットワークアドレスは環境に合わせて設定してください)

mynetworks = 127.0.0.0/8, XXX.XXX.XXX.XXX check_client_access btree:/etc/postfix/
dracd

postfixのサービスを停止して、main.cf.newをmain.cfに上書きします。

# service postfix stop
# cp main.cf.new main.cf
# service postfix start

以上で設定は終了です。

仕組みとしては、POP認証をかけたときに /etc/postfix/dracd.db に対してPOP認証をかけたクライアントのIPが記録されます。(上記設定では10分間:間隔は起動スクリプト(つうかオプション)にて指定)
dracd.db に記録されたIPを持つクライアントからは送信を許可します。

ちなみにBarkley DBのtypeがbtreeかhashかで設定が異なりますので、ご注意下さい。