ページ更新: 2005-09-01 (木) (4887日前)

(2001-06-19作成)

postfix に drac (POP before SMTP) の設定を追加します。

環境は Debian GNU/Linux Woody + postfix 1.1.3-1 パッケージです。 (Debian GNU/Linux 3.0 「woody」リリース情報 によると, 2002-07-19 リリース / 2006-06 セキュリティアップデート終了)

目次

[編集]

dracのインストール #

(2001-06-19作成)

  • 2002-03-04 補足
    2002-03-04 時点では Debian Package に drac qpopper-drac があるので、'この作業は必要なくなりました。

POP before SMTP を使うために、drac を導入しました。
環境は Debian GNU/Linux woody + Postfix。

ソースコード drac.tar.Z は Dynamic Relay Authorization Control から入手できます。

[編集]

dracのコンパイル、インストール #

Makefile を Linux + Postfix にあわせて修正し、makeします。(修正内容は忘れた)

# make
# strip rpc.dracd  ★デバッグ情報を削除。特に必要はないが。

本体をインストールします。/usr/local/sbin/ にインストールされます。

# make install
# ls -alF /usr/local/sbin
total 20
drwxrwsr-x    2 root     staff        4096 May 12 18:01 ./
drwxrwsr-x    9 root     staff        4096 May 11 08:33 ../
-rwxr-xr-x    1 bin      bin         11932 May 12 18:01 rpc.dracd*

マニュアルもインストールします。/usr/local/man/ にインストールします

# mkdir /usr/local/man/man8
# mkdir /usr/local/man/man3
# make install-man
/usr/bin/install -c -m 0444 rpc.dracd.1m /usr/local/man/man8/rpc.dracd.8
/usr/bin/install -c -m 0444 dracauth.3 /usr/local/man/man3/dracauth.3
[編集]

起動スクリプト #

自動で起動するようにするため、/etc/init.d/ に、rpc.dracd を起動するためのスクリプトを用意します。

/etc/init.d/skeleton がスクリプトのサンプルなので、これをコピーして修正します。

start-stop-daemon で pidfile ができなかったのでstopができない。そこで、 stop/restart を killall $DAEMON に変更します。

# cd /etc/init.d
# cp skeleton drac

(お好きなエディタで起動スクリプト /etc/init.d/drac を修正します)

起動スクリプト drac を /etc/rc?.d/ に登録。update-rc.d コマンドを使って、Postfix と同じ優先順位 (20) で起動/終了するようにしました。 (この作業は動作確認が終わった後の方が無難でしょうが……)

# update-rc.d drac defaults 20
  Adding system startup for /etc/init.d/drac ...
   /etc/rc0.d/K20drac -> ../init.d/drac
   /etc/rc1.d/K20drac -> ../init.d/drac
   /etc/rc6.d/K20drac -> ../init.d/drac
   /etc/rc2.d/S20drac -> ../init.d/drac
   /etc/rc3.d/S20drac -> ../init.d/drac
   /etc/rc4.d/S20drac -> ../init.d/drac
   /etc/rc5.d/S20drac -> ../init.d/drac

#

/etc/mail/dracd.allow を作成します。今回は qpopper と同じホストなので、こんな感じ。

255.255.255.255 127.0.0.1

このホスト自身のIPも入れた方がよいかもしれませんが、これで動いたし。

なお、ポート sunrpc(111) を使っているので、いたずらされないようにipchainsなどでふさいでおきましょう。

準備が出来たら、dracを起動します。

# /etc/init.d/drac start

これで完了。動作確認は qpopper を修正してからになります。

[編集]

qpopperのdrac対応パッケージの作成 #

(2001-06-18作成)

  • 2002-03-04 補足
    現在は Debian Package に drac、qpopper-drac があるので、この作業は必要なくなりました。

qpopper 4.0.2-1 drac 対応版のパッケージを作って、インストールします。せっかくのDebianだし。 環境は Debian GNU/Linux woody です。

[編集]

Debianパッケージ作成の参考URI #

[編集]

手順 #

パッケージの作成や qpopperのコンパイルに必要なパッケージはあらかじめ用意しておきましょう。
(…記録取ってないので忘れました。Debianメンテナ入門を見てください)
また、この作業の前にdracをインストールして、dracのライブラリを使えるようにしておきましょう。

まずはソースコードの入手と展開。(/etc/apt/sources.list に deb-src を定義しておくこと)

# apt-get update
# apt-get source qpopper

debian/rules を修正してコンパイルスイッチをdrac対応にしときます。* の行を追加。
(ウチの環境では、drac のライブラリを /root/drac/src に置いてあります。)

                  --enable-log-login \
*                 --enable-drac \
*                 --with-drac=/root/drac/src \
                  --with-apopuid=mail \

