サーバーのCPU使用率が異常に高くなっており、Apacheが非常に多くのメモリを使用していることがわかります。私は単一のIPでDOSを受けていると感じています-多分あなたは彼を見つけるのを手伝ってくれるでしょうか?
次の行を使用して、最もアクティブな10個のIPを見つけました。
cat access.log | awk '{print $1}' |sort |uniq -c |sort -n |tail
上位5つのIPには、「平均的な」ユーザーの約200倍のサーバーへのリクエストがあります。ただし、これら5人が非常に頻繁に訪問するのか、それともサーバーを攻撃しているのかはわかりません。
上記の検索を時間間隔に指定する方法はありますか?過去2時間OR今日10-12の間?
乾杯!
2011年10月23日更新-必要なコマンド:
過去X時間以内にエントリを取得[ここ2時間]
awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date) print Date FS $4}' access.log
過去X時間以内に最もアクティブなIPを取得[ここ2時間]
awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date) print $1}' access.log | sort |uniq -c |sort -n | tail
相対的な期間内にエントリを取得する
awk -vDate=`date -d'now-4 hours' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print Date FS Date2 FS $4}' access.log
絶対期間内にエントリを取得する
awk -vDate=`date -d '13:20' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'13:30' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print $0}' access.log
絶対時間内に最もアクティブなIPを取得
awk -vDate=`date -d '13:20' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'13:30' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print $1}' access.log | sort |uniq -c |sort -n | tail
はい、これを行うには複数の方法があります。これは私がこれについてどうするかです。まず、catの出力をパイプする必要はなく、awk
でログファイルを開くだけです。
awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` '$4 > Date {print Date, $0}' access_log
日付がフィールド4に格納され、括弧で囲まれているよりも、ログが私のように見える(設定可能)と仮定します。上記のことは、過去2時間以内にすべてを見つけることです。 Note the -d'now-2 hours'
または文字通り翻訳されたマイナス2時間は、私にとっては次のようになります:[10/Oct/2011:08:55:23
だから私は2時間前のフォーマットされた値を保存し、フィールド4と比較しています。条件式は単純である必要があります。次に、Dateを出力し、その後にOutput Field Separator(OFS-この場合はスペース)を続けて、行全体を$ 0とします。前の式を使用して、$ 1(IPアドレス)を出力するだけです
awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` '$4 > Date {print $1}' | sort |uniq -c |sort -n | tail
範囲を使用する場合は、2つの日付変数を指定して、式を適切に作成します。
あなたが2-4時間前に何かを見つけたいなら、あなたの表現はこのように見えるかもしれません
awk -vDate=`date -d'now-4 hours' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` '$4 > Date && $4 < Date2 {print Date, Date2, $4} access_log'
ここに、bashの日付に関する役立つ質問があります。 現在の週の月曜日の日付を(bashで)
誰かがawk: invalid -v option
、定義済みの時間範囲で最もアクティブなIPを取得するスクリプトを次に示します。
cat <FILE_NAME> | awk '$4 >= "[04/Jul/2017:07:00:00" && $4 < "[04/Jul/2017:08:00:00"' | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -20