Apacheのアクセスログがおかしいから調べてみたら、全信協だった

とあるウェブサーバで4/17だけ異常にアクセス数が増えていて不気味だった。それに日ごと週ごとのアクセス数比較がほとんど無意味になっていて困った。

とりあえず、原因のアクセス元を調べてみると 124.87.223.24 と 122.21.237.218 が他の10倍以上のアクセス数があることがわかった。*1

で、このIPアドレスはp7024-ipbf412marunouchi.tokyo.ocn.ne.jp, p1218-ipbf2805marunouchi.tokyo.ocn.ne.jpで、このmarunouchi.tokyo.ocn.ne.jpで検索してみるとことの元凶が株式会社全信協だとわかった。全信協とだけ聞くといかにも社団法人全国信用金庫協会と紛らわしいが、全国信用身元保証協会の略のようだ。スパムメール送信に日夜がんばっている会社らしい。異常なアクセスはそのためのメールアドレス収集だろう。

全信協spamクローラのフィルタ - World Wide Walkerを参考にはじこうかと。

アクセスログ解析のために書いたPHPスクリプトは以下のとおり。

<?php

define('DATE', '17');

$result = array(
            'ip' => array(),
            'time',
          );
$count = 0;

$fp = fopen("access_log_monthly.200704", "r");
while( ! feof($fp) ) {
  $count++;

  $line = fgets($fp);
  
  if( preg_match("/^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) - - \[([^\]]+)\]/", $line, $match) == 0 ) continue;
  if( strpos($match[2], DATE) !== 0 ) continue;

  $date = preg_replace("/^([0-9]+)\/([a-zA-z]+)\/2007:([0-9]+:[0-9]+:[0-9]+)/","$1 $2 2007 $3",$match[2]);
  $date = date('Y-m-d H', strtotime($date));

  @$result['ip'][$match[1]]++;
  @$result['time'][$date]++;

  if( $count % 10000 == 0 ) echo $match[1].' '.$date."\n";
}

arsort($result['ip']);
print_r( array_slice($result['ip'], 0, 50) );

arsort($result['time']);
print_r( array_slice($result['time'], 0, 50) );

file_put_contents("test".DATE.".txt", var_export($result, true));
?>

*1:それぞれ17日の間に18096回、17154回で、この日のアクセス数ランキング1位と2位。3位以下のアクセス数は2336回、2299回、1463回、1453回、1419回、1245回と続くので、この両者がいかに異常かがわかる。平均は約90回。