Pocket

AWS WAFを利用して、毎日来るDos攻撃を防ぐ環境をサクッと実装してみました。今回は簡単に設定方法をブログします。


■Protect Web Sites & Services Using Rate-Based Rules for AWS WAF

https://aws.amazon.com/jp/blogs/aws/protect-web-sites-services-using-rate-based-rules-for-aws-waf/

レートベースのルールを適用すると、同一IPアドレスからの大量リクエストをブロックできます。DDoS攻撃やブルートフォースアタックといった攻撃からの防御が簡単にできるわけです。

・5分間に同じIPから指定回数を超えるトリガー
・条件(Condition)との組み合わせが可能
・条件を指定しない場合には全てのリクエストが対象


■AWS WAF & Shield >Create rule

とりあえずruleを作成しましょう。Rate limitは2000がデフォルトなので、5分間にリクエストが来た場合に自動的にブロックしてくれます。上記のように設定してみてください。
※ちなみにRate limitは1分間で1000などのカスタマイズはできないので注意!


■Web ACLs > Create web ACL

 

ここでは先程作ったruleにWebACLを紐付けます。今回はconditionsの設定はデフォルトで、対処のサーバのELBを指定してるだけです。ちなみにActionCountにすると、BlockせずにアタックしてきたIPを確認することができます。テストしてみましょう。


■Go Attack!!!

・Now status

まずは200が返ってきています。

・AB Test!

ApacheBench3000リクエストを投げて403が返ってくればOK。ちなみにインスタンスタイプはスケールアップしました(負荷で503になってしまうため)

・curlでステータスコードを確認

403になりました。

Web ACLの管理画面からBlockされてますね。数分後に自動で解除されました。


■CloudWatch x Slack

http://blog.serverworks.co.jp/tech/2016/02/16/lambda-cloudwatch-alarm-to-slack/

DDosが来ていることをCloudWatchやLambdaを利用してSlack通知すると計測ができますね。

https://github.com/RVIRUS0817/waf_block-ip

・Lambda
・IAM
・SNS
・CloudWatch
・Python 3.6.2


■まとめ

もっと細かく設定するにはconditionsで可能なので、あとで試してみたいと思います。サービス運用している会社は必須となる設定だと感じました。あとはTerraform化かな。

※追記

https://aws.amazon.com/jp/about-aws/whats-new/2019/08/lower-threshold-for-aws-waf-rate-based-rules/

Rate-based ルールが100リクエストから指定可能になったので良き!

参考:
https://techblog.recochoku.jp/4070

Pocket

カテゴリー: AWSDDoS

adachin

1989年生まれのSRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。好きなツールはAnsible,Terraform,CircleCIで、ECS/Fargateでのインフラ構築を得意とする。副業では数社サーバー保守とベンチャー企業のインフラ改善やMENTAで未経験者にインフラのコーチングを実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、緊急対応、インフラコード化、リファクタリング、セキュリティ強化、新技術の検証、Docker開発環境の提供、AWSでのインフラ構築、ECS/Fargateへ移行、CakePHP4での管理画面作成、メンター、分析基盤の運用を担当している。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください