DDoSに役立つだけでなく、便利ないくつかの便利なコマンド

私の場合、フロントエンドサーバーとしてnginxがあり、アクセスログの形式は次のとおりです。



log_format main '$ remote_addr-$ remote_user [$ time_local] "$ host" "$ request"'

'$ステータス$ body_bytes_sent "$ http_referer"'

'"$ http_user_agent" "$ http_x_forwarded_for"-> $ upstream_response_time';



出力では次のようになります:



188.142.8.61--[14 / Sep / 2014:22:51:03 +0400]“ www.mysite.ru ”“ GET / HTTP / 1.1” 200 519“ 6wwro6rq35muk.ru ”“ Mozilla / 4.0(互換性あり; MSIE 8.0 ; Windows NT 5.1; WOW64; Trident / 4.0; SLCC2; .NET CLR 2.0.191602; .NET CLR 3.5.191602; .NET CLR 3.0.191602 ""-"-> 0.003



1. tail -f /var/log/nginx/nginx.access.log | cut -d '' -f 1 | ログトップ



これにより、全体像を把握できます。リクエストの送信元である一意のIPの分布、1つのIPからのリクエストの数など。

最も価値のあることは、これはすべてリアルタイムで機能し、構成に変更を加えることで状況を監視できることです(たとえば、iptablesを介してTOP 20の最もアクティブなIPを禁止するか、GeoIP http://nginx.orgを介してnginxの要求の地理を一時的に制限します) /ru/docs/http/ngx_http_geoip_module.html )。



次のように表示されます(リアルタイムで更新されます)。



27秒で3199要素(118.48要素/秒)

1 337 12.48 / s 95.65.66.183

2 308 11.41 / s 122.29.177.10

3 304 11.26 / s 122.18.251.54

4,284 10.52 / s 92.98.80.164

5 275 10.19 / s 188.239.14.134

6 275 10.19 / s 201.87.32.17

7270 10.00 / s 112.185.132.118

8 230 8.52 / s 200.77.195.44

9182 6.74 / s 177.35.100.49

10172 6.37 / s 177.34.181.245



この場合、列の意味は次のとおりです。







上部にすべてのリクエストの合計統計が表示されます



この場合、IP 95.65.66.183では1秒あたり12.48のリクエストがあり、過去27秒間に337のリクエストが行われています。 残りの行は似ています。



部分的に分析しましょう:

tail -f /var/log/nginx/nginx.access.log-ログファイルの末尾を継続的に読み取ります



cut -d '' -f 1 --dフラグで指定された区切り文字を使用して、文字列を「部分文字列」に分割します。 (この例では、スペースが指定されています)。

フラグ-f 1-シリアル番号「1」のフィールドのみを表示します(この場合、このフィールドにはリクエストの送信元のIPが含まれます)



logtop-同一行 (この場合はIP)の数をカウントし、降順で並べ替えて一覧表示し、途中で統計を追加します(Debianでは、標準リポジトリからaptitudeを通じてインストールされます)。



2. grep "&key =" /var/log/nginx/nginx.access.log | cut -d '' -f 1 | 並べ替え| uniq -c | sort -n | tail -n 30-ログ内のIPによるラインの分布を表示します。



私の場合、1つのIPがリクエストで&key = ...パラメーターを使用する頻度に関する統計を収集する必要がありました。



次のようなものが表示されます。



31 66.249.69.246

47 66.249.69.15

51 66.249.69.46

53 66.249.69.30

803 66.249.64.33

822 66.249.64.25

912 66.249.64.29

1856 66.249.64.90

1867 66.249.64.82

1878 66.249.64.86







この場合、IP 66.249.64.86では、合計1878件のリクエストが到着しました(そして、Whoisを見ると、このIPはGoogleに属し、「悪意のある」ものではないことがわかります)



部分的に分析しましょう:



grep "&key =" /var/log/nginx/nginx.access.log-サブストリング "&key ="を含むログ内のすべての行を見つけます(行のどの部分でもかまいません)

cut -d '' -f 1- (前の例を参照)、印刷IP

sort-行を並べ替えます(次のコマンドが正しく機能するために必要です)

uniq -c-一意の行を表示+これらの行の出現回数をカウント(フラグ-c)

sort -n-数値ソートモードを使用したソート(フラグ-n)

tail -n 30-出現回数が最大の30行を出力します(フラグ-n 30、任意の行数を指定できます)



上記のリクエストはすべてDebianまたはUbuntuに対するものですが、他のLinuxディストリビューションでもコマンドは似ていると思います。



All Articles