-天気予報コム-

Flag counter

« HP iPAQ Voice Messengerのハードリセットの方法 | トップページ | Untangle を導入してみたその16(arpテーブルログの整理) »

Untangle を導入してみたその15(WebFilterの統計ログチェック支援スクリプトを作成)

 前回ネタはこちら。
http://platon.cocolog-nifty.com/lovelovejank/2010/09/untangle-14cron.html

 Untangleでは毎日、毎週、毎月など定期的に統計ログの出力が可能です。私が使用している環境では毎日ログ出力を行い不審なダウンロードが行われていないか毎朝、前日のログを確認しています。

 具体的には[Reports]→[View Reports]→[Web Filter]で[All Events]のタブをクリックしてしばし待つと、http通信のログが全部表示されます。ここで、[Download Data]をクリックするとcsv形式でそのログをダウンロードできます。このファイルをエディタの検索機能で「,http://.*/[^/]{1,16}\.(exe|pif|scr|cmd|bat|zip|rar),」のような正規表現で、ウイルスっぽいものをダウンロードしていないか見てました。しかし、このcsvファイルのサイズは200MB弱、行数で言ったら100万行以上。検索でF3をぽちぽち押しているだけで随分時間が掛かります。
 ということで、Linux上でシェルスクリプトとawkを使って、怪しいurlのみ抽出し、同じurlは1行にマージすることにしました。
 まず、検索用awk設定ファイルはこんな感じ。

webfilter-event-extract.awk

----------------------------------------
# to extract doubtful donwload log
BEGIN{
FS=","
find_cnt=0
find_line=0
}
{
if($6 ~ /\.(exe|pif|scr|cmd|bat|zip|rar)$/){
doubt_url[$6]++
find_line++
}
}
END{
printf("find lines:%d\n", find_line)
for(key in doubt_url){
printf( "%000d counts: %s\n", doubt_url[key], key)
}
}
----------------------------------------

で、これを呼び出して実際に抽出ログを作るシェルスクリプトはこちら。
webfilter-event-extract.sh

----------------------------------------
# How to use
# webfilter-event-extract.sh YYYY-M-D-untangle-node-webfilter-events.csv
# put webfilter-event-extract.awk in same directory.
# output file: YYYY-M-D-untangle-node-webfilter-events-extracted.log


hoge=$1
pattern=./webfilter-event-extract.awk
awk -f $pattern $1 > ${hoge%.csv}-extracted.log
----------------------------------------

 簡易ヘルプにも書いてある通り、webfilter-event-extract.shとwebfilter-event-extract.awk、それに抽出元となる2010-9-15-untangle-node-webfilter-events.csvを同じディレクトリ配下に置いて、コマンドプロンプトにて以下のように実行すると2010-9-15-untangle-node-webfilter-events-extracted.logというファイルが作成されます。


# webfilter-event-extract.sh 2010-9-15-untangle-node-webfilter-events.csv

ま、役に立つ情報か分かりませんが、メモ書き程度に情報を残しておきます。ちなみに私が実際に使っているwebfilter-event-extract.awkについては、microsoft.comなど明らかに怪しくないサイトへのアクセスについては省略するように記述を追加してます。

例えばこんな感じ。





if($6 ~ /^http:\/\/[^\/]*windowsupdate\.com\//){
}
else if($6 ~ /\.(exe|pif|scr|cmd|bat|zip|rar)$/){
doubt_url[$6]++
if( $5 != "False" ){
ok_ng[$6] = $4
}else{
ok_ng[$6] = "PASS"
}
find_line++
}



<2010/09/22追記>
 WebコンソールからダウンロードするYYYY-M-D-untangle-node-webfilter-events.csvとメールで送付された日次ログに含まれるevent.csvとでは書式が若干違うようです。後者はカンマ区切りのカラムが""(ダブルクオーテーアション)で囲われています。
 上記で記載しているものは前者では上手く動作するけど、後者では上手く動作しません。
 ということで、event.csv用に若干改造したスクリプトを挙げておきます。

webfilter-event-extract2.awk

----------------------------------------
# to extract doubtful donwload log
BEGIN{
FS=","
find_cnt=0
find_line=0
}
{
if($6 ~ /\.(exe|pif|scr|cmd|bat|zip|rar)"$/){
doubt_url[$6]++
find_line++
}
}
END{
printf("find lines:%d\n", find_line)
for(key in doubt_url){
printf( "%000d counts: %s\n", doubt_url[key], key)
}
}
----------------------------------------

…何のことはない、正規表現の$記号(行末を意味する)の前に"を1つ足しただけです。
あと応用編の以下の記述もこんな感じになります。同じく正規表現の^記号(行頭を意味する)の後に"を1つ足しただけです。

<変更前>

if($6 ~ /^http:\/\/[^\/]*windowsupdate\.com\//){

<変更後>

if($6 ~ /^"http:\/\/[^\/]*windowsupdate\.com\//){

 自動判別するようにしてもいいのですが、面倒なので今回はパスです。

« HP iPAQ Voice Messengerのハードリセットの方法 | トップページ | Untangle を導入してみたその16(arpテーブルログの整理) »

アルジェリア」カテゴリの記事

「パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« HP iPAQ Voice Messengerのハードリセットの方法 | トップページ | Untangle を導入してみたその16(arpテーブルログの整理) »

無料ブログはココログ
2017年7月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31