最終更新
リンドくん
先生、ニュースで「DDoS攻撃でサービスが停止」って聞いたんですけど、これって何なんですか?
たなべ
DDoS攻撃は、Webサービスを使えなくする代表的な攻撃手法なんだ。
今日は、この攻撃がどういうものか、そしてどうやって防ぐかを学んでいこう。
Webサービスを運営していると、必ず直面するのがサービス妨害攻撃への対策です。
特に近年では、DoS/DDoS攻撃による大規模なサービス停止が頻繁にニュースになっています。
この記事では、DoS/DDoS攻撃とは何か、そしてレート制限による防御方法について、プログラミング初心者の方でも理解できるよう、基礎から丁寧に解説していきます。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
リンドくん
DoSとDDoSって似た名前ですけど、違うものなんですか?
たなべ
DoSは1台のコンピュータから、DDoSは大量のコンピュータから攻撃する違いがあるよ。
DDoSの方がはるかに防ぐのが難しいんだ。
DoS(Denial of Service)攻撃とは、サービス妨害攻撃のことです。
攻撃者が意図的に大量のリクエストをサーバに送りつけることで、正規のユーザーがサービスを利用できなくする攻撃手法です。
具体的には以下のような影響が発生します。
たとえば、普段100人のユーザーが利用するサービスに対して、攻撃者が一人で1万件のリクエストを送り続けたとします。すると、サーバは攻撃者のリクエスト処理に追われ、正規のユーザーからのアクセスに応答できなくなってしまうのです。
DDoS(Distributed Denial of Service)攻撃は、DoS攻撃をさらに強力にしたものです。
「Distributed(分散)」という言葉が示す通り、複数のコンピュータから同時に攻撃を仕掛ける手法です。
DDoS攻撃の特徴は以下の通りです。
DDoS攻撃では、攻撃者は事前にマルウェアなどで多数のコンピュータを乗っ取り、それらを遠隔操作して一斉に攻撃を行います。正規のユーザーと攻撃者を区別するのが難しいため、防御が複雑になるのです。
過去には以下のような大規模なDDoS攻撃が発生しています。
これらの攻撃による損害は、数百万円から数億円規模に及ぶこともあり、企業にとって深刻な脅威となっています。
リンドくん
じゃあ、こうした攻撃からサービスを守るにはどうすればいいんですか?
たなべ
そこで登場するのがレート制限(Rate Limiting)なんだ。
簡単に言うと、一定時間内にアクセスできる回数を制限する仕組みだよ。
レート制限とは、特定のユーザーやIPアドレスからのリクエスト数を制限する防御手法です。
これにより、以下のような効果が得られます。
たとえば、「1分間に100回まで」というレート制限を設定すれば、それを超えるリクエストは自動的に拒否されます。正規のユーザーが1分間に100回もアクセスすることはまずないため、異常なアクセスだけを効果的にブロックできるわけです。
レート制限には、いくつかの実装方法があります。
IPアドレスベース
ユーザーアカウントベース
エンドポイントベース
代表的な実装パターンとしては以下があります。
固定ウィンドウ方式
スライディングウィンドウ方式
トークンバケット方式
これらの中から、サービスの特性に応じて適切な方式を選択することが重要です。
リンドくん
実際にどうやってコードで実装するんですか?難しそうですね...
たなべ
心配しないで!実は、便利なライブラリやツールがたくさんあるから、意外と簡単に実装できるんだよ。
具体的な例を見てみよう。
Node.jsのWebフレームワークであるExpress.jsでは、express-rate-limitというライブラリを使うことで簡単にレート制限を実装できます。
このコードでは、15分間に100回までという全体的な制限と、APIエンドポイントには1分間に5回までという厳しい制限を設定しています。
Webサーバとして広く使われているNginxでも、レート制限を設定できます。
この設定では、1秒あたり10リクエストを基本レートとし、最大20リクエストまでのバーストを許可しています。APIエンドポイントにはさらに厳しい1秒あたり2リクエストの制限を設けています。
複数のサーバで運用している場合、Redisを使うことで、サーバ間で共通のレート制限を実装できます。
このように、Redisを使用することで、複数のサーバインスタンス間で一貫したレート制限を実現できます。
リンドくん
レート制限だけで完璧に防げるんですか?
たなべ
いい質問だね!実は、レート制限だけでは不十分なんだ。
複数の防御策を組み合わせることで、より強固なセキュリティを実現できるよ。
CAPTCHAは、人間とボットを区別するための仕組みです。
疑わしいアクセスに対してCAPTCHAを表示することで、自動化された攻撃を防ぐことができます。
reCAPTCHAを使った実装例は以下のようになります。
既知の攻撃元IPアドレスをブロックリストに登録し、アクセスを拒否する方法も有効です。
CDN(Content Delivery Network)とWAF(Web Application Firewall)を組み合わせることで、より高度な防御が可能になります。
主要なCDN/WAFサービスには以下があります。
これらのサービスは、以下のような機能を提供します。
攻撃を早期に検出するため、監視体制を整えることも重要です。
このように、複数の防御策を組み合わせる多層防御が、DoS/DDoS攻撃に対する最も効果的なアプローチです。
リンドくん
なるほど!レート制限って、思ったより簡単に実装できるんですね。
たなべ
そうだね!でも、セキュリティは一度設定したら終わりではないんだ。
常に最新の脅威を学び、対策をアップデートし続けることが大切だよ。
この記事では、DoS/DDoS攻撃の基本からレート制限の実装まで、Webセキュリティの重要な基礎知識を解説してきました。
重要なポイントをおさらいしましょう。
セキュリティ対策は、サービスの信頼性を保つために欠かせません。
特に、ユーザーの個人情報を扱うサービスや、ビジネスに直結するサービスでは、適切な防御策を講じることが必須です。
今回学んだレート制限の実装は、セキュリティ対策の第一歩です。まずは自分のプロジェクトに基本的なレート制限を導入してみて、実際の動作を確認してみてください。
また、セキュリティは常に進化する分野です。
新しい攻撃手法が日々生まれていますので、定期的に最新の情報をキャッチアップし、対策をアップデートしていくことが重要です。