パッケージのバージョンを修正します。名称は元にしたパッケージのバージョン+ .drac にしました。

# dch -v 4.0.2-1.drac
qpopper (4.0.2-1.drac) unstable; urgency=low

  * drac

 -- root <root@discypus.jp>  Mon, 18 Jun 2001 22:23:47 +0900

パッケージを作成。

# debuild -us -uc
dpkg-buildpackage: source package is qpopper
dpkg-buildpackage: source version is 4.0.2-1.drac
dpkg-buildpackage: source maintainer is root <root@discypus.jp>
dpkg-buildpackage: build architecture is i386
 debian/rules clean
                          : (略)
dpkg-deb: building package `qpopper' in `../qpopper_4.0.2-1.drac_i386.deb'.
 dpkg-genchanges
dpkg-genchanges: not including original source code in upload
dpkg-buildpackage: binary and diff upload (original source NOT included)
Now running lintian...
warning: lintian's authors do not recommend running it with root privileges!
Finished running lintian.

特にエラーができてなかったので、できたパッケージをインストール。

# dpkg -i qpopper_4.0.2-1.drac_i386.deb
Selecting previously deselected package qpopper.
(Reading database ... 25564 files and directories currently installed.)
Preparing to replace qpopper 4.0-2drac (using qpopper_4.0.2-1.drac_i386.deb) ...
Unpacking replacement qpopper ...
Setting up qpopper (4.0.2-1.drac) ...

動作確認。メールソフトで qpopper にアクセスしてから、dracのデータベースを調べて、更新されていることを確認します。
2002-09-21 補足: もし、db_dump でunsupported btree version number 8ってエラーが出るなら……stringsで代用してもよいかと。) 

# db_dump -p /etc/mail/dracd.db
format=print
type=btree
bt_minkey=2
db_pagesize=512
HEADER=END
192.168.1.3\00
992874024\00

dracd.db のパーミッションをかえておきます。

# chmod 600 /etc/mail/dracd.db

これで完了。最後に、qpopperをうっかりアップデートしないよう、dselect か dpkg で hold しておきます。

[編集]

postfixにdracの設定を行う。 #

  • 2002-03-04 補足
    現在は Debian Package に drac、qpopper-drac があるので、それに対応した書き方に変更しました。

drac と qpopper-drac をインストールしておきます。

# apt-get install drac qpopper-drac

dracとqpopper-dracの動作を確認しておきます。

# ps axw | grep dracd
  475 ?        S      0:00 /usr/sbin/rpc.dracd -i -e 30 /var/lib/drac/dracd.db
 1157 pts/1    S      0:00 grep dracd
(dracが動作中。動作してなかったら、/etc/init.d/drac start すること。)

メール受信動作をしてから、dracd.dbが更新されているかどうか確認する

# grep drac /var/log/mail.info
(略)
Sep 21 15:44:53 server in.qpopper[1179]: [drac]: login by hoge from 
host client.example.jp (192.168.1.2) [drac.c:47]
(qpopperとdracがちゃんと動いてる)

# ls -l /var/lib/drac/dracd.db
-rw-r--r--    1 root     root         1024 Sep 21 15:44 /var/lib/drac/dracd.db
(更新されている)

# strings /var/lib/drac/dracd.db
1032591292
192.168.1.2
(内容も合ってる。)

dracとqpopperがちゃんと動いていたら、次に、/etc/postfix/main.cf に次の内容を追加(あるいは既存の項目を修正)します。

smtpd_recipient_restrictions =
        permit_mynetworks
        check_client_access btree:/var/lib/drac/dracd
        check_relay_domains

main.cfの検査

# postfix check
# postconf -n
(追加した smtpd_recipient_restrictions がPostfixに認識されているかどうか確認する)

postfixの再起動

# /etc/init.d/postfix restart

ログファイルにエラーがあるかどうか確認します。

# tail /var/log/mail.err

dbmの種類が違うと、/var/log/mail.err に次のエラーが記録されます。

Sep 21 15:49:48 server postfix/smtpd[1528]: fatal: open database /var/lib/drac/dracd.db:
Invalid argument

この場合、main.cfのbtree: の部分を hash: にして試してみてください。……でダメなら、dracをソースからコンパイルして、dbmの種類をPostfixが使える物に変えてみてください。

エラーを解消したら、dracを止めてリレーができないこと、そしてdracを起動してリレーができることを確認して完了です。

[編集]

記事 #

[編集]

dracでTCPWrapperに対応したサービスをPOP before XXXX化する #

CodeZine:TCPWrapperに対応したサービスの「POP Before」化を実現する (2005-09-01)
http://codezine.jp/a/article.aspx?aid=155