Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

資安:處理 DDoS 攻擊(目前暫時改為用 Disqus 來 host) #35

Closed
abalone0204 opened this issue Jun 16, 2016 · 38 comments
Closed

Comments

@abalone0204
Copy link
Owner

  • 需要比較熟悉 AWS 資安架構的人來幫忙
  • 請在下面 ++ 告訴我
@abalone0204 abalone0204 changed the title 資安 資安:正在被 DDoS。 Jun 16, 2016
@abalone0204
Copy link
Owner Author

因為我是用 API gate way,
看起來是無法直接使用 WAF 擋 IP,或是去訂阻擋的規則:
http://stackoverflow.com/questions/36421357/aws-api-gateway-with-aws-waf

如果是這樣的話,看來可能不得不放棄 serverles 的架構了,
不知道有沒有人能提供架構上的建議?

@qrtt1
Copy link

qrtt1 commented Jun 17, 2016

要怎麼知道是 DDoS,還是因為新聞報導而突然增多的使用者?
沒有 WAF 的話,大概只能在 Lambda 內自己 filter 然後回 403 status 之類的東西了

@madeinfree
Copy link

我同意 @qrtt1 說法也有可能不是 DDoS 而是突然流量的增長,可能要先查明清楚來源。

@abalone0204
Copy link
Owner Author

@qrtt1
因為都是同一個使用者,然後留了大量 spam 的內容,
但是都來自不同的 IP 位置。

我原先的做法就是在 Lambda 內自行 filter,(第一次在 User 認證那裡濾掉)
第二次在 comments 中濾掉,
但這樣做的問題就是,Lambda 還是計算並且要收費。
充其量只能是頭痛醫頭,腳痛醫腳 QQ 並沒有真正解決掉這個攻擊的問題。

@qrtt1
Copy link

qrtt1 commented Jun 17, 2016

@tony1223
那要 cue 一下跳針小幫手了
http://antispite.tonyq.org/

主要還是得針對重複、相似留言的檢查 pattern

@abalone0204
Copy link
Owner Author

現在就是依照 TonyQ 的建議先把 Facebook 留言掛上去擋著 XD
只是這樣就失去匿名性了。
最壞打算就是只能朝向 Disqus 或整個架構打掉重來,
QQ

@cosecantTW
Copy link

cosecantTW commented Jun 17, 2016

剛剛找到這篇
Amazon CloudFrontでAPI Gatewayの痒いところに手を届ける
又連到這個Stackoverflow:
How do you add CloudFront in front of API Gateway
看起來是可以掛CloudFront+WAF在API Gateway前面的,
我沒有實際操作也不是很熟AWS,就交給作者嘗試了<(_ _)>

@clifflu
Copy link

clifflu commented Jun 17, 2016

額,雖說我有回信推薦其它作法,Disqus 一票

順道,APIGW 自帶客制化的 CF,實現其快取行為(但又與一般 CF 不同);
前面 可以 掛 CF (確定可以,之前 demo 就這麼搞) 串 WAF。

@abalone0204
Copy link
Owner Author

@clifflu
之前不用 Disqus 的理由是沒有辦法針對單一職缺 thumb up or down。
後來想想其實留言本身就有語意,用它也不會偏離本義太多。
但是未來要做其他應用 Disqus 的彈性就小了。
講了這麼多,還是一樣先求有再求好。
這就來改 Disqus 上去。

但是 CF 掛上去以及你信裡面寫的解法,可能要等到之後再好好請教你了。
真的太讓人好奇 XDD

@ilovewingchun
Copy link

這些spam留意,你能夠log到他們的header嗎?有時可以利用header中某些資料當做阻擋依據。

@4ndersonLin
Copy link

在AWS Cloudfront和WAF設定上有任何問題,都可以mail給我。我之前有設定過的經驗可以協助。

@abalone0204
Copy link
Owner Author

感謝各位 AWS Master!m ( _ _ ) m

目前先上一版用 DIsqus 擋著的,

正在根據以上所蒐集的意見在調整新的架構。

@YamiOdymel
Copy link

大量 spam 的內容?請問有試過 Google 的 reCAPTCHA 嗎?

輸入留言的時候讓使用者輸入驗證碼至少可以擋下不少的 spam。

@abalone0204
Copy link
Owner Author

