ちょっとしたアタックがあるIPからあった場合に、whois で IP の情報調べて、そのIPが属するネットワークを iptables で DROP するようなことをしたいのですが、whois で出てくる情報は大抵がIP アドレスの範囲でネットマスクは出てきません。
毎回計算するのが面倒だなと思っていたら、簡単な方法がありました。
perl の perl-Net-IP.noarch というモジュールです。CentOS 5ではrpmがありますので、それをインストールすると、ipcount というコマンドが使えるようになります。
# yum install perl-Net-IP.noarch
例えば、192.168.0.0 – 192.168.0.255 の範囲のネットマスクを調べたい場合は、
# ipcount 192.168.0.0 - 192.168.0.255 192.168.0/24 192.168.0.0 - 192.168.0.255 [256]
といった応答が返ってきますので、/24 というプレフィックスがわかります。IPとネットマスクから範囲を調べることもできます。
# ipcount 192.168.0.0/24 192.168.0/24 192.168.0.0 - 192.168.0.255 [256]
きれいにサブネットに分けられない値を入力した場合はこのような応答が返ってきます。
# ipcount 192.168.0.0 - 192.168.0.129 192.168.0.0/25 192.168.0.0 - 192.168.0.127 [128] 192.168.0.128/31 192.168.0.128 - 192.168.0.129 [2] 192.168.0.0/25,/31 192.168.0.0 - 192.168.0.129 [130]
上記では、192.168.0.0~192.168.0.127で、プレフィックスが25のネットワークと、192.168.0.128~192.168.0.129でプレフィックスが2のネットワークに分けられることが分かります。
さらに、プレフィックスからネットマスクを調べたいときは、一緒にインストールされるiptabというコマンドを使えば便利です。以下では/24は255.255.255.0であることがわかります。
# iptab +----------------------------------------------+ | addrs bits pref class mask | +----------------------------------------------+ | 1 0 /32 255.255.255.255 | | 2 1 /31 255.255.255.254 | | 4 2 /30 255.255.255.252 | | 8 3 /29 255.255.255.248 | | 16 4 /28 255.255.255.240 | | 32 5 /27 255.255.255.224 | | 64 6 /26 255.255.255.192 | | 128 7 /25 255.255.255.128 | | 256 8 /24 1C 255.255.255.0 | | 512 9 /23 2C 255.255.254.0 | | 1K 10 /22 4C 255.255.252.0 | | 2K 11 /21 8C 255.255.248.0 | | 4K 12 /20 16C 255.255.240.0 | | 8K 13 /19 32C 255.255.224.0 | | 16K 14 /18 64C 255.255.192.0 | | 32K 15 /17 128C 255.255.128.0 | | 64K 16 /16 1B 255.255.0.0 | | 128K 17 /15 2B 255.254.0.0 | | 256K 18 /14 4B 255.252.0.0 | | 512K 19 /13 8B 255.248.0.0 | | 1M 20 /12 16B 255.240.0.0 | | 2M 21 /11 32B 255.224.0.0 | | 4M 22 /10 64B 255.192.0.0 | | 8M 23 /9 128B 255.128.0.0 | | 16M 24 /8 1A 255.0.0.0 | | 32M 25 /7 2A 254.0.0.0 | | 64M 26 /6 4A 252.0.0.0 | | 128M 27 /5 8A 248.0.0.0 | | 256M 28 /4 16A 240.0.0.0 | | 512M 29 /3 32A 224.0.0.0 | | 1024M 30 /2 64A 192.0.0.0 | | 2048M 31 /1 128A 128.0.0.0 | | 4096M 32 /0 256A 0.0.0.0 | +----------------------------------------------+