トップ «前の日記(2005-01-22) 最新 次の日記(2005-01-28)» 編集

Public Diary

For antenna, use RSS(RDF) or LIRS.


2005-01-23

鯖管 apache リアファラspam対策

久々に awstats を導入してログを分析させてみて、一番に驚きなのはいわゆるリファラspam (referrer spam/referral spam)。tdiaryのようなリンク元を表示する日記を狙って、リンク元にまったく関係の無い宣伝URLを送ってきます。いい加減リファラ情報ってのはなくすべきなのかも知れない。一年前にはリファラspamってここまで酷くなかったと思うけどなぁ…。まったく迷惑なものが増えたものです。

まぁ嘆いていてもしょうがないので、2通りのやり方でブロック。一つ目は、apache 側で接続をはじくこと。もう一つは、ログの解析対象からはずすこと。前者はApache-Usersを参考に、refspam.conf を作成して httpd.confからInclude。後者は、同様のログを削除するperlスクリプト refspam.plを作成してawstatsに読み込ませた。最近の awstats (6.2) には、一応 referer_spam.pm というのがあるにはあるのだが、まったく使われていないというか、そもそも grep -R awstats/ 'referer_spam' をやってみても一切 use/require されていないので、使われていないんだろうと思う。将来的には使われるんでしょうかね…。

鯖管 ログ解析の時間

ログ解析に2時間以上かかっている時点でそろそろサーバー乗り換えのいいタイミングなんだと思う。

wassy@node1 /home> df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/ubda             2.0G  792M  1.2G  41% /
/dev/ubdb             2.7G  2.5G   58M  98% /home
/dev/ubdc             1.1G  303M  716M  30% /var
none                   61M     0   61M   0% /dev/shm

てゆーか /home あと 58M ですか…orz

wassy@node1 /home> top -b
 20:51:07  up 151 days, 12:20,  1 user,  load average: 0.08, 0.04, 0.00
55 processes: 53 sleeping, 2 running, 0 zombie, 0 stopped
CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle
           total    6.1%    0.0%    0.3%   0.0%     0.0%    0.0%   93.4%
Mem:   123816k av,  115384k used,    8432k free,       0k shrd,    7544k buff
        15440k active,              45168k inactive
Swap:  263160k av,   24520k used,  238640k free                   27196k cached

   PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU COMMAND
24853 root      17   0 14204  13M  1924 S     4.7 11.4   0:26   0 awstats.pl
24890 root       9   0  6912 6904  6708 S     1.4  5.5   0:01   0 httpd
25078 wassy     11   0  1212 1212   912 R     0.3  0.9   0:01   0 top
    1 root       8   0   376  352   352 S     0.0  0.2   0:01   0 init

うーん、やっぱ linode じゃパワー不足かもしれない…。

鯖管 AWStats の日本語処理

にしても、AWStatsの検索キーの日本語文字コード変換は相変わらずbuggyなので、とりあえず decodeutfkeys.pm で Encodings ではなく Jcode を使うようにしました。(ダウンロード → decodeutfkeys.pm) 標準モジュールのはずの Encoding とかが遅くて不正確だっていうのは皮肉ですね。まぁ、統一規格というのはいつもそうなのですが*1

wassy> cat /usr/local/awstats/wwwroot/cgi-bin/plugins/decodeutfkeys.pm
#!/usr/bin/perl
#-----------------------------------------------------------------------------
# decodeUTFKeys AWStats plugin (Jcode.pm version)
# Allow AWStats to convert keywords strings coded by some search engines in
# UTF8 coding to a common string in a local charset.
#-----------------------------------------------------------------------------
# Perl Required Modules: Jcode
#-----------------------------------------------------------------------------

use Jcode;
use strict;no strict "refs";

#-----------------------------------------------------------------------------
# PLUGIN VARIABLES
#-----------------------------------------------------------------------------
my $PluginNeedAWStatsVersion="6.0";
my $PluginHooksFunctions="DecodeKey";


#-----------------------------------------------------------------------------
# PLUGIN FUNCTION: Init_pluginname
#-----------------------------------------------------------------------------
sub Init_decodeutfkeys {
  my $InitParams=shift;
  my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion);
  return ($checkversion?$checkversion:"$PluginHooksFunctions");
}

#------------------------------------------------------------------------------
# Function:  Converts an UTF8 string to specified Charset
# Parameters: utfstringtodecode charsettoencode
# Return:    newencodedstring
#------------------------------------------------------------------------------
sub DecodeKey_decodeutfkeys {
  my $string = shift;
  $string =~ s/\\x([0-9A-Fa-f][0-9A-Fa-f])/%$1/gi;
  $string =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
  $string = Jcode->new($string)->utf8;
  $string =~ s/[;+]/ /g;
  return $string;
}

1;  # Do not remove this line

(2005年8月13日追記)

ちなみに、これは今後のアクセスを変換するためのものであって、すでにログとして解析してしまったものの文字コードは変換できません。そこで、こんなスクリプトを使って、

mv awstats012005washitake.com.txt awstats012005washitake.com.txt~
cat awstats012005washitake.com.txt~ | perl awstatsconv.pl > awstats012005washitake.com.txt

などとして、ログファイルそのものを変換してしまいます。

*1 日本語以外も使えるようにしようとしているからなんですけどね



1980|03|
1986|04|
1998|04|
2002|01|11|
2003|03|04|05|07|08|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|02|03|04|06|07|08|11|12|
2008|01|02|03|04|06|07|08|09|10|