at_yasu's blog

ロード的なことを

三ヶ国のIP

あたしの鯖では、韓国とか中国からのsshとかsmtpの攻撃が多いので、pfでIPごと拒否するように設定しています。
IPの割り出しは、delegated-apnic-latestを使っています。

今日、友人が私の鯖にアクセスできないという興味深い事が起きて、その原因がIP拒否だったのでメモ書き。


今日、友人にあたしの鯖にアクセスしてくれと頼んだら、接続が出来ないと言われた。「おかしいな」と思い、自分のPCからアクセスはできるが、エキサイトの「http://www.excite.co.jp/world/english/web/」を使って外部からの接続を試す。見事に無理で、別サイトの「HTTPチェック【外部からの疎通確認】」からも試すが無理。

推測として、NTTにIP変えられたか、FW立たされたかしたかのどちらかだろうと思ったのでいろいろ探す。
まず、a-yasui.infoのIPを確認。これは以前あったので、結構本命っぽいと思ったが、変わっておらず。
次に、FWの可能性。たいがいFWをたてると言うのは、ICMPも拒否するというネットワーク的な暴挙にでるので、早速「Pingチェックテスト【外部からのping確認】」で確認。が、見事に通ってる。

IPの変更、FWの強要でもなかったら、ほかなんぞえ?と、とりあえず自分の鯖をリブート。しかし、改善せず。


友人と話てて、そー言えば中国、韓国からは意地でも強制的にアクセス禁止にしているのを思い出すんで、リストを最新のに変更。
アクセスが出来る様になり、友人もできるようになる。つまり、エキサイトとかのIPが元々中国ないしは韓国に割り当てられていた物だったことになる。


前回、リスト作ったのが3月29日なんで、ほとんど4カ月の間変更していない事になり、変更もその間にあったと思われます。半固定なもんだと思ってたアタシが莫迦でした orz


以下、delegated-apnic-latest を CIDR の IPアドレスに変更して書き出すスクリプトです。ファイルを stdin で放り込んだら吐き出します。

#!/usr/bin/perl -wT
use strict;
$, = " ";

my $i = 1;
my @a = map { 2**$_; } (1..32);
my %cidr = ();

foreach (0..$#a) {
        $cidr{$a[$_]} = 31-$_;
}

while (<>) {
        next if m{^[#0-9]}; # This is out of comment inline to reading file.
        s/[\r\n]//g;

        my ($nic, $country, $type, $ip, $range, $time, $info)
                = split m{\|};

        next if $type ne 'ipv4' or $info eq 'summary';

        print "$ip/".$cidr{$range},$range,$country,$time."\n";
}

あんましどーでも善くない事なんだけど、これIPv4を前提にして作ってて、IPv6には対応してません。てか、@a がもろにIPv4のアドレス空間しか対応してません。だからってIPv6に対応させるため、32から128に上げたら良いってもんじゃなくて、文法表記も変わっているから、ほとんど書き直し。出来るだろうけど、もうちょっと綺麗にできる方法無いかなぁ、つかもっと綺麗に書けたらなぁ・・・orz