mod_db_allow

apache の標準モジュールである、mod_access をベースとして、Berkley DB の DB によるアクセス制限をできるようにしてみました。
…といっても、実際には /etc/mail/access.db をターゲットとしていて、 watcher2 で sendmail.cf との格闘を避ける方法 のようにして pop before smtp を運用しているようなケースを想定して作っています。

コンパイル

ここ からソースを取ってきて、

apxs -ldb -c mod_db_allow.c
apxs -i mod_db_allow.so

で、コンパイル&インストールができます。 ただ、apxs -i は期待通りの動作をしないこともあるので、その場合は mod_db_allow.so を apache のモジュールディレクトリにコピーしてください。

設定方法

実際に使うには、apache へのモジュールの登録が必要となります。httpd.conf などに、

LoadModule db_allow_module  modules/mod_db_allow.so
AddModule  mod_db_allow.c

という設定を追加し(パスは調整のこと)、リスタートできればインストール完了です。

アクセス制御をさせるには、<Directory><Location> ブロック中で、

AllowDB /etc/mail/access.db RELAY

というように指定します。実際には、Allow/Deny を連携させて、

Order allow,deny
Allow from all
AllowDB /etc/mail/access.db RELAY

と指定することになります。(mod_access とは独立してアクセス制限の判断をするため、このような冗長な設定が必要になるのだと思う)

終わりに

必要最低限の機能しか実装していないので、どの程度実用に耐えるのかはわかりませんが、ホームページにも pop before な設定ができるため、各種設定ページやパスワード変更ページなどに利用すると以外に便利です。

内部の処理は、さほど複雑なことはしていませんので、他のシステムへの流用もそれほど難しくは無いのではないかな…と思います。 今回は、allow 側のみの実装なので、deny 側の実装にチャレンジして、みませんか?(で、できたらパッチを送ってくださいな)


Presented by Kazuhiko Iwama.