頻繁なIPのログファイルの解析


12

だから、DDOS攻撃を受けている間にこれを一緒にハックして、ログからいたずらな IP を引き出しました。誰もそれを改善するための改善や他の提案がありますか?

一般的な考え方は次のとおりです。

  1. IPのみをログファイルからプル
  2. それらを並べ替える
  3. uniqとそれらを数える
  4. もう一度並べ替えます

そして、ストリングo'pipes:
cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt


これがウェブマスターでよりよく尋ねられるかどうかはわかりません...しかし、それはすべてunix utilsとコマンドラインを使用しているので...ここで私はより適切だと思いました。
ガベ。

ここでいいようです。それは(これはおそらくApacheやファイアウォールのログのIPに多くの異なるものにも適用することができる)、UNIXベースだし、ウェブのものに固有ではありません
ステファンLasiewski

回答:


7

私はいつもこれを使用しています:

tail -1000 /var/log/apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1

tail私は本当に行きたいどこまでバックの制限を設定することができるよ-良いあなたが(何らかの理由で)ログローテートを使用しない場合は、第二私はの使用を作ってるんだawk-ほとんどのログはスペースが私に区切られているので」 veは、適切な$変数を追加することで、追加情報(おそらく、ヒットしたURL、ステータス、ブラウザなど)を引き出す機能を自分に残しました。最後に、それの欠陥はuniq接触するペアでのみ機能します-IE:

A
A
A
A
B
A
A

生産します:

4 A
1 B
2 A

目的の出力ではありません。最初の列(この場合はipsですが、他の列も並べ替えることができます)をuniq並べ替え、最後にカウントを昇順に並べ替えて、最も高い違反者を確認します。


ええ、私もuniqの問題に気づきました。そのため、重複が互いに隣り合うように、すべてのIPSを整理する最初の方法です。4GB前後でログ全体を解析するには時間がかかることがあるため、末尾のヒントも素晴らしいです。良いもの、ありがとう。
ガベ。

-k1(1)キーが1つしかない(2)sort最初の単語をキーとして使用し始めます
-Lekensteyn

7

fail2banホイールを再発明しているようです。

fail2banを見てください。それはおそらくあなたがすでに望んでいることをし、そうでなければ、簡単にカスタマイズできます。


1
それは私が知らなかった、とても興味深いプロジェクトです、ありがとう。同時に、ログサーバーに必要のないものはインストールしたくありません。また、既に実行していることを簡単に実行できます。改善に関する提案を探しています。ありがとう!
ガベ。

これは本当にクールに見え、GPLも同じです。
イーライ・フレイ

7

Marco Ceppiはawkこのためのより良いツールであることは正しいですが、awkはそのロジックをに移動できるため、より良いツールでもsortあります。1000行をテーリングしているだけなら、大きな違いはありませんが、巨大なマルチギグログファイルを確認したい場合は、それをに移動する方がはるかに高速です。uniqawkawk

cat /var/log/apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n必要なことを行いますが、大きなファイルの場合ははるかに高速です。IPアドレスをキーとして使用し、値としてIPが発生する回数を使用して、awkにIPの配列を作成します。

awkはデータの1回の受け渡しを行い、最終出力のソートを除くほとんどの作業を行うため、速度が向上します。他の方法を使用すると、転送ログに1,000,000行がある場合、awkは1,000,000 IPを吐き出す1,000,000行を読み取り、ソートは1,000,000 IP全体に渡り、ソートされた1,000,000 IPをuniqに送信します。ソートする前のデータ量。awkは、1,000,000個のIPでパイプ処理/複数のパスを実行する代わりに、ほとんどすべてを1つのパスで実行します。

私のラップトップで5,513,132行のApacheログ(1.1ギグ)を使用して、速度を比較します。

  • 2分45秒 cat ./apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
  • 0分40秒 cat ./apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n

とてもかっこいい。これをトリックのバッグに追加しています。
ガベ。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.