nginxでのdos攻撃対策

  • 投稿者:
  • 投稿カテゴリー:nginx

概要

このWordPressサイトがdos攻撃され、落ちた。。
そのため対策した

80.82.65.17 - - [13/Sep/2014:16:59:26 +0000] "POST /xmlrpc.php HTTP/1.0" 502 568 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
80.82.65.17 - - [13/Sep/2014:16:59:27 +0000] "POST /xmlrpc.php HTTP/1.0" 502 568 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
80.82.65.17 - - [13/Sep/2014:16:59:29 +0000] "POST /xmlrpc.php HTTP/1.0" 502 568 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
80.82.65.17 - - [13/Sep/2014:16:59:29 +0000] "POST /xmlrpc.php HTTP/1.0" 502 568 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
80.82.65.17 - - [13/Sep/2014:16:59:30 +0000] "POST /xmlrpc.php HTTP/1.0" 502 568 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
80.82.65.17 - - [13/Sep/2014:16:59:31 +0000] "POST /xmlrpc.php HTTP/1.0" 504 578 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
80.82.65.17 - - [13/Sep/2014:16:59:31 +0000] "POST /xmlrpc.php HTTP/1.0" 502 568 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
80.82.65.17 - - [13/Sep/2014:16:59:32 +0000] "POST /xmlrpc.php HTTP/1.0" 502 568 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
80.82.65.17 - - [13/Sep/2014:16:59:32 +0000] "POST /xmlrpc.php HTTP/1.0" 502 568 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"

設定内容

設定ファイル

### http コンテンツ ###
limit_req_zone       $binary_remote_addr  zone=one:10m rate=10r/s;
### server コンテンツ - location / ###  
limit_req  zone=one;

limit_req_zone

$binary_remote_addr:識別子を指定する
zone=one:10m:ゾーン名とメモリサイズの指定
 State保存用に10MBを確保している。1秒間あたりの要求数は、このゾーンに保存されている情報をもとに平均値として算出する
 $binary_remote_addr の1つのサイズが64バイトであるため、10(MB) = 10,000,000(Byte) ÷ 64(Byte) = 156,250 (Session)を保存できる
rate=10r/s:秒間10リクエスト

limit_req zone

limit_req zone = name [ burst = number(default 0)] [ nodelay ]
ゾーン (zone) とバースト時の最大リクエスト数 (burst) を指定
過剰リクエスト数(今回であれば10)がburstの数値以内であれば、レスポンスを遅延させる
ただし、nodelayを設定するとレスポンスを遅延させなくなる
過剰リクエスト数がburstの数値を超過した場合、リクエストはコード 503 “Service Temporarily Unavailable” を返却する

つまり、16万件の情報のうちから1秒あたりのリクエスト数を計算し、秒間10リクエストを超えると503エラーを返却する

参考URL

公式-HttpLimitReqModuleJa-
http://wiki.nginx.org/HttpLimitReqModuleJa
対策方法
http://tech.kayac.com/archive/nginx-httplimitreqmodule.html
ディレクティブ詳細
http://server-setting.info/centos/nginx-limit_rate.html
http://wiki.arashike.com/nginx/limit_request_per_sec_by_client