目次
こんにちは角田(tsunoda)です。
最近腹が出てきた気がします。( ‘-’ )
GCPのCloud armorと、AWSのWAF、
実際に両方使ってみたのでban-timeを比較した結果を書いていこうと思います!
Cloud armorについては以前ご紹介したので、今回はWAFを主にご紹介します。
fail2banとCloud armorでbanする
Cloud armorとは
GCPのglobal HTTP(S) Load Balancerの新しいセキュリティ対策サービスです。
主な機能は以下になります。
DDoS対策
IP制限(whitelist,bkacklist)
検証詳細はこちら↓
fail2banとCloud armorでbanする
AWS WAFとは
可用性、セキュリティ侵害、リソースの過剰消費といった一般的なウェブの脆弱性から
ウェブアプリケーションまたは API を保護するウェブアプリケーションファイアウォールです。
こちらもDDoS対策やIP制限に使えます!
WAFを設定してみる
まずはWeb ACLを作成します。
regionの選択を忘れがちなので注意です。 Create web ACL
をぽち。
detailsの設定をして、今回Ruleなどは後で作成します。
Create web ACL
ぽち!できました。
Web ACLができたら、作成したWeb ACLを選択、Add rules
をぽちってRuleを作成します。
こんな感じで設定します。↓
5分間で100アクセス以上してきたIPをbanするルールを作成してみます。↓
-Rule/Type
Regular ruleか、Rateをベースにしたルールを作るよという意味
-Request rate details/Rate limit
この値はアクセス数。全アクセスか、リクエスト指定か選べる。
Rate-based ruleの場合はここでrateを設定する。
-Action/Action
Blockは実際にルールにしたがってbanする。Countにすると計測のみ行いbanはしない。
Add rule
ぽちで作成完了です。5分間で100アクセス以上アクセスのあるIPを5分間ban
ルールができました。
すると先ほど作成したWeb ACLに設定されています。
次にこの設定を入れるresourceを選びます。Add AWS resources
ぽち。
API GatewayかLBか選択できます。
今回はLBを選択します。
以上で基本的な設定は完了です。おっしゃおっしゃ。
AWS WAF検証
ということで、banされるまでおもむろにLBにcurlを投げてみます。
$ while true; do curl ${LB-DNS_NAME} -I; done
HTTP/1.1 200 OK
Date: Thu, 19 Dec 2019 09:28:32 GMT
Content-Type: text/html
Content-Length: 612
Connection: keep-alive
・・・
HTTP/1.1 403 Forbidden
Server: awselb/2.0
Date: Thu, 19 Dec 2019 08:09:07 GMT
Content-Type: text/html
Content-Length: 134
Connection: keep-alive
HTTP/1.1 403 Forbidden
Server: awselb/2.0
Date: Thu, 19 Dec 2019 08:09:08 GMT
Content-Type: text/html
Content-Length: 134
Connection: keep-alive
アクセスし続けること約30秒。
403が返ってきました。
Web ACLのoverviewでもちゃんとbanされたことを確認できます。
unbanは5分後なので、時々アクセスしながら待ってみます。
$ curl ${LB=DNS_NAME} -I
HTTP/1.1 200 OK
Date: Thu, 19 Dec 2019 09:15:10 GMT
Content-Type: text/html
Content-Length: 612
Connection: keep-alive
5分と言いながら実際にbanされてから約6分後にunbanでした。
何回か検証しましたが、banになる時間、unbanになる時間は大体同じでした。
GCP Cloud armorとAWS WAF ban-time比較
banされるまでの時間 | unbanされるまでの時間 | |
---|---|---|
GCP Cloud armor | 約2~3min | 設定可能(約2〜3min〜) |
AWS WAF | 約30sec | 約6min |
WAF早っ!
### まとめ AWS WAFは `反映時間が早く、インスタンスより手前でのアクセス計測なので` 同一IPからの大量アクセスによる高負荷は最小限に抑えられそうですね。 かゆい所としては、 “` unbanされるまでの時間をまだ設定できない所、 overviewでは過去3時間分しか確認できない所、 より詳細なデータを収集するにはcloud watchやs3にログを吐かせる設定を追加しなければならない所 “` でしょうか。
GCP Cloud armorは 反映時間が遅く、インスタンス単位でのアクセス計測なので
高負荷がやってくる事もしばしば。。
unbanの反映にも最低2〜3分はかかります。
ただfail2banと併用すればban-timeや、ルールの微調整も可能なので、柔軟性があると思いました。
logもstackdriver loggingで調査し易く、過去のデータも閲覧しやすいです。
両方使ってみて、
迅速な対応に向いているのは反映時間の早いAWS WAFでした。
DDoS対策などに加えてホワイトリスト登録やbanの微調整など融通が効くのはGCP Cloud armorといった印象です。
もう少し詳細なWAFの設定などはまた次回紹介しようと思います。
株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。
grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。
お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。