ホームページ >バックエンド開発 >PHPチュートリアル >Nignx を使用して、遭遇した DDOS 攻撃を賢く解決する

Nignx を使用して、遭遇した DDOS 攻撃を賢く解決する

WBOY
WBOYオリジナル
2016-07-29 09:07:001082ブラウズ

1. 問題

私自身のアプリはしばらくオンラインになっていましたが、ある日突然、オンライン製品が確認コードを送信できないことに気づきました。

サードパーティの SMS 確認コード サービス バックエンドにログインしたところ、問題が深刻であることがわかりました。

3 ようびけん 15797 2015-12-25
4 ようびけん 57 2015-12-23
5 ようびけん 49 2015-12-22
6 ようびけん 54 2015-12-21
7 ようびけん 64 2015-12-20

数日前、SMS サービスが実際に 15,000 件を超えるテキスト メッセージを送信し、サービス料金が直接なくなってしまったことを発見しました。

理由を知りたければ、Nignx のログを見るしかありません。

ログにSMSインターフェースへの大量のアクセスがあり、確認してみると相変わらずログが狂ったように追記されており、典型的なDDoS攻撃でした。もちろん、中心となる内容は SMS インターフェイスへの異常なアクセス数です

221.178.182.21 - - [05/Jan/2016:16:19:25 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.3; XM50h Build/19.1.1.C.1.2)" "-"
171.82.225.66 - - [05/Jan/2016:16:19:32 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.4; 2014812 MIUI/V6.6.3.0.KHJCNCF)" "-"
171.82.225.66 - - [05/Jan/2016:16:19:32 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.4; 2014812 MIUI/V6.6.3.0.KHJCNCF)" "-"
110.89.16.13 - - [05/Jan/2016:16:19:49 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.2.2; R827T Build/JDQ39)" "-"
110.89.16.13 - - [05/Jan/2016:16:19:49 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.2.2; R827T Build/JDQ39)" "-"
118.114.160.200 - - [05/Jan/2016:16:21:26 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"
118.114.160.200 - - [05/Jan/2016:16:21:39 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"
119.122.0.136 - - [05/Jan/2016:16:21:41 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"
118.114.160.200 - - [05/Jan/2016:16:21:51 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"
。アクセス数が多すぎると、サーバーが正常にサービスを提供できず、崩壊の危機に瀕していると感じるでしょう。

2. 一時的な解決策

問題を解決する前に、最初に思い浮かぶのは、攻撃者がサービスにアクセスできないように SMS サービスを停止することですが、オンライン ユーザーがまだ使用しているため、サーバーをオフにすることはできません。 。

それでは、まず nginx を使用してこのインターフェースを書き換えます。

if ( $request_uri ~* "showType=smsAuthcode" )
{  
    rewrite ^/ http://www.baidu.com/;
}

もちろん、多くの設定方法がある可能性があります。ここでは問題を解決するための単なるアイデアを示します。具体的な設定については、より専門的な nginx 設定情報を参照することもできます。

まず、百度に謝罪し、攻撃リクエストを百度に転送しました。実際には、200 などの任意の値を返すだけです。

3. ログ分析に基づく解決策

もちろん、この問題は解決できず、オンライン ユーザーは新規ユーザーを登録できません。

私が最初に考えた解決策は、IP アクセスを制限することでした。ログを分析したところ、一部の IP は何千回も攻撃されており、もちろんアクセス数がわずかしかない IP もありました。何度かアクセスされた IP の場合、実際には、それが実際のユーザーの IP なのか、それとも攻撃マシンの IP なのかを判断する方法はありません。 インターネット上で、特定のインターフェイスで一定期間内の IP アクセス数を制限できるソリューションを見つけました。

iptables -A INPUT -p tcp --dport 80 -d xx.xx.xx.xx -m string --string "/myinterface?showType=smsAuthcode" --algo kmp -m recent --name httpuser --set
iptables -A INPUT -m recent --update --name httpuser --seconds 86400 --hitcount 4 -j LOG --log-level 5 --log-prefix 'HTTP attack: '
iptables -A INPUT -m string --string "/myinterface?showType=smsAuthcode" --algo kmp -m recent --update --name httpuser --seconds 86400 --hitcount 10 -j REJECT                

基本的な意味は、SMS インターフェースへのアクセスが見つかった場合、最近のモジュールを使用してアクセスを記録することです。1 日に 4 回以上アクセスされた場合、SMS へのアクセスは行われなくなります。インターフェイスが許可されます。​

実際、これは一定の効果を持つ解決策でもあります

シリアル番号 アカウント 数量(アイテム) 日付
2 youbiquan 540 2016-01-08
3 youbiquan 2857 2016-01-04
4 ようびけん 3 88 2016-01- 05
5 youbiquan 2469 2016-01-06

IP アドレスに基づく防止はある程度効果がありますが、通常は約 50 件のメッセージしか送信されません。 IP ファイアウォールを設定した後も、毎日数千件のメッセージが送信されます。分析の結果、この攻撃に使用された IP アドレスが多すぎることが判明したため、IP アドレスを使用して攻撃を防御することは期待できないと思われました。

ある日、途方に暮れていたところ、nginxのアクセスログを再度開いてみると、突然、攻撃動作のユーザーエージェントが非常に短く、他の訪問のユーザーエージェントとは明らかに異なっていることに気づきました。

攻撃者のユーザー年齢は「Mozila/5.0」のようですが、他の訪問ではシステムのバージョンやブラウザなどを含む詳細情報が表示されます。

この推測に従って、プログラムを使用してユーザーエージェントを分析したところ、確かに、SMS インターフェイスにアクセスした UA だけが短い「Mozila/5.0」を持っていましたが、他のアクセスには存在していました。その後、いくつかの短い UAs

Dalvik/1.6.0 (Linux; U; Android 4.2.2; R827T Build/JDQ39)" "-"
が検索したところ、Dalvik が Android 仮想マシンであることがわかり、UA 防止に基づいて Mozila/5.0 と仮想マシンを完全にブロックできると感じました。

そこで、次のコードを nginx 設定に追加しました

if ($http_user_agent = "Mozilla/5.0") {
       return 503;
}

if ($http_user_agent ~* "Dalvik/1.6.0") {
       return 503;
}

最初の段落は、Mozila/5.0 と厳密に一致するようにすることです。2 番目の段落は、Dalvik で始まる UA が仮想マシンの UA であることを意味します。

案の定、この予防方法を採用した後、効果はすぐに明らかでした。

2 youbiquan 57 2016-01-09

新しい方法によると、新しい予防策の後、送信されたテキストメッセージの数は直接以前の通常に戻りますレベル、自分で使ってください いくつかの携帯電話でテストしましたが、問題ありませんでした。

でも、あまり早く喜ぶ必要はないようです。DDOS を完全に解決したい場合は、より科学的かつ文化的な知識を学ぶ必要があります。

上記は、私が遭遇した DDOS 攻撃を賢く解決するための Nignx の使用方法を紹介したもので、PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。