Yes,現在 Spam 那邊會先用 reCAPTCHA 擋掉,
不過攻擊者還是一直發 get request ,
稍微發多一點就會把我 DynamoDB 的 Capacity 佔滿,
所以現在還是得先把 Cloud Front 和 WAF 掛上去。

現在也先觀察一下大家對 DIsqus 的使用情形怎麼樣。

其實我覺得很好用 XDDD

@abalone0204 abalone0204 changed the title 資安:正在被 DDoS。 資安:正在被 DDoS( Jun 17, 2016
@abalone0204 abalone0204 changed the title 資安:正在被 DDoS( 資安:正在被 DDoS(目前改為用 Disqus 來 host) Jun 17, 2016
@abalone0204 abalone0204 changed the title 資安:正在被 DDoS(目前改為用 Disqus 來 host) 資安:正在被 DDoS(目前暫時改為用 Disqus 來 host) Jun 17, 2016
@qrtt1
Copy link

qrtt1 commented Jun 17, 2016

GET 的話,api gateway 本身有 caching 的能力,內容沒變的話應該不用直接打到 db。
http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html

不過大部分資料都會漸漸由 hot 變成 cold,最後轉成 s3 static page 比較不耗 db 或 lambda 的 limit

@4ndersonLin
Copy link

4ndersonLin commented Jun 17, 2016

@qrtt1
Api gateway with cache印象中會有額外費用 價格不大便宜 但是應該是個好主意!

@CliffLin
Copy link

加一層cloudflare?

@abalone0204 abalone0204 changed the title 資安:正在被 DDoS(目前暫時改為用 Disqus 來 host) 資安:處理 DDoS 攻擊(目前暫時改為用 Disqus 來 host) Jun 17, 2016
@monochrome-yeh
Copy link

我是很好奇有沒有可能透過第三方的資源來block

像是wordpress 有名的擋 spam 服務
https://akismet.com/wordpress/

這不知道能不能額外串接,
可以的話就有趣了.

@yutin1987
Copy link

用 CDN (ex. cloudflare) 擋在前面

@yutin1987
Copy link

spam 內容... 看來只能用一些身份認證機制了!! 比方簡訊, email? 然後呈現上依舊使用匿名

@jlhg
Copy link

jlhg commented Jun 18, 2016

spam 問題,加入留言間隔時間的機制如何?

@YamiOdymel
Copy link

不同 IP 的話,這種方式也沒有用
2016年6月18日 13:04於 "Jian-Long Huang" [email protected]寫道:

spam 問題,加入留言間隔時間的機制如何?


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
#35 (comment),
or mute the thread
https://github.com/notifications/unsubscribe/AG-FrsJEVWCJqrDK0Teppj1_V07j1pHtks5qM3xkgaJpZM4I3nCW
.

@charliechang
Copy link

加入身份驗證,使用fb或google的oauth進行身份驗證,因為 authorization code只能被使用一次,攻擊者也無法大量取得google和fb帳號,可以解決db流量的問題,即使攻擊也很好預防。

至於隱私部分,對外不顯示暱稱即可,db也不留任何使用者 PII 資料

@iblislin
Copy link

Hi!
如果是擔心 DB 流量的問題,那麼我這裡有 cloudant 可以支援(底下是 couchdb)。可以評估一下 migrate 過來的成本,CouchDB 也可以當成 api server 使用。

就別擔心費用問題了。

@j100002ben
Copy link

Cloudfront + WAF 的費用會很驚人,如果荷包不夠深的話可能要考慮其他方式
Cloudflare 就使用經驗上來說 CP 值很高,但是不穩定所以我都儘量不用它解問題
get 的部分看看有沒有辦法做到依照規則 archive 到 s3 變成靜態資料,可以的話對 lambda 和 Dynamo DB 的壓力會小很多
另外,Dynamo DB 的 Read / Write capacity 單價不同,看是要針對流量去動態調整使用量,或是中間用 sqs 去當緩衝也行,看架構希望調整的方向

如果有AWS相關問題也可以問我喔~~ :)

@YamiOdymel
Copy link

@j100002ben CloudFlare 不穩定?現在不是都已經很穩定了嗎,台灣也有主機了。

@abalone0204
Copy link
Owner Author

雖然現在已經做到一半,
不過還是稍微統整一下大家的建議:

Spam

  • 認證機制(目前打算再加一層 reCaptcha)
  • 留言間隔
  • 第三方留言來擋 Spam:https://akismet.com/wordpress/
    • 如果不行的話就自己用 Deep Learning 方式來監測是否為 spam 然後更新 WAF 的 match rule

架構建議

  • CDN
    • Cloud Flare
    • Cloud Front
  • DB
    • Cloudant - 感謝你!XD 不過就像你說的,可能要評估 migrate 過去花的工!我會花時間研究的。
  • Cache 機制:
    • 把不常用的 data(cold data)存進 S3 ,下次從 S3 讀比較省錢

Cloud front 的價錢算一算之後的確蠻貴的,
(但這是跟 Cloud Flare 比吧 XDD)
不過因為原本的架構就依附在 AWS 下面,
所以現在挑選解決方案可能都還是以 AWS 為主,
但不排除未來有其他可能性,感謝以上各位大大還有來自 Facebook、 ptt 的建議。
真的是讓我第一次有真正在用雲端 solution 的感覺啊 ......
謝謝大家了!

@YamiOdymel
Copy link

嗨,晚安,稍微提醒一下 S3 的部分要小心,不要讓別人知道直接到 S3 的網址,

因為如果人家跑去 DDoS 你的 S3,你的信用卡可能就會被刷爆了。

@Ayukawayen
Copy link
Contributor

S3 get request要錢,資料傳出也要錢。 XD
不然放Google Drive吧,一個月費含所有費用,request和資料傳輸都沒有額外費用。

@abalone0204
Copy link
Owner Author

XD 現在全部進來之前都會再擋一層 Cloud Front,
可以設定 Origin Access Identity (OAI),
沒有拿到 permission 就碰不到我們家 S3。

現在想先觀察一陣子到底會燒多少錢,再來決定以後要不要遷移。
@Ayukawayen 用 Spreadsheet 來做好像還行欸,
不過這樣是不是代表資料會被看光光呀?
畢竟現在匿名還是有記 User id。

@Ayukawayen
Copy link
Contributor

CloudFront HTTP請求和資料傳輸也是要錢的 XD
不過不曉得擋掉的請求收不收費

不然用Load Impact打一次試看看帳單有沒有爆

@abalone0204
Copy link
Owner Author

abalone0204 commented Jun 20, 2016

爆了是不可逆的欸 XDDDDD靠
我的錢包不能 roll back 啊

@iblislin
Copy link

@abalone0204 Hi, 我正在理解你的 code, 雖然我不是 web developer, 需要些時間, 哪裡找的到你存入 db 裡的 schema 呢?

我這裡可以先 shared 出 cloudant 的 db,只要開好帳號,告訴我即可,使用 shared db 的流量都會算我的。

@abalone0204
Copy link
Owner Author

@iblis17 Hi,
這個 repo 裡面應該找不到 XD (因為這裡是單純 front-end 的)。
我再重新把留言系統弄回來之前, schema 會做一些更改,
到時候再通知你 ok 嗎?

另外,原本搭配 DynamoDB 就是因為能用 AWS 的整套服務。
(像是 trigger event 來讓 lambda 幫我做一些 routine job,或是之後的 spam filter 可能都要倚賴這個)
比較好奇 Cloudant 那邊跟 lambda 的整合度如何?
看起來需要給我一些時間再研究一下。

但比起換掉原先架構中的 DB,我覺得 Issue #36 倒是個可以試試看的方向,
畢竟他有提供全文檢索 XD 這麼 powerful 的功能不用到太可惜了。
就當作是備份搜尋的一個 end point,不知道你覺得如何?

@iblislin
Copy link

@abalone0204 在我的想像中,

migrate 到 couchdb 上,可以整個 aws 抽掉, couchdb 有 server side js 可以用,
整個 couchdb 的 access 就只有 REST API ,所以 chrome 的 plugin 可以直接打到 couchdb read/write data,做 spam filtering 之類的就要看看 server side js 可以做到怎樣的程度了。

#36 我覺得不錯啊,都不衝突。

FYI: This is the hidden feature of couchdb. http://docs.couchdb.org/en/1.6.1/couchapp/

@iblislin
Copy link

btw, couchdb 可以直接開始 serve static content

@iblislin
Copy link

trigger event 的部分 couchdb 提供 long polling / SSE, 那麼你可以另外寫程式去聽 event

@iblislin
Copy link

@abalone0204 如果你願意把 db schema 的 spec 寫出來,我很樂意在 couchdb 上試做!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests