▼ [Apache] Apache 1.3 + mod_access_rbl
メールサーバでは接続元のIPアドレスを元に接続を拒否するため、DNSBL (またはRBL) と呼ばれるブラックリストの仕組みが利用されている。
あるIPアドレスがDNSBLに載っているかどうかの調査は、以下の文字列を連結したホスト名の存在をチェックすることで可能となる。
- DNSの逆引きの場合と同様にIPアドレスの順番を入れ替えたもの
- DNSBL のドメイン名
たとえば dnsbl.example.com でサービスする DNSBL でIPアドレス 192.168.1.2 がリストされているかを調べるには、 2.1.168.192.dnsbl.example.com というホスト名の存在を確認すればよい。
なお、このホストに対応するIPアドレスはループバックアドレスである 127.0.0.1 が利用されることが多いが、各ビットの on/off によって意味を持たせているDNSBLも存在する。また、TXT RR には接続拒否時に出力するためのメッセージ (たとえば、"South Korea rejected" など) が設定されていることも多い。
これらのDNSBLをHTTPでも利用するための Apache 1.3 用モジュールが mod_access_rbl として存在したが、現在配布サイトが消滅しているため、入手不可となっている。(Apache 2.x 用は同様のものが複数存在するようだ。)
幸いにも 2.x 用のモジュールを 1.3 へ移植したものを発見したので、今回はこれを利用することにする: Peak Xoops - mod_access_rbl
# cd /usr/ports/www/apache13-modssl/work/apache_1.3.37/src/modules/standard # patch < /path/to/mod_access.patch # make mod_access.so # cp mod_access.so /usr/local/libexec/apache/ # /usr/local/etc/rc.d/apache.sh restart
まだ試してはいないが、httpd.conf に以下の設定をすればこれを活用することが出来るはず。(dnsbl.example.com は実在しないので適当なものに置き換える必要がある。)
<Files *.cgi>
<Limit POST>
Order allow,deny
Allow from all
Deny via dnsbl.example.com
</Limit>
</Files>
▼ [Apache] Mod_rewriteの罠
罠1. Mod_rewriteのRewriteCondは、その後に出現する最初のRewriteRuleのみに適用される。という罠に引っかかった。以下のような記載をした場合、1番目はGETのみに限定することが出来るが、2番目のルールはすべてのメソッドに対して適用されてしまう。
RewriteCond %REQUEST_METHOD ^GET$ RewriteRule ^/diary/adiary.cgi$ /diary/ [R=301,L] RewriteRule ^/diary/adiary.cgi/+([0-9].*)?$ /diary/$1 [R=301,L]
2番目もGETのみに制限するためには、以下の通りに記載するべきである。
RewriteCond %REQUEST_METHOD ^GET$ RewriteRule ^/diary/adiary.cgi$ /diary/ [R=301,L] RewriteCond %REQUEST_METHOD ^GET$ RewriteRule ^/diary/adiary.cgi/+([0-9].*)?$ /diary/$1 [R=301,L]
罠2. Mod_rewrite と Alias, ScriptAlias, Redirect などを併用するためには、[PT] フラグを指定する必要がある。Mod_rewrite で出来る処理であれば、それだけで完結させる方が良いかもしれない。
▼ [日記] adiaryをインストールしてみた
某氏から「技術メモはMixi外に出せ」と言われたので、日記・Blogソフトウェアを調査。色々検討した結果、adiary を試してみることにした。採用理由は以下の通り:
- Perlで書かれている (自分で修正可能)
- mod_perl対応
- 表示が綺麗
- 独自記法 (Hatena, Wiki) を使わない
MovebleTypeも考えたが、システムがかなり大掛かりでいじるのが面倒である点、mod_perlに完全に対応しない点に不満があったため、今回は採用せず。
