CIDRを算出するスクリプトを作ってみた。
LINUX, Perl 4月 24th. 2007, 8:22pmIPアドレスとネットマスクからCIDRを算出するスクリプトを作ってみました。
いったい何のために???というのも、まだ試してはいないのですが、Postfixのsmtpd_client_restrictions部分にcidr_tableを導入してみようかと思ったのです。
国内のIPの場合はsmtpd_client_restrictions部分では無条件にOKにしてその他は従来のスパムフィルターを通すといった試みをしてみようかと思ったわけです。
で、作成したのがコレです。
↑には6つのスクリプトが入っています。
getApnicipv4.plはApnicに登録されている各国毎のIPを拾ってきます。
> perl getApnicipv4 jp > apnicJp.lst
のように実行すると日本のIP一覧をwgetしてきてapnicJp.lstに標準出力します。
中国のIP一覧なら
> perl getApnicipv4 cn > apnicCn.lst
といった感じ。
getJpnicipv4.plはJPNICが管理しているIP一覧を取ってきます。
> perl getJpnicipv4.pl > jpnic.lst
といった感じ。
で、makeCidr.plが↑で取ってきたIP一覧からCIDRを生成するスクリプト。
> perl makeCidr.pl < apnicJp.lst > cidr.tmp
> perl makeCidr.pl < jpnic.lst >> cidr.tmp
といった感じ。
> echo ‘192.168.0.0-192.168.255.255′ | perl makeCidr.pl
というように単体でも使用できます。
dupRemove.plはmakeCidr.plで作成した一覧から重複しているものを削除するためのスクリプト。
> perl dupRemove.pl < cidr.tmp > cidr.lst
という感じ。
clientCidr.plですが、これはPostfixのsmtpd_client_restrictionsで使用するためのcidr_tableを生成するためのスクリプト
> perl clientCidr.pl OK < cidr.lst > client_cidr
といった感じ。
引数(OK)はRESULTを指定します。
拒否するならば
> perl clientCidr.pl REJECT < cidr.lst > client_cidr
といった感じ。
dupCheck.plはclientCidr.plで作成した一覧から重複しているものを標準出力します。
> perl dupCheck.pl < client_cidr
最後はこれで目視して重複したものを削除してやる必要があります。
添付されているclient_cidrは私が上記を実行して作成したcidr_tableです。
まだアドレスの範囲的に重複しているものが多数ありますが、キリがないので放置です:)