首頁 後端開發 php教程 利用Nignx巧妙解決我所遇到的DDOS攻擊

利用Nignx巧妙解決我所遇到的DDOS攻擊

Jul 29, 2016 am 09:07 AM
quot

1. 問題

自家的APP上線已經有一段時間了,突然有一天發現線上產品居然不能發送驗證碼。

登入第三方簡訊驗證碼服務後台,發現問題很嚴重。

2015-12-25575%2015-12-235youbiquan 492015-12-226youbiquan542015-12-2143發現幾天前,簡訊服務居然發出去15,000多條簡訊出去,直接把服務費刷光了。 要找原因就只能找 Nignx 的日誌了。 日誌中,發現大量的對短信接口的訪問,並且在我查看時候,日誌依然在瘋狂的追加,是典型的ddos攻擊了。當然最核心的內容還是對簡訊介面的瘋狂訪問量
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" "-"
登入後複製
甚至在很多訪問量過大時候,都會覺得伺服器不能正常提供服務,處於崩潰的邊緣。
3 youbiquan 15797 2015-12-25797
54 2015-12-2115-12-213 2015-12-20
2. 臨時方案

在搞清楚問題之前,首先想到的是,先把短信服務停掉,讓攻擊者不能訪問服務,但是又不能將服務器關掉,畢竟線上用戶還在使用。

所以先用nginx把這個介面rewrite了。

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

當然配置方法可能有很多,這裡只是提供一個解決問題的思路,具體配置還可以參考更專業的nginx配置的資料。

首先給百度抱歉,把攻擊請求轉發給百度了。其實隨便return一個值就好了,例如200. 

3. 基於log分析的方案

當然問題這樣,並不能算解決,線上用戶也不能算是新用戶了。


我首先想到的方案還是對IP訪問限制,分析了一下log,有的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                
登入後複製
基本的含義,就是對訪問的請求進行字符串匹配,如果發現有對短信接口的訪問,就使用recent模組記錄下來訪問,如果在一天中訪問超過4次,就不讓再訪問短信接口。 

其實也是有一定效果的方案

序號

帳號數量(條)

 

 2016-01-082016-01-052016-01-06某一天,一籌莫展的時候,我又打開nginx訪問日誌,突然發現攻擊的行為的 user-agent都好短,和其他訪問的user-agent有明顯差別。 似乎攻擊者的user-agen都是“Mozila/5.0“,然後就沒有了,而其他的訪問,會有更多信息,包括系統版本,瀏覽器等。 按照這樣的猜想,我去用程式分析user-agent,果然只有訪問簡訊介面的UA中存在很短的 「Mozila/5.0“, 其他存取不存在這個UA,但是還有一些不短的UA於是在nginx的配置裡,加了下面幾段程式碼2016-01-09
2 youbiquan 540
3 youbiquan 2857 2016-01-4434bi 88
5 youbiquan 2469
雖然採用基於ip地址的防範,有點效果,但是依然沒有防火牆根本防住的,我們平條時左右也發防火牆設定後,依然每天有幾千條。分析後發現,這個攻擊使用的IP位址是太多了,所以感覺用IP位址防根本沒有希望。
Dalvik/1.6.0 (Linux; U; Android 4.2.2; R827T Build/JDQ39)" "-"
登入後複製
於是就搜了一下,發現Dalvik是一個Android虛擬機,瞬間覺得明朗了,感覺完全可以基於UA防範,把Mozila/5.0和虛擬機全攔截住,問題不就解決了麼。
if ($http_user_agent = "Mozilla/5.0") {
       return 503;
}

if ($http_user_agent ~* "Dalvik/1.6.0") {
       return 503;
}
登入後複製
第一段就是嚴格匹配 Mozila/5.0 第二段的意思以 Dalvik開頭的UA,就是虛擬機的UA。 果然在採用這個方式防範以後,瞬間有了明顯效果。
2 youbiquan 57

了幾支手機測試了一下,也是OK的。

不過也不能高興的太早,似乎攻擊者也很容易偽造UA,想要完全解決DDOS,還要更多學習科學文化知識才行~

以上就介紹了利用Nignx巧妙解決我所遇到的DDOS攻擊,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

11個最佳PHP URL縮短腳本(免費和高級) 11個最佳PHP URL縮短腳本(免費和高級) Mar 03, 2025 am 10:49 AM

11個最佳PHP URL縮短腳本(免費和高級)

Instagram API簡介 Instagram API簡介 Mar 02, 2025 am 09:32 AM

Instagram API簡介

在Laravel中使用Flash會話數據 在Laravel中使用Flash會話數據 Mar 12, 2025 pm 05:08 PM

在Laravel中使用Flash會話數據

構建具有Laravel後端的React應用程序:第2部分,React 構建具有Laravel後端的React應用程序:第2部分,React Mar 04, 2025 am 09:33 AM

構建具有Laravel後端的React應用程序:第2部分,React

簡化的HTTP響應在Laravel測試中模擬了 簡化的HTTP響應在Laravel測試中模擬了 Mar 12, 2025 pm 05:09 PM

簡化的HTTP響應在Laravel測試中模擬了

php中的捲曲:如何在REST API中使用PHP捲曲擴展 php中的捲曲:如何在REST API中使用PHP捲曲擴展 Mar 14, 2025 am 11:42 AM

php中的捲曲:如何在REST API中使用PHP捲曲擴展

在Codecanyon上的12個最佳PHP聊天腳本 在Codecanyon上的12個最佳PHP聊天腳本 Mar 13, 2025 pm 12:08 PM

在Codecanyon上的12個最佳PHP聊天腳本

宣布 2025 年 PHP 形勢調查 宣布 2025 年 PHP 形勢調查 Mar 03, 2025 pm 04:20 PM

宣布 2025 年 PHP 形勢調查

See all articles