AWStats 6.5完全日本語版のページ

かなり遅れてしまいました(^^;

2006年5月にVer.6.5に発見された脆弱性について

2006年5月に、AWStatsのVer.6.5にいくつかの脆弱性が発見されています。以下はその参考URLです。

AWStats Cross-Site Scripting and Full Path Disclosure (Secunia)
AWStats 6.5.x multiple vuln. (UNSECURED SYSTEMS)
AWStats migrate parameter command execution (X-Force)
CVE-2006-2237 (CVE)

これらの総括として、AWStatsの公式Webサイトに掲載されているコメントを、以下に転記します。

----------------------
When AWStats version is 6.4 or 6.5 is used as a CGI:
If the update of the stats via web front-end is allowed, a remote attacker can execute arbitrary code on the server using a specially crafted request involving the migrate parameter. Input starting with a pipe character ("|") leads to an insecure call to Perl's open function and the rest of the input being executed in a shell. The code is run in the context of the process running the AWStats CGI.

When AWStats version is 6.5 or lower and is used to build static pages:
If you use AWStats to build static pages, you are completely safe, whatever is the version of AWStats you use.
----------------------

日本語訳 (by 管理人) は以下の通りです。

----------------------
AWStats Ver.6.4もしくは6.5をCGIとして利用している場合:
Webからの更新処理が許可されている場合、マイグレーション用のパラメータに関連する特別に作りこまれたリクエストを悪用することにより、リモートの攻撃者が不正なコードをサーバ上で実行することができます。
パイプキャラクタ("|")を含む入力文字列がPerlのopen関数を安全ではない方法で呼び出し、結果として残りの入力文字列がシェルで実行されます。コードはAWStatsのCGIを実行しているプロセスのコンテクストで実行されます。

AWStatsのバージョンが6.5以下、もしくは静的にページを構築している場合:
AWStatsを利用して静的にページを構築している場合、AWStatsのバージョンを問わず、全く安全です。
----------------------

 当サイトで公開しているAWStats Ver.6.5日本語版は、日本語化を行う上でAWStats本体 (awstats.pl) には一切手を入れていないため、このコメントがそのまま適用されます。Webからの更新処理を許可していない場合、つまりデフォルトで無効にされている"AllowToUpdateStatsFromBrowser"を明示的に有効にしない限りは、安全です。どうぞ安心してご利用ください。

 

日本語化について

 知っている方は知っていると思いますが、AWStatsは元々日本語には対応していませんでした。しかし、美しいユーザーインターフェースなど、"日本語化されていないから"という理由で切り捨ててしまうには少々もったいない気がしたので、Ver.2.23の時に日本語に対応させたのが始まりです。

 AWStatsはVer.4.0から正式に日本語に対応したことに"なって"います。しかし、対応といっても実情は非常にお粗末な状態で単語レベルで置き換えただけであるというのが実情でした。また、バージョンの更新にあわせてメッセージファイルがメンテナンスされている様子もなく、中途半端な対応であるといわざるを得ない状態です。

 "完全日本語版"と謳っているココロはそこら辺にあります。実際に加えた修正を以下に示します。赤字になっている部分は、個人的なお勧めポイントです。

  ・単語の置き換えレベルだったユーザーインターフェースを、日本語として"自然"に見えるように修正。
  ・メンテナンスされていないと思われるメッセージファイルをちゃんと更新。
  ・英語のままだったTooltip Helpを日本語化。
  ・以下に示す日本の検索エンジンが検出されるように修正。
    Google(J), Biglobe, Nifty, MSN(J), ODN, Excite(J), Naver, Fresheye, TOCC, Infoseek, AskJeeves(J)など

  ・日本ローカルブラウザであるSleipnirとLunascapeを検出するように修正。
  ・日本ローカルロボット(はてなアンテナ, Bookmark Renewal Agentなど)を検出するように修正。
  ・日本語の検索語が正常に検出されない(文字化け)を修正。
  ・Google/Yahooのキャッシュ経由でのアクセスを正常に検出されるように修正。
  ・付属ドキュメントの日本語化(予定)。

 ここら辺を修正したのが完全日本語版ということになります。実際の統計イメージはこちらで見ることができます。自分でできうる限りの日本語化は行ったつもりです。

 

AWStats 6.5完全日本語版のダウンロード

 以下のリンクから、管理人がより完璧な日本語対応を目指して修正を行ったAWStats Ver. 6.5をダウンロードすることができます。書くまでもないと思いますが、管理人は導入や運用で発生した事故等についての一切の責任を取ることはできません。すべて自己責任で行ってください。 ちなみに、全ファイルが基本的にUTF8で記述されているので、文字化けに注意してください。
  ダウンロードした方は、Guestbookに足跡でも残して行って頂ければ幸いです(spam除けの認証がありますので、ユーザ名/パスワード共に"bflets"と入力してください)。

AWStats 6.5完全日本語版のダウンロード


管理人のモチベーションUpのためにも、スポンサーサイトのご訪問をお願いいたします<m(__)m>

AWStats 6.5完全日本語版のインストール

 本体の詳細なインストール手順は用意できていません。時間とやる気ができたら作成します。
 とはいっても、事実上Ver.6.0と全く導入手順は同一になるので、こちらを参照すれば基本的に導入はできると思います。残りのドキュメントについては、少々古くなりますが、Ver.5.0の日本語ドキュメントが参考になると思います。

 それでも不明な点があった場合は、掲示板で質問して頂ければ、可能な限りでお答えします。また、あまりにわからないという方が続出した場合には、詳細な手順の作成を検討しますので、その旨も書き込んで頂ければ幸いです。

 

日本語特有の設定

 完全日本語版では、ログファイルをAWStatsにかけるまえに、utf8_decode.plというスクリプトを経由させます。このスクリプトで、GoogleやYahooのキャッシュ経由のアクセスログの整形や、検索語のデコードを行います。この部分はオリジナルのAWStatsには存在していない部分であるため、別個に作業を行う必要があります。

 0. Jcode.pmのインストール
  URLをデコードするために必要となるJcode.pmをインストールします。
  インストール方法についてはここでは紹介しませんので、こちらなどを参照してインストールしてください。

 1. 必要なファイルのコピー
  配布ファイルの/wwwroot/cgi-bin/utf8_decode.plを/var/www/cgi-binディレクトリにコピーします。
  このスクリプトの場所はどこでも構いませんが、管理人はawstats.plと同じディレクトリに置いています。

 2. utf8_decode.plの修正
  1行目のPerlの場所を、実際の環境に合わせて修正します。

 3. テスト用ログファイルの用意
  AWStats完全日本語版では、utf8_decode.plで変換したログファイルを入力ファイルとして利用します。
  このため、awstats.plを起動する前に、オリジナルのログファイルをutf8_decode.plを通す必要があります。
  本番運用ではcronでコピーを行いますが、ここでは手動でコピーをしてテスト用のログを用意します。
  以下をコマンドラインから入力して、テスト用のデコード済みアクセスログを用意します。

  /var/www/cgi-bin/utf8_decode.pl < /var/log/httpd/access_log > /var/www/cgi-bin/access_log.utf8

  utf8_decode.plの場所とaccess_logの場所は、実際の環境に合わせて修正してください。
  デコード済みアクセスログのaccess_log.utf8のファイル名とパスは、awstats.confの設定に合わせて下さい。

 4. awstats.confの設定の確認
  awstats.conf中の、"PurgeLogFile"が"0"(処理済ログを切り詰めない)であることを確認します。
  本番運用では切り詰める方が好ましいので"1"にしますが、テスト中は"0"にしておくと便利です。
  awstats.plの実行時にエラーが出てもログファイルは残るため、何度でもやり直しがきくからです。

 

AWStats完全日本語版のテスト

 ここからは、再度こちらも参照しながら進めてください。

 1. awstats.plファイルを実行し、更新処理を行う
  "awstats.pl -config=myvirtualhostname -update"と入力して、AWStatsの更新処理を起動します。
  "myvirtualhostname"は、設定ファイルをコピーする際に利用した"awstats.myvertualhostname.conf"のことです。
  こうして起動すると、awstats.myvertualhostname.confの設定内容にしたがって処理が実行されます。

  この初回のアクセス解析は、固まっているんじゃないかと思うほど時間が掛かる場合があります。
  すぐに終わる場合もありますが、処理するログの量によっては数十分掛かることもあります。
  処理の長さは本当に千差万別で一概には言えませんが、ここはひとつ気長にお待ちください。

  正常に終了していれば、処理結果が以下のような形で表示されます。

  Lines in file: 225730
  Found 5 dropped records,
  Found 124 corrupted records,
  Found 0 old records,
  Found 225601 new records.

  上から、ファイルの行数、統計対象外の行数、不正な行数、過去に処理済みの行数、新たに処理した行数になります。この処理はログファイルの解析の実行と、その解析結果のデータベースファイルへの書き出しのみを行います。

 2. awstats.plファイルを実行し、レポート作成処理を行う
  1. で解析されたデータを視覚的にブラウザから閲覧することができるように、レポートの作成処理を行います。
  管理人のサイトで見えているように静的なHTMLとして出力する場合、以下の形でawstats.plを起動します。

   "perl awstats.pl -config=virtualhostname -output > awstats.virtualhostname.html"

  他にも、いきなりPerlのCGIとしてブラウザに表示させたり、特定のレポートだけを出力したりもできます。
  詳細については、こちらを参照ください。

 3. 出力されたHTMLファイルをブラウザから閲覧してみる
   1.や2.でエラーが出ていなければ基本的に問題はないはずですが、一応ブラウザで正常に表示されることを確認します。

 

本格運用のための設定

 ここまでAWStats完全日本語版を利用するための基本的な設定は終了しました。あとは本格運用の設定をするだけです。実際には、同梱のawstats.cronで定期的に実行するように設定することになります。awstats.cronの処理内容を簡単に紹介しますと、

 1. オリジナルのログファイルをutf8_decode.plというフィルタに通してからテンポラリなファイルとしてコピー。
  (デフォルトファイル名:access_log.utf8)。この時点で検索エンジンの引数の日本語化は終了。
 2. awstats.plが切り詰めるのがaccess_log.utf8になるため、オリジナルのログファイルを切り詰める処理を実行。
 3. 統計の更新処理 / 作成処理を走らせる。
 4. 念のため出力されたHTMLファイルの権限を、一般ユーザに変更しておく。

 こんな感じになります。1.の部分はテスト用ログファイルを用意する際に行った処理と同じ内容です。

 また、awstats.cronを実行すると、オリジナルのアクセスログファイルが切り詰められてしまいますので、正常な動作を確認するまではバックアップを取ったり、設定ファイルの"ArchiveLogRecords"を"1"に設定(処理済ログのアーカイブファイルを作成する)しておいてください。

 このファイルを/etc/cron.hourlyなどに置けば、上記の処理が自動的に1時間おきに行われるようになります。私の場合は1時間に1度なのでcron.hourlyですが、例えば1日に1回でよければcron.dailyに置きます。しかし、可能であればその前に設定ファイルの"PurgeLogFile"を"1"に変更して下さい。この設定にすると、AWStatsが毎回処理終了後にデコード後のアクセスログファイルを切り詰めてくれるので、処理速度が向上します。

 実際にcronとして実行させる前に、コマンドラインからawstats.cronを実行してみて、正常に動作しているのを確認するようにしてください。