こんにちは!インフラやクラウドの世界へようこそ。
サーバーを構築する際、私たちはクラウド(AWSやAzureなど)の「セキュリティグループ(Security Group)」や「ネットワークセキュリティグループ(NSG)」という仕組みを使って、外からの不正なアクセスを防ぎますよね。
でも、「インバウンドはこれで、アウトバウンドはあれで……あれ、どっちの通信を許可すればいいんだっけ?」と混乱してしまった経験はありませんか?
今回は、このファイアウォールの根幹を支える「ステートフル(Stateful)なトラフィック制御」について、難しい専門用語をできるだけ取っ払って、身近な「家の鍵と郵便受け」の例えを交えながら、優しく紐解いていきたいと思います。一歩ずつ、一緒に学んでいきましょう!
—
1. 「ステートフル」ってなに? 家の鍵で考えてみよう
まずは「ステートフル」という言葉の正体を明らかにしましょう。英語の “State(状態)” に “ful(満ちている)” がくっついた単語で、要するに「通信の状態(文脈)をしっかり覚えているよ」という意味です。
これがどういうことか、身近な例えで考えてみましょう。
例え話:オートロックのマンションのエントランス
あなたはオートロックのマンションに住んでいます。
- ステートレス(状態を覚えない仕組み)な場合:
エントランスの自動ドアは、あなたが外から帰ってきて「開けろ!」とボタンを押そうが、怪しい泥棒が「開けろ!」と押し入ろうが、ルールが同じなら一律で判定します。しかも、あなたが「中に入りたいからドアを開けて出入りした」という直前の行動をドアは一切覚えていません。だから、外に出る時もわざわざ管理人に「今から出ます!」と申請しないといけないような、融通の利かない世界です。
- ステートフル(状態を覚える仕組み)な場合:
あなたが内側から外へ出ようとドアに近づくと、センサーが「あ、住民が外に出ようとしているな(通信の往復)」と状態を記憶します。あなたが外に出た後、そのドアは自動的に「今出ていった人が戻ってくるはずだ」という文脈を理解しているので、外から戻ってきたあなたをスムーズに迎え入れてくれます。もちろん、中を覗き見ているだけの怪しい不審者は入れません。
クラウドのセキュリティグループやNSGは、まさにこの「ステートフル」な番人です。
—
2. インバウンドとアウトバウンドの基本ルール
クラウドのネットワーク設定画面を開くと、必ずと言っていいほど以下の2つが登場します。
1. インバウンドルール(Inbound Rules): 外からサーバーに向かって「入ってくる」通信の制御
2. アウトバウンドルール(Outbound Rules): サーバーから外に向かって「出ていく」通信の制御
初心者のころは、「外からアクセスさせたいからインバウンドを開けて……、じゃあサーバーが外に返事を送るためには、アウトバウンドも全部開けないといけないのかな?」と悩みがちです。
ここで思い出してください。クラウドの通信制御は「ステートフル」です!
「往き」を許可すれば、「帰り」は自動で通る魔法
あなたが自宅のパソコンからブラウザを使って、お気に入りのWebサイトを見に行くとします。
1. 往き(インバウンド/アウトバウンドの発生): あなたのPCからWebサーバーへ「このページを見せて!」とリクエストを送ります(アウトバウンド)。
2. サーバーの処理: Webサーバーはリクエストを受け取り、「はい、どうぞ!」とデータを返します(インバウンド)。
もしセキュリティグループがステートフルであれば、サーバーから外へ向けて通信(リクエスト)を飛ばしたという「状態」を覚えてくれています。そのため、サーバーが外から返事を受け取る際、「これはさっきウチのサーバーから外に話しかけた通信の返事だな!」と判断し、インバウンドの特別な許可ルールを細かく書かなくても、自動的に通信を通してくれるのです。
これが、クラウドのネットワーク設定を劇的にシンプルにしてくれる最大の理由です。
—
3. 実践! 最小限のポート開放ルールを設計してみる
それでは、実際にWebサーバー(Linux)をクラウド上に構築するシーンを想定して、安全な最小限のルールを設計してみましょう。
ここでは、AWSのセキュリティグループやAzureのNSGを設定する感覚で、ルールの考え方を見ていきます。
悪い例:全部お任せの「ガバガバ設定」
最初からうまく動かしたい焦りから、ついやりがちなのがこれです。
- インバウンド: すべてのポート(
0-65535)を世界中(0.0.0.0/0)から許可! - アウトバウンド: すべての通信を許可!
これでは、家中の窓をすべて全開にして「泥棒さん、いらっしゃい」と言っているようなものです。不要なポートが開いていると、そこを踏み台にされてあっという間にサーバーが乗っ取られてしまいます。
良い例:プロが実践する最小限のルール
本当に必要な通信だけに絞り込みましょう。一般的なWebサーバー(HTTP/HTTPS)と、サーバーのメンテナンス用(SSH)のルールを定義します。
インバウンドルール(外からサーバーへ)
| 宛先ポート | プロトコル | 送信元IP | 理由・コメント |
| :— | :— | :— | :— |
| 22 | TCP | あなたの会社のIPアドレス | 管理用のSSH接続(※全員からの接続は絶対にNG!) |
| 80 | TCP | 0.0.0.0/0 (世界中) | HTTP通信(通常のWebサイト閲覧用) |
| 443 | TCP | 0.0.0.0/0 (世界中) | HTTPS通信(暗号化された安全なWebサイト閲覧用) |
アウトバウンドルール(サーバーから外へ)
ステートフルな特性を活かすため、基本的にはデフォルト(すべて許可、または必要最低限のDNS/HTTP/HTTPSのみ許可)で運用することが多いですが、よりセキュリティを高める環境では以下のように絞ることもあります。
| 送信先ポート | プロトコル | 宛先IP | 理由・コメント |
| :— | :— | :— | :— |
| 53 | UDP/TCP | 任意のDNSサーバー | サーバーがドメイン名(名前解決)を引くため |
| 80 / 443| TCP | 0.0.0.0/0 | サーバーがOSのアップデートやパッケージ(apt や yum)をダウンロードするため |
—
4. 現場で役立つ! トラブルシューティングの思考法
「設定は完璧にしたはずなのに、なぜか外部のAPIと通信できない……!」
そんなインシデントに直面したとき、ベテランエンジニアはどこを見るでしょうか。
ステートフルな仕組みを理解していれば、次のようなポイントで原因を切り分けることができます。
1. 「往き」の通信は本当に外に出ているか?
- セキュリティグループのアウトバウンドでブロックされていないか確認します。
2. 「帰り」の通信が途中で消えていないか?
- クラウドには、セキュリティグループのほかに「ネットワークACL(NACL)」というステートレス(状態を覚えない)な仕組みが存在することがあります。NACLを使っている場合、インバウンドだけでなくアウトバウンドの「帰り道」のルールも個別に書く必要があります。「セキュリティグループは通ったのにNACLでブロックされた!」というのは、現場あるあるの罠です。
3. OS側のファイアウォール(iptablesやufw、Windowsファイアウォール)はどうなっているか?
- クラウド側の門番(セキュリティグループ)が通してくれても、サーバーの玄関ドア(OS内のファイアウォール)が閉まっていれば通信は届きません。
—
まとめ
いかがでしたでしょうか?今回はセキュリティグループやNSGの「ステートフルなトラフィック制御」について解説しました。
- ステートフルとは、通信の「往き」の状態を覚えておいて、「帰り」の通信を自動で許可してくれる賢い仕組み。
- 設定を行うときは、「本当に必要なポート(
22,80,443など)」と「本当に信頼できる送信元」だけに絞る(最小権限の原則)。 - 通信トラブルが起きたときは、「往き」と「帰り」のどちらで遮断されているかをステートフルの観点から冷静に疑う。
セキュリティの対策は、一度にすべてを完璧にする必要はありません。まずは「不要なポートを開けないこと」、そして「通信の流れを頭の中でイメージすること」から、一歩ずつ進めていきましょう!
あなたのインフラ構築が、より安全で快適なものになりますように。現場からは以上です!
コメント