皆さん、こんにちは!インフラやクラウドのセキュリティの世界へようこそ。
初めてサーバーを構築したり、Webアプリケーションを公開したりする時、「もし悪い人たちから攻撃を受けたらどうしよう…」と不安になりませんか?
今回は、クラウドの巨大な盾を使って、インターネット上の大嵐である「DDoS(ディードス)攻撃」からシステムを守る方法について、泥棒や家の鍵にたとえながら、とっても優しく紐解いていきたいと思います。難しい用語が出てきても、一歩ずつ一緒に学んでいきましょうね!
—
1. 家の鍵にたとえる「DDoS攻撃」の正体
まずは、DDoS攻撃がどんなものか、私たちが住んでいる「お家」にたとえて考えてみましょう。
想像してください。あなたが大切なお店を開きました。入り口のドアは一つで、店員さんはあなた一人です。
普段なら、お客さんが一人ずつ「こんにちは!」とやってきて、お買い物をして帰っていきますよね。
ところが、ある日突然、外から何万人ものサクラ(偽のお客さん)が同時に押し寄せてきたとしたらどうでしょうか?
彼らは何も買わず、ただ「ドアを開けて!」「中に入れて!」と一斉に大声で叫び続けます。
- ドアの前は身動きが取れないほどの黒山の人だかりになり、本当のお客さんがお店に入れなくなってしまう。
- 店員さんは「いらっしゃいませ!」の対応に追われすぎて、頭が真っ白になり、お店が営業停止に追い込まれてしまう。
これが、サイバー世界におけるDDoS攻撃(分散型サービス拒否攻撃)のメカニズムです。
悪意ある攻撃者が、世界中にある乗っ取ったパソコン(ボットネット)から、あなたのWebサーバーへ向かって一斉に膨大なアクセス(トラフィック)を送りつけ、サーバーをダウンさせる手口になります。
サーバーのCPUやメモリ、そしてネットワークの回線という「お店のキャパシティ」をわざとパンクさせることで、正当なユーザーがサービスを利用できなくしてしまうのです。
—
2. クラウドという「警備会社」に守ってもらう
昔なら、こうした大攻撃を受けると、高価な専用のハードウェア装置(ファイアウォールなど)をオフィスに買わなければなりませんでした。でも、今はAWSやAzureといったパブリッククラウドの時代です。
クラウドには、最初から世界トップクラスの巨大な「警備会社」が雇われています。それが、AWSなら AWS Shield、Azureなら Azure DDoS Protection というサービスになります。
これらは、いわば「お家の周りに見えない超巨大な防壁と、プロの警備員を24時間体制で常駐させる仕組み」です。
L3/L4とL7、2つの防衛ライン
DDoS攻撃には、大きく分けて2つのレベル(レイヤー)があります。警備員たちは、この両方目を光らせてくれています。
1. ネットワーク層(L3/L4)の攻撃
- たとえ話: お家の郵便受けや玄関のドアに向かって、毎秒何万通もの迷惑チラシを送りつけて、物理的に郵便受けを壊すような攻撃です。
- 対策: クラウドのネットワークの入口(ルーターの手前)で、怪しいジャンクデータを自動的にゴミ箱にポイっと捨ててくれます。
2. アプリケーション層(L7)の攻撃
- たとえ話: 見た目は普通の人だけど、お店に入ってきては「メニューを100万回見せて!」と無限に注文を繰り返し、レジ係を困らせるいやがらせです。
- 対策: Webアプリケーションの玄関口(WAFなど)で、人間の動きか、機械的なロボットの動きかを見極めて、怪しい奴の入場をガチッと拒否します。
—
3. 実務で設定する!AWS / Azureでの基本的なアプローチ
それでは、実際に私たちがクラウド上でインフラを構築する際、どのようにこれらのDDoS対策を有効化すればよいのでしょうか。難しく考えず、基本のステップを見ていきましょう。
① AWSの場合:AWS Shield Standard と Advanced
AWSでは、実は特別な設定をしなくても、すべてのユーザーがAWS Shield Standardという基本的な防御の恩恵を無料で受けています。ウェブサイトを公開した瞬間から、一般的なL3/L4の攻撃(SYNフラッド攻撃など)はAWSが勝手に裏でいなしてくれています。
もし、あなたが大規模なECサイトや、絶対に落としたくない重要システムを運営している場合は、上位版の AWS Shield Advanced を検討します。これは、専属のセキュリティチーム(SRT: Shield Response Team)がバックについてくれる超強力なプランです。
② Azureの場合:Azure DDoS Protection の基本
Azureでも同様に、基本機能(DDoS IP Protectionなど)で一般的な攻撃を防いでくれます。
インフラストラクチャを構築する際は、仮想ネットワーク(VNet)に対して「DDoSネットワーク保護」プランを紐付けるのが王道のベストプラクティスです。
以下は、Terraformなどのインフラ構築コード(IaC)で、Azureの仮想ネットワークにDDoS保護プランを適用する際のイメージに近い設定例です。
# AzureでDDoS保護プランを有効化する設定のイメージ
resource "azurerm_network_ddos_protection_plan" "example" {
name = "my-ddos-protection-plan"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
# コメント:プロジェクトごとのコストや重要度に応じて適切なプランを選択します
}
resource "azurerm_virtual_network" "example" {
name = "my-vnet"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
address_space = ["10.0.0.0/16"]
# コメント:作成したDDoS保護プランを仮想ネットワークに紐付けることで、
# このVNet内のすべてのリソースが自動的にDDoS対策の対象となります。
ddos_protection_plan {
id = azurerm_network_ddos_protection_plan.example.id
enable = true
}
}
このように、クラウドインフラの構築段階で「防衛スイッチ」をオンにしておくことが、エンジニアの最初の重要なお仕事になります。
—
4. アプリケーション側(L7)で私たちができること
クラウドの盾(ShieldやDDoS Protection)にすべてを丸投げするだけでなく、Webアプリケーションを作る開発者側でも、L7の攻撃から身を守るための「防御ヘッダー」や設定を意識することが大切です。
例えば、Webサーバーやリバースプロキシ(Nginxなど)の設定で、同じIPアドレスからの異常なスピードでのアクセスを制限(レートリミット)することが有効です。
以下は、Nginxの設定ファイルで「1秒間に同じIPからアクセスできるのは最大5回まで」と制限する設定例です。
# Nginxによるレートリミット(速度制限)の設定例
http {
# 1秒あたり最大5リクエストまでを許可するゾーンを定義
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
server {
listen 80;
server_name example.com;
location / {
# 定義したゾーンを適用し、バースト(一時的な急増)は最大10個まで許容する
limit_req zone=one burst=10 nodelay;
proxy_pass http://my_backend_servers;
# コメント:これによって、機械的な大量アクセスを行うボットの動きを
# アプリケーション層の手前でスマートにブロックできます。
}
}
}
こうした小さな工夫を重ねることで、サーバーが過負荷でダウンするリスクを劇的に減らすことができます。
—
まとめ:一歩ずつ、確実なセキュリティを
いかがでしたでしょうか?
DDoS対策というと、なんだか専門的で難解な呪文のように聞こえたかもしれませんが、本質は「お家の玄関に頑丈な鍵をかけ、怪しい人が来たらプロの警備員に追い払ってもらう仕組みを整えること」と同じです。
1. クラウドが提供してくれる標準の防衛機能をちゃんと理解し、有効化する。
2. アプリケーション層(L7)の負荷対策として、レートリミットなどを適切に取り入れる。
この2つを意識するだけで、あなたのインフラの安全性はぐっと向上します。
「セキュリティは難しそう…」と身構えず、まずはご自身のプロジェクトのクラウド設定を眺めるところから、一歩ずつ進めていきましょうね!
コメント