【入門編】 コンテナのメモリ制限とリソースクォータによるDoS攻撃対策 – インフラ・ネットワーク & クラウドセキュリティ防御ガイド

コンテナが「暴走」しても大丈夫?リソース制限で守るサーバーの平和

こんにちは!インフラやセキュリティの現場にいると、たまに「サーバーが急に重くなって、何も操作できなくなった!」という悲鳴のような相談を受けることがあります。

実はこれ、「リソース枯渇型DoS(サービス拒否)攻撃」という、非常に厄介なトラブルの典型例なんです。今回は、新人エンジニアの方に向けて、コンテナという便利な仕組みを「安全に使いこなすための防波堤」について、身近な例えを交えてお話ししますね。

—

コンテナは「シェアハウス」、それとも「個室」?

まず、コンテナを「シェアハウス」に例えてみましょう。一つの大きなホストサーバーという建物の中に、いくつものコンテナ(住人)が暮らしている状態です。

もし、ある一人の住人がリビングのキッチンを占領して、24時間ずっと料理を作り続けたらどうなるでしょう? 他の住人はご飯を作れなくなりますよね。これと同じことがサーバーの世界でも起きます。特定のコンテナがメモリやCPUを限界まで使い切ってしまうと、サーバー全体がダウンしてしまうのです。

これを防ぐのが「リソース制限(クォータ)」です。「君はキッチンを30分だけ使っていいよ」「冷蔵庫は半分までね」と、最初からルールを決めておくわけです。これができていないと、悪意のある攻撃者が「重い処理」をわざと送るだけで、あなたのサーバーは簡単に沈黙してしまいます。

—

メモリの「使いすぎ」を防ぐ設定(Docker Compose編)

では、具体的にどうやって制限をかければいいのでしょうか。Dockerを使っている場合、設定ファイルにほんの数行書き足すだけで、強固な防壁を築くことができます。

以下は、docker-compose.yml でコンテナのメモリ使用量を制限する例です。

version: '3.8'
services:
  web-app:
    image: my-app:latest
    deploy:
      resources:
        limits:
          # メモリを最大512MBまで使用可能にする(これを超えると強制終了)
          memory: 512M
          # CPUはホストの50%分まで使用可能にする
          cpus: '0.5'
        reservations:
          # 起動時に最低限確保するメモリ量
          memory: 128M

ここで重要なのは、limits(上限)をしっかりと決めることです。泥棒(攻撃者)が「メモリを大量に食う攻撃コード」を送り込んできても、この設定があれば512MBに達した瞬間にOSがそのコンテナを強制終了させてくれます。

「えっ、強制終了したらサービスが止まりませんか?」と心配になりますよね。その通りです。でも、「個別のコンテナが止まる」ことと、「サーバー全体がフリーズして他のすべてのサービスが止まる」ことを天秤にかけたとき、選ぶべきは前者なのです。全体を守るための「安全装置」だと考えてくださいね。

—

「魔法の数字」を探す泥臭い現場の知恵

さて、ここで新人の方が陥りやすい罠があります。それは「適当な数字を入れてしまうこと」です。

  • 制限が厳しすぎる: 正常なアクセスが来ても、すぐにメモリ不足でコンテナが落ちる(サービスにならない)。
  • 制限が緩すぎる: 攻撃を防げない。

現場のプロは、まず「通常時の消費量」を計測します。docker stats というコマンドを叩くと、リアルタイムで各コンテナがどれくらいリソースを使っているか確認できます。

# 現在稼働中の全コンテナのリソース消費状況を表示する
docker stats

この数値を数日間観察し、「普段はこれくらい、スパイク(急増)してもこれくらい」というベースラインを見極めてから、少し余裕を持たせた上限値を設定するのが鉄則です。セキュリティは勘ではなく、観測とデータの上に成り立つものなんですよ。

—

セキュリティは「心の余裕」から

今回紹介した設定は、いわば「家のドアに頑丈な鍵をかけ、部屋ごとにパーテーションで区切る」ようなものです。

もちろん、これだけで全ての攻撃が防げるわけではありません。でも、「特定のコンテナが暴走しても、サーバー全体には影響を出させない」という境界線を引くだけで、インシデント発生時の被害範囲を最小限に抑えることができます。

セキュリティ対策は、完璧を目指すと苦しくなります。まずは「リソース制限をかける」という一歩から、一緒にサーバーの防犯レベルを上げていきましょう。

次に何かトラブルが起きたとき、この「リソース制限」という防波堤があることを思い出してくださいね。それだけで、あなたのエンジニアとしての安心感は大きく変わるはずです。

それでは、また次回のブログでお会いしましょう!安全なインフラライフを楽しんでくださいね。

コメント

タイトルとURLをコピーしました