trap.cgi - CGI から BlockCIDR を呼び出すプログラム
RewriteCond おかしなアクセスを検知する条件1 [OR]
RewriteCond おかしなアクセスを検知する条件2 [OR]
:
RewriteCond おかしなアクセスを検知する条件n
RewriteRule ^.*$ http://example.com/path/to/trap.cgi [R=301,L]
trap.cgi は BlockCIDR を呼び出す CGI プログラムです。
trap.cgi , BlockCIDR.pm , BlockCIDR.pm の設定ファイルを適当なディレクトリに配置してください。
BlockCIDR.pm はできれば perl のインクルードパスが通っている所(/usr/local/lib/site_perlなど)に配置してください。
perl の標準のインクルードパスを調べるには perl -e 'use no-module;' という感じで存在しないモジュールを use してみて、エラーメッセージを見れば確認できます。
trap.cgi と BlockCIDR.pm の設定ファイルはどこでもいいですが、同じディレクトリに配置した方が分かりやすいと思います。 trap.cgi には実行権限を与えてください。(chmod +x trap.cgi)
設定ファイルで BlockCIDR の設定を行ってください。 詳細は BlockCIDR のドキュメントを参照してください。 Linux と iptables を利用するサンプルとして config-trapcgi.sample を用意していますので参考にしてください。
設定ファイルの script で指定した位置にパケットフィルタルール追加用のスクリプトを配置し、実行権限を与えてください。(chmod +x firewall_script) Linux と iptables を利用するサンプルとして firewall_script.sample を用意していますので参考にしてください。
trap.cgi を以下のように修正してください。
BlockCIDR.pm を perl の標準インクルードパス以外の場所に配置した場合は、
1行目に BlockCIDR.pm を配置したディレクトリの情報を追加します。
例えば /usr/local/etc に配置した場合は以下のようにします。
#! /usr/bin/perl -I/usr/local/etc
$config_file に設定ファイルのフルパスを指定してください。
必要に応じて、CGI 実行後に出力される HTML コードを修正してください。 デフォルトでは Access denied. とのみ出力するようになっています。
以下、firewall_script.sample を利用していることを前提に、 動作確認の手順を説明します。
trap.cgi を配置したディレクトリに移動し、root 権限で以下のように実行してみます。
su (CGIを実行するユーザ) -c "env REMOTE_ADDR=適当なIPアドレス ./trap.cgi"
問題がなければ HTML コードが出力されます。
問題がある場合はメッセージが表示されるので、それを元に設定や環境を修正し、 何も表示されなくなるようにしてください。
firewall_script の先頭の E=echo を E="/usr/bin/logger --" に変更します。
(loggerのフルパスは確認してください)
通常 CGI は root 以外の権限で動作しますので、root 権限で script_file を実行するための設定をしてください。 sudo を利用する場合は以下の設定が必要です。
script_format の先頭に /usr/bin/sudo 等と sudo のフルパスを追加してください。
/etc/sudoersに以下のような設定を追加してください。 (www-dataは自分の環境に合わせてください)
www-data ALL = (root) NOPASSWD: /path/to/firewall_script
HTTP 経由で trap.cgi にアクセスを行い、
IPアドレス情報が trap.cgi に渡されて処理されることを確認してください。
パケットフィルタにルールを挿入するコマンド列が syslog に記録されていること。
file で指定したファイルにルールが追加されていること。
ここまで確認できたら firewall_script の「E=」の行をコメントアウトし、
実際にパケットフィルタのルールが挿入されるようにします。
Apache の設定に RewriteRule などのルールを追加し、
条件にマッチしたアクセスがあった場合に trap.cgi に誘導するようにします。
apachectl configtest などで Apache の設定が正しいことを確認し、 apachectl graceful などで設定を反映させます。
HIRAMOTO Kouji (http://flatray.com/)
あったら報告していただけると嬉しいです。
著作権は主張します。
Copyright 2007, HIRAMOTO Kouji. All Rights Reserved.
再配布や、コードやアルゴリズムなどの流用などは自由に行っていただいて構いませんし、特に連絡もいりません。 (でも連絡をいただけると多分喜びます :-)
しかし、丸々パクって自分の著作であると主張したりというような 恥ずかしい行為だけはご遠慮ください。
このプログラムは無保証です。 これを使用した如何なる結果についても当方では保証しませんし、責任を持ちません。