2

apacheアクセスログで空白のユーザーエージェントとなりすましのユーザーエージェントの痕跡を見つけようとしています。

これが私のアクセスログからの典型的な行です:(IPとドメインが編集されています)

x.x.x.x - - [10/Nov/2012:16:48:38 -0500] "GET /YLHicons/reverbnation50.png HTTP/1.1" 304 - "http://www.example.com/newaddtwitter.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/534.7 ZemanaAID/FFFF0077"

空白のユーザーエージェントの場合、私はこれを行おうとしています。

awk -F\" '($6 ~ /^-?$/)' /www/logs/www.example.com-access.log | awk '{print $1}' | sort | uniq

UAに関する情報を見つけるために、私はこれを実行しています:(各一意のUAのヒット数を教えてください)

awk -F\" '{print $6}' /www/logs/www.example.com-access.log | sort | uniq -c | sort -fr

ボットやその他のインターネットのスカムと戦うためにできる最善の情報を提供しながら、これらのコマンドをより強力で考え抜くために、別の方法で何ができるでしょうか。

4

1 に答える 1

2

\"フィールドセパレーターとしては使用しません。CLFは十分に構築されているため、空白で区切ると、フィールド12がユーザーエージェントの開始点になります。の場合$12 == '""'、ユーザーエージェントは空白です。

awk標準入力を受け入れることができることを忘れないでください。したがって、次の方法でApacheログを「ライブ」で監視できます。

$ tail -F /path/to/access.log | /path/to/awkscript

この方法で呼び出された場合、awkスクリプトは決してそのに到達しないことを覚えておいてENDください。ただし、Apacheによってログに追加された行を処理できます。

このようなものが役立つかもしれません。必要に応じて追加してください。

#!/usr/bin/awk -f

BEGIN {
  mailcmd="Mail -s \"Security report\" webmaster@example.com";
}

# Detect empty user-agent
$12 == "" {
  report="Empty user agent from " $1 "\n";
}

# Detect image hijacking
$7 ~ /\.(png|jpg)$/ && $11 !~ /^http:\/\/www.example.com\// {
  report=report "Possible hijacked image from " $1 " (" $11 " -> " $7 ")\n";
}

# Detect too many requests per second from one host
thissecond != $4 {
  delete count;
  thissecond=$4;
}
{
  count[$1]++;
  for (ip in count) {
    if (count[ip] > 100) {
      report=report "Too many requests from " $1 "\n";
      delete(count[ip]);  # Avoid too many reports
    }
  }
}

# Send report, if there is one
length(report) {
  print report | mailcmd;    # Pipe output through a command.
  close(mailcmd);            # Closing the pipe sends the mail.
  report="";                 # Blank the report, ready for next.
}

特定の1秒以内にリクエストをカウントすることは、ほんのわずかしか役に立たないことに注意してください。中国からのトラフィックが多い場合、またはファイアウォールの背後にある大学/企業ネットワークがある場合、多くの要求が単一のIPアドレスから送信されているように見える可能性があります。また、このMailコマンドは通知を処理するための優れた方法ではありません。ここでは、デモンストレーションの目的でのみ含めます。YMMV、味に塩。

于 2012-11-13T14:33:19.087 に答える