mod_access_rbl for Apache2
English instruction.
Apache で dnsbl を使ったアクセス制御をするモジュールとして mod_access_rbl というのがあるです。これ、apache 1.3.x でしか動かんので、2.x で動くようにしてみたです。といっても、オリジナルの Apache1.3 の mod_access.c と mod_acccess_rbl.c の差分を Apache2 に適用しただけなんで、わかる人なら3分でできる作業でしょう。おれは C がわからんので数時間かかったけど。
使い方。httpd-2.0.xx/modules/aaa/mod_access.c に
このパッチを当ててから configure && make && sudo make install するか、
% apxs -c mod_access.c
# apxs -i -n mod_access .libs/mod_access.so
とすると、dnsbl 検索機能つきの mod_access がインストールされるです。RBL 機能のないオリジナルの mod_access.so を上書きします。これで httpd.conf や .htaccess に
<Files hoge.html>
# 第三者不正利用可能なプロキシサーバからのアクセスを排除
deny via http.dnsbl.sorbs.net
# 中国、韓国からのアクセスを排除
deny via cn-kr.blackholes.us
</Files>
のように書けるようになるです。公開されている dnsbl はたとえば
ここを参照。
mod_dnsbl_lookup なるものもあるようです。こちらは IPv6 アドレスの DNSBL 検索にも対応している模様。mod_access_rbl は IPv4 しか対応してません。
重要な注意点。
- 移植をしたのは C の読み書きができない人間です。一見動いているように見えますが、どんな不具合があるかわかりません。
- Apache1.3 用の mod_access_rbl を何も考えずに Apache2 で動くようにしただけです。つまり、IPv6 に対応してません。IPv6 でアクセスされるとおかしな DNS 問い合わせが発生するので、v6 ready なサイトではぜったいに使わないように。localhost やリンクローカルアドレスからのアクセスでも DNS 問い合わせは発生するので、グローバルな IPv6 アドレスがなくても使ってはいけません。具体的には、127.0.0.1 からアクセスされた場合には 1.0.0.127.rbl.database を DNS に問い合わせますが、::1 からアクセスされた場合には ::1.rbl.database を問い合わせてしまいます。v6 アドレスのあるホストでは Listen ディレクティブで v4 アドレスのみバインドするように設定変更してください。
- メールサーバでは dnsbl の利用が広くおこなわれていますが、これに比べて、Web サーバはアクセスが多く、そのため、このパッチを使った場合の DNS 問い合わせはかなり多くなります。データベースの管理者に迷惑にならないよう、ほどほどの利用に留めましょう。このパッチ自体では問い合わせ結果をキャッシュしません。できれば キャッシュ DNS を手元に用意すべきでしょう。数万ヒット/日を越えるようなサーバならば、外部のデータベースではなく、自前でブラックリストを運用すべきでしょう。あるいは、<Files> などのディレクティブを使って、ほんとに RBL によるアクセス制限が必要なリソースだけに適用を絞りましょう。
- メンテされていないブラックリストは有害です。データベースとして指定するサイトの選択は慎重に。
- dnsbl がどんなものか、どんなしくみかわからない人には無用の長物です。無理して使うことはありません。
- I am not Tsukamoto-san:-)
やまや