BlockCIDR - アドレス範囲に対してパケットフィルタを行うライブラリ
use BlockCIDR; $block_cidr = BlockCIDR->new($config_file); $block_cidr->check($remote_addr);
BlockCIDR は、指定されたIPアドレスを含むアドレス範囲を whois で調べ、そのアドレス範囲からの接続を拒否するようパケットフィルタ(Linuxのiptablesなど)にルールを追加します。 また後日そのルールを再利用できるよう、ファイルへもルールを書き出します。
Webサイト(掲示板など)へのspam投稿目的のアクセスや、spam送信目的のSMTP接続を検出した場合、それ以降の接続をTCPレベルで拒否することを目的としています。
新しい BlockCIDR オブジェクトを作成します。 config_file は設定ファイルを指定します。
IPアドレス IP-ADDRESS が設定による判断の結果制限対象であった場合、パケットフィルタのルール挿入および書き出しを行います。
設定は設定ファイルで行います。
設定ファイルの書式は「keyword = value」という形式です。
value 内では $keyword という形式で他の設定値を利用することも可能です。
perl モジュール Net::Whois::Raw を使用する場合は「module」とします。 外部の whois プログラムを使用する場合は、whois プログラムのフルパスを指定します。
パケットフィルタに拒否ルールを追加するスクリプトのフルパスを指定します。
拒否ルールを記録するファイルのフルパスを指定します。
ロックファイルのフルパスを指定します。
拒否するプロトコルのタイプをtcpかudpで指定します。
拒否する送信先ポート番号を指定します。
script で指定したスクリプトを実行する書式を指定します。
ここに _IPADDRESS_ という文字列を書くと接続元の IPアドレスに置換されます。
file で指定したファイルに書き出されるルールの書式を指定します。
ここに _IPADDRESS_ という文字列を書くと接続元の IPアドレスに置換されます。
制限の対象外にする国コードを空白区切りで列挙します。
(例: JP US)
なお接続元がプライベートIPアドレスなどで国コードが取得できない場合は、制限の対象にはしません。
制限の対象外にするドメインを空白区切りで列挙します。
(例: google.com googlebot.com yahoo.com yahoo.co.jp)
ブロックするアドレス範囲の上限を設定します。
whois の情報から得たアドレス範囲が広すぎて不必要にブロックしてしまうのを防ぐために設定します。
24ぐらいが適当だと思われます。
ブロックするアドレス範囲の上限を国単位で設定します。
書式は「国コード/ネットマスク」を空白区切りで列挙します。
(例: JP/32 US/24)
この設定は default_netmask よりも優先されます。
/32を指定すると、そのアドレスのみが制限対象になります。
国内からのアクセスに対しては JP/32 と指定してそのアドレスのみを制限した方が無難かと思われます。
default_netmask による制限を適用しない国コードを空白区切りで列挙します。
(例: CN KR RU)
spam目的のアクセスしかこないと判断した国を列挙してください。
以下のモジュールが必要です。 OS のパッケージがある場合はそれを利用しても構いません。 パッケージがない場合は CPAN からインストールしてください。
Debian GNU/Linux でパッケージが提供されているもの
Config::File (libconfig-file-perl)
List::Compare (liblist-compare-perl)
Net::CIDR (libnet-cidr-perl)
Net::Whois::Raw (libnet-whois-raw-perl)
Debian GNU/Linux でパッケージが提供されていないもの
Class::Std::Utils
Geo::IP
HIRAMOTO Kouji (http://flatray.com/)
あったら報告していただけると嬉しいです。
著作権は主張します。
Copyright 2007, HIRAMOTO Kouji. All Rights Reserved.
BlockCIDR.pm自体の再配布
他のプログラムやCGI等に組み込んでの配布
コードやアルゴリズムなどの流用
などは自由に行っていただいて構いませんし、特に連絡もいりません。 (でも連絡をいただけると多分喜びます :-)
しかし、丸々パクって自分の著作であると主張したりというような 恥ずかしい行為だけはご遠慮ください。
このプログラムは無保証です。 これを使用した如何なる結果についても当方では保証しませんし、責任を持ちません。