Firewall とは — 5 世代の進化・Stateful・NGFW / WAF / クラウド SG のサムネイル

Firewall とは — 5 世代の進化・Stateful・NGFW / WAF / クラウド SG

⏱ 約 19 分 view 159 like 0 LOG_DATE:2026-05-11
目次 / TOC

Firewall は「事前に定義したルールに合致しない通信を遮断する」アクセス制御装置。5-tuple (src/dst IP・src/dst Port・Proto) の照合という素朴な基本動作から、Stateful → NGFW → クラウド SG / SASE まで進化を重ねてきた。本稿は 5 世代の進化軸Stateful の中身置き場所による分類NGFW / WAF / クラウド SG・そして Zero Trust への遷移までを、現代の限界も含めて通しで扱う。

▸ セキュリティ初学者へ — まずこの 3 つだけ

難しく見えても本質は次の 3 つだけ。(1) Firewall は 「事前に書いたルールに合わない通信を捨てる関所」。インターネットと社内の間に立ち、許可リストに無い通信を通さない。(2) 5 世代の進化があり、古い「ポートで判断」(Packet Filter) から、現代の「アプリ・ユーザ・コンテキストで判断」(NGFW / Zero Trust) へ。(3) Firewall 1 つに頼る時代は終わった — HTTPS の中身は見えない / 内部に侵入後の横移動は止められない / 装置自体に脆弱性が出る、ため EDR / WAF / ZTNA との多層防御が現代の標準。— ここを土台に各章を順に開いていけばいい。

01

Firewall とは — 5-tuple とポリシー #

ネットワーク Firewall の最も基本的な処理は次のループ。

▸ かみ砕いて言うと — Firewall は「クラブの入口の警備員」

Firewall は 「クラブの入口に立つ警備員」そのもの。お客 (パケット) が来るたびに 身分証 (送信元 IP / 行き先 / ポート / プロトコル) をチェックし、事前にもらった許可リスト (ACL) と照合して入れるかどうかを決める。「リストに無い客はとりあえず断る (default deny)」のが現代の正しい運用。逆に「とりあえず入れて、リストに載った客だけ追い出す (default allow)」は穴だらけになるので非推奨。「警備員 1 人で全部判断する」のは無理なので、後で見るように複数の警備員 (Host FW / WAF / クラウド SG) を組み合わせるのが現代の設計。

1. パケット受信
NIC レベルで到着パケットを受け取る。
2. 5-tuple 抽出
送信元 IP / 送信先 IP / 送信元 Port / 送信先 Port / Protocol (TCP/UDP/ICMP 等) を取り出す。
3. ACL を上から照合
ルールリスト (Access Control List) を上から順に評価し、最初にマッチしたルールを採用。
4. action 実行
allow / deny / drop / log を実行。どれにもマッチしなければ default policy (通常 deny)。
ルールの典型例 (擬似構文)
# 内部 LAN から外部 Web (HTTPS) は許可 allow from 10.0.0.0/24 to any port 443 proto tcp # 外部から DMZ 内 Web サーバ (port 80, 443) は許可 allow from any to 203.0.113.10 port {80,443} proto tcp # それ以外の外部→内部は全部破棄 deny from any to 10.0.0.0/24
▸ deny と drop の違い

deny (= reject) は ICMP unreachable を返す、drop は何も返さずパケットを黙って捨てる。攻撃者の偵察を遅らせるため drop の方が好まれる (port の「閉」と「無応答」を区別させない)。

「何を許可するか」を白リストで書く default deny が現代の正しい設計。default allow は新しいプロトコルが出るたびに穴が空くため非推奨。

02

5 世代の進化 — 何ができるようになってきたか #

Firewall の歴史は「より上位の階層を見る能力」を獲得してきた歴史。Packet Filter → Stateful → Application Proxy → NGFW → Cloud/Zero Trust の 5 段階で整理できる。

① 1st Gen — Packet Filter (1988 DEC SEAL)
5-tuple のみで判断 / パケット単位で独立評価 / ステートレス。○ シンプル・高速 / × 戻り通信を毎回書く必要、応答偽装に弱い。代表: Cisco ACL の origin / 初期 Linux ipchains。
② 2nd Gen — Stateful Inspection (1990 Check Point 特許)
接続状態テーブルで TCP/UDP セッションを追跡、戻りトラフィックを自動許可。○ ルール記述が直感的、現代の基準 / × 暗号化 L7 ペイロードは見えない。代表: Check Point FW-1, Cisco ASA, pfSense, iptables/nftables (conntrack)。
③ 3rd Gen — Application Proxy / ALG (1991-)
L7 まで読んで仲介。HTTP / FTP / SMTP の構文を理解しクライアント-FW-サーバ の 2 段接続。○ L7 攻撃検知 / × 遅い、対応プロトコルが少ない。代表: TIS Gauntlet, Squid。
④ 4th Gen — NGFW (2007-)
Stateful + DPI + IPS + App ID + User ID + URL Filter + SSL Inspection を統合。○ 「Skype は許可だがファイル転送だけ拒否」のような L7 制御 / × SSL 復号は鍵管理・性能・プライバシー問題。代表: Palo Alto, FortiGate, Check Point R80+, Cisco Firepower。
⑤ 5th Gen — Cloud / Identity / Zero Trust (2014-)
クラウド SG / NACL / micro-segmentation / WAF / Service Mesh / SASE。「境界」自体を再定義し identity / device / context で判定。代表: AWS SG/NACL, Azure NSG, Cloudflare/Zscaler/Netskope, Istio。

重要なのは 「新しい世代が古い世代を置き換えた」のではなく、現代のシステムは複数世代を同時に層として重ねる こと。

  • 境界 — NGFW (4 世代目)
  • DMZ 内 Web サーバ前 — WAF (5 世代目の L7 専用版)
  • 各 EC2 / VM — クラウド SG (5 世代目)
  • OS 内部 — Host Firewall (1-2 世代目の踏襲)
  • コンテナ間 — Network Policy / Service Mesh (5 世代目)

Defense in Depth の思想で、1 層が抜けても次の層で止める設計になっている。

03

Stateless vs Stateful — 中核概念 #

第 2 世代の Stateful Inspection が現代 Firewall の事実上の基準。Stateless はパケット単位で独立に評価し、過去の状態を持たない。Stateful は接続状態テーブルでセッションを追跡し、戻りパケットを自動許可する。

▸ かみ砕いて言うと — Stateful は「文脈を覚える警備員」

Stateless 警備員は記憶喪失で、お客が出入りするたびに毎回身分証を確認する。だから「内→外を許可するルール」と「戻りパケットを許可するルール」の両方を書かないといけない (= 戻り通信のために広く穴を開ける羽目になる)。Stateful 警備員「さっき出ていった客が戻ってきた」と覚えているので、内→外を 1 行書くだけで戻りは自動で通す。「ポート 443 への外向き通信を許可」だけ書けば、戻りの HTTP レスポンスも自動で通る — これが現代 Firewall のルール記述が直感的になった理由。

Stateless Stateful
ルール記述 戻り (port >1024 等) も明示が必要 「内→外 443 許可」だけで OK
攻撃面 戻り側を広く開ける → 応答偽装攻撃 追跡テーブルで応答偽装を阻止
状態 なし TCP/UDP の 5-tuple + state を保持

State Table には次のような行が並ぶ (Linux conntrack / Check Point):

Src→Dst Proto State TTL Bytes
10.0.0.5:48772 → 93.184.216.34:443 TCP ESTABLISHED 295s 14.2 KB
10.0.0.5:51123 → 8.8.8.8:53 UDP ESTABLISHED (擬似) 28s 220 B
戻りパケット RELATED via parent

State による判定:

  • NEW — テーブルに無い新規。ACL で許可された場合のみテーブルに追加
  • ESTABLISHED — 既存セッションの続き。テーブル参照で許可 (ACL 走査不要)
  • RELATED — FTP データ転送のような付随接続。ALG helper が判定 (FTP/PPTP/IRC/H.323)
  • INVALID — 不正なフラグ組合せ / テーブルと矛盾 — drop
▸ State Table の容量と SYN Flood

テーブル容量は数十万〜数百万エントリ程度。SYN Flood 攻撃はテーブルを満杯にして正規接続を弾く Stateful の宿命的弱点。TTL が短すぎると正規セッションが切れ、長すぎると埋まる。容量管理が性能の鍵。

Linux で conntrack テーブルを見る
$ sudo conntrack -L tcp 6 431999 ESTABLISHED src=10.0.0.5 dst=93.184.216.34 sport=48772 dport=443 ... # 容量上限と現在使用数 $ sudo sysctl net.netfilter.nf_conntrack_max $ cat /proc/sys/net/netfilter/nf_conntrack_count # 大量同時接続でテーブル溢れが見られる場合 $ sudo sysctl -w net.netfilter.nf_conntrack_max=1048576
04

置き場所と種類による分類 #

「Firewall」という言葉は現代では複数の異なる装置を指す。何を守るか / どこに置くか で大きく 4 系統:

系統 守る対象 代表
Network Firewall (perimeter) LAN 全体の境界 Palo Alto / Fortinet / Check Point / Cisco ASA / pfSense
Host Firewall 個々の OS iptables/nftables (Linux), Windows Defender, macOS PF, ufw, firewalld
WAF Web アプリの L7 AWS WAF / Cloudflare / Akamai / F5 / ModSecurity
Cloud Firewall クラウドリソース毎 AWS Security Group / NACL, Azure NSG, GCP Firewall Rules

これら 4 系統は競合しない、組み合わせて使う。AWS 上の Web 3 層アプリで言うと:

  • AWS WAF — CloudFront / ALB 前段で L7 攻撃 (SQLi / XSS / Bot / Rate limit) を弾く
  • Security Group — ALB は 80/443 のみ、App は ALB からのみ、DB は App からのみ、と instance ごとの最小許可
  • NACL — VPC サブネット境界の broad 制御 (Stateless、SG の補助)
  • Host Firewall — EC2 内の OS レベルで nftables で更に絞る (defense in depth)

「1 つの Firewall に全てを期待しない」のが現代の設計。各層で役割を切り分けることで、1 層がミス設定でも他層が守る。

05

NAT との関係 — Firewall とよく混同される #

家庭の Wi-Fi ルータが「Firewall も内蔵」とよく言われるが、これは正確には NAT (Network Address Translation) が偶然 Firewall として機能している だけ。NAT と Firewall は本来別の機能。

▸ かみ砕いて言うと — NAT は「マンション管理人」、Firewall は「警備員」

家庭の Wi-Fi ルータが「外から守ってくれている」と感じるが、実はそれは NAT (= マンションの管理人) が「外から来た知らない客に取次先が分からない」から偶然守っているだけ。本物の Firewall (= 警備員) は別の仕事。NAT が無くなる IPv6 時代では、この「偶然の防御」が消えるので、明示的に Firewall ルールを書く必要がある。家庭用ルータでもポートフォワーディングや UPnP で穴が開くと、NAT は防御として完全に無力になる、という点だけ覚えておくと混乱しない。

NAT Firewall
目的 IP アドレス変換 (内部 private → 外部 global) アクセス制御
動作 送信元・送信先 IP/Port を書き換える 通す / 通さない判定
副作用 外→内の unsolicited 接続は変換先が決まらず到達不能 (副作用なし、純粋なフィルタ)

NAT は「内→外」の接続から自動でマッピングを作るため、外→内の unsolicited 接続はマッピングが存在せず到達できない。これが「NAT のお陰で偶然守られている」現象。

▸ IPv6 移行で「NAT の偶然の防御」が消える

NAT は Firewall ではない。ポートフォワーディングを設定すれば穴が開き、UPnP / NAT-PMP が有効だとアプリが勝手にマッピングを作る (一部 IoT カメラ / ゲーム機)。IPv6 では NAT を使わないのが基本のため、明示的な Firewall ルールが必須になる。IPv6 時代の家庭ルータは NAT に頼らず Firewall を有効にするのが標準ガイダンス。

06

NGFW — L7 で何ができるか #

NGFW (Next Generation Firewall) は 2007 年頃 Palo Alto Networks が市場を作った概念で、Stateful + DPI + IPS + Application ID + URL Filtering + User ID + SSL Inspection を統合した装置。「ポート 443 で何が来ているか」を中身を見て判別できることが特徴。

従来 Stateful NGFW
判断軸 IP / Port / Proto + アプリ (Skype/Zoom/Dropbox/SSH) / ユーザ (AD ID) / カテゴリ (SNS/ニュース) / 脅威 (シグネチャ)
HTTPS 中身は見えない (ヘッダのみ) SSL 復号で中身を見る (= MITM 構成)
典型ルール 「10.0.0.0/24 → any:443 許可」 「営業部 → Salesforce のみ許可、Dropbox は拒否、Twitter は読み取り専用」

SSL Inspection (= SSL/TLS 復号) は NGFW の最大の論点:

  • 企業 CA 証明書を端末にインストール → NGFW が中継して復号 → スキャン → 再暗号化
  • ○ L7 攻撃検知 / DLP (Data Loss Prevention) が実現できる
  • × プライバシー (社員の HTTPS 通信を企業が読める)
  • × 一部サイトが Certificate Pinning で復号失敗 (銀行アプリ / Google 一部)
  • × 性能ペナルティ (10 Gbps 級でも復号は重い)
▸ NGFW 運用面の壁

アプリ ID シグネチャの更新に依存 (新アプリ / バージョン / トラフィック偽装で識別が破られる)、ルール肥大化 (アプリ × ユーザ × カテゴリの組合せで数千ルール)、誤検知での業務影響 (SaaS のアップデートで突然弾かれる) が日常的な問題。

07

WAF — L7 専用の Firewall #

WAF (Web Application Firewall) は Web アプリケーション (HTTP/HTTPS) 専用の L7 Firewall。NGFW より深く・狭く Web に特化し、SQLi / XSS / CSRF / コマンドインジェクション / Path Traversal / Bot / Rate limit などを HTTP リクエストレベルで検査する。

▸ かみ砕いて言うと — WAF は「Web 専門の用心棒」

通常の Firewall は 「誰が来たか (IP / ポート)」を見るが、WAF は 「客が何を注文したか (HTTP の中身)」を読んで判断する Web サイト専門の用心棒。SQL インジェクションのような 「お客が悪意のあるリクエストを書いてくる」攻撃を Firewall は通してしまうが、WAF は中身を読んで弾く。個人サイトでも Cloudflare の無料プランを前段に置けば基本的な WAF が無料で付く。ただし 「WAF があるから SQL 対策はしなくていい」は危険 — アプリ側でも必ずプリペアドステートメントを使う、というのが正しい多層防御。

典型構成は [インターネット] → [CDN/WAF] → [ALB] → [Web] → [App] → [DB]

OWASP CRS (Core Rule Set) がデファクトのルール集で、OWASP Top 10 の大半を 1 セットでカバーできる。

攻撃 WAF で防げる?
SQL Injection (古典的 ' OR 1=1) ◎ 既知パターン
XSS (古典的 <script>) ◎ 既知パターン
CSRF △ Origin / Referer 検査くらいまで
ロジック不備 (例: price 改ざん) × アプリしか知らない
認証/認可バグ × 同上
ゼロデイ × シグネチャに無い
Bot / Credential Stuffing ○ Rate limit / Bot 検知
L7 DDoS ○ Rate limit / CAPTCHA

主要 WAF: AWS WAF / Cloudflare / Akamai / Fastly (クラウド型)、F5 BIG-IP ASM / Imperva (オンプレ)、ModSecurity (OSS, Apache/Nginx モジュール)。

▸ WAF は「アプリの実装バグの代わり」にはならない

「WAF があるから SQLi 対策はしなくていい」は危険。プリペアドステートメント + ORM + 入力検証が一次対策、WAF はあくまで多層防御の最後の砦。

08

クラウド時代の Firewall — SG / NACL / SASE #

クラウド (AWS / Azure / GCP) では Firewall の概念が大きく変質した。「IP 境界」ではなく「リソース単位」「Identity 単位」で制御する。

AWS の場合:

機能 種類 動作
Security Group (SG) Stateful, instance / ENI 単位 デフォルト deny / 許可ルールだけ書く / 戻りは自動
NACL Stateless, subnet 単位 番号順評価 / allow と deny を明示 / 戻りは別ルール
AWS WAF L7, CloudFront/ALB/API GW 前 OWASP / 独自シグネチャ
AWS Network Firewall Stateful + DPI, VPC ゲートウェイ 商用 NGFW 相当 (Suricata ベース)

Security Group の特徴は 「SG から SG を許可」 が書けること。IP CIDR ではなく他の SG ID を source に書ける → インスタンスがスケールしても自動で IP が更新される。

Terraform — ALB が App を呼ぶ SG ルール
resource "aws_security_group_rule" "app_from_alb" { type = "ingress" from_port = 8080 to_port = 8080 protocol = "tcp" source_security_group_id = aws_security_group.alb.id # IP ではなく SG ID security_group_id = aws_security_group.app.id }

SASE (Secure Access Service Edge) は 2019 年 Gartner が提唱した概念で、Firewall / VPN / SWG (Secure Web Gateway) / CASB / ZTNA をクラウド側で統合するモデル。Cloudflare One / Zscaler / Netskope / Palo Alto Prisma が主要プレイヤー。

従来 (Hub & Spoke): 従業員 → 拠点 → 本社 Firewall → 各 SaaS SASE モデル: 従業員 → クラウド POP (Firewall+SWG+ZTNA) → 各 SaaS / 本社

「ユーザがどこにいても同じ Firewall ポリシーが適用される」のが SASE の本質で、コロナ以降のリモートワークで一気に採用が進んだ。

09

なぜ Firewall だけでは守れなくなったのか #

「Firewall だけでは大半の侵害を防げない」が業界の共通認識。Verizon DBIR / Mandiant M-Trends でも、Firewall を通り抜けた攻撃が侵害の主流

▸ 意識すべき — Firewall は「玄関の鍵」、家中の鍵ではない

Firewall は 「家の玄関の鍵」で、これだけで家を完全に守れる訳ではない。(1) 玄関を開けて入った人 (= 正規ログインで侵入された場合) には無力。(2) 鍵がかかっていても 窓 (HTTPS) から覗かれた中身は見えない(3) 玄関の鍵自体が壊れる (Firewall 装置の脆弱性 — Fortinet / Ivanti 0day 連発) こともある。だから現代の防御は 「玄関の鍵 (Firewall) + 室内の警報装置 (EDR) + 金庫 (バックアップ) + 各部屋ごとの鍵 (マイクロセグメンテーション)」の多層構成が必須、と覚えればよい。

Firewall が無力な攻撃パターン:

  • HTTPS の中で来るマルウェア / フィッシング / Dropper PDF (L4 Firewall は見えない、NGFW でも SSL 復号しないと見えない)
  • 正規認証情報を使った侵入 (Phishing で奪った credential / Initial Access Broker から購入) → Firewall は正規通信として通す
  • 内部の横移動 — 一度侵入すれば AD / SSH / RDP / SMB は内部 Firewall が薄いほど自由
  • サプライチェーン攻撃 — SolarWinds 等、正規ソフトのアップデート経由 → Firewall は信頼済通信
  • SaaS 経由のデータ流出 — 内部 → SaaS は許可されているので止めない
従来 (Perimeter) Zero Trust
信頼の前提 内側 LAN は信頼、外側は不信 何も信頼しない (Never Trust, Always Verify)
境界 物理ネットワーク境界 Identity / Device / Context が境界
アクセス判定 IP / Port + ユーザ / デバイス姿勢 / 時間 / 場所 / 行動
横移動 内部は緩い → 容易 マイクロセグメンテーションで 1 リソース毎に検査

Zero Trust の中で Firewall はどう変わったか:

  • 境界 Firewall は引き続き必要 (基本のフィルタ)、ただし「ここを通れば信頼」ではなくなった
  • ZTNA (Zero Trust Network Access) が VPN を置き換え始めた — 「VPN で社内に入る」ではなく「個別アプリ毎に Identity 確認して直接接続」
  • micro-segmentation で内部も Firewall まみれに (VM / コンテナ / Pod 単位でルール)
  • Service Mesh (Istio / Linkerd) が「マイクロサービス間の Firewall」として機能 (mTLS + 認可ポリシー)

現代の優れた防御は Firewall + EDR + SIEM + ZTNA + WAF + DLP + IAM の組合せ。Firewall は「重要だが 1 層に過ぎない」位置付け。

10

代表的な事件 — Firewall の限界が露呈したケース #

事件 Firewall 観点の教訓
2010 Stuxnet (ICS) エアギャップされたイラン濃縮施設に USB 経由で侵入 → Firewall 無関係。物理層信頼前提が崩壊
2013 Target (4000 万件) HVAC ベンダー経由で侵入後、内部 Firewall が薄く POS まで横移動可能。境界は機能していた
2017 Equifax (1.4 億件) 公開 Web の Struts 脆弱性で侵入 → WAF が期限切れ証明書で動作不全
2017 NotPetya 会計ソフト経由のサプライチェーン (M.E.Doc) → 正規ソフト通信として通過 → EternalBlue で SMB 横移動
2020 SolarWinds Orion 正規アップデートにバックドア → C2 は HTTPS で正規 CDN 通過
2021 Colonial Pipeline 使われていない VPN アカウントから侵入 → Firewall は「正規 VPN 接続」として通した
2024 Fortinet / Ivanti / Check Point 0day 連発 Firewall 装置自体の脆弱性 — 守るはずの装置が踏み台になる事例が増加

共通パターン: 「Firewall が無いから侵害された」のではなく、「Firewall を通る正規通信に紛れて侵入された」「Firewall の内側を緩めに作っていた」「Firewall 装置自体が攻撃された」。境界 Firewall を維持することは依然必須だが、それだけに頼る発想が古い。

11

防御 — Firewall を活かす現代的な設計 #

Firewall を有効に保つための実務的なポイント:

設計 内容
Default deny 全レイヤ (perimeter / SG / host) で「明示許可以外は拒否」
最小権限 SG / NSG ルールは「from any → all ports」ではなく必要最小に絞る
マイクロセグメンテーション 内部も平坦な LAN にせず、サービス / Tier 毎に Firewall 境界を引く
NGFW の SSL Inspection 可能な範囲で復号して L7 検査 (法務・労務面と協議)
WAF + OWASP CRS 公開 Web には必ず WAF を前段で。CRS を最新に保つ
ルール棚卸し 半年〜年次で「使われていないルール」を削除 (hit-count 機能を使う)
ベンダー脆弱性 Firewall 装置自体の KEV を即パッチ。EoL モデルは即交換
Log + SIEM deny / allow ログを SIEM (Splunk / Sumo / Elastic) に流して異常通信を検知
ZTNA / SASE 検討 VPN を置き換え、リモート時代に合った Firewall モデルへ
nftables — 最小ファイアウォール (default deny + ssh のみ)
$ sudo nft add table inet filter $ sudo nft add chain inet filter input '{ type filter hook input priority 0 ; policy drop ; }' $ sudo nft add chain inet filter forward '{ type filter hook forward priority 0 ; policy drop ; }' $ sudo nft add chain inet filter output '{ type filter hook output priority 0 ; policy accept ; }' $ sudo nft add rule inet filter input ct state established,related accept $ sudo nft add rule inet filter input iifname "lo" accept $ sudo nft add rule inet filter input tcp dport 22 accept
▸ まとめ

Firewall は「ルールに合致しない通信を遮断する」基本動作のまま、Packet Filter → Stateful → Application Proxy → NGFW → Cloud/Zero Trust と 見る階層を上げてきた歴史を持つ。Host Firewall / WAF / Cloud SG / Service Mesh の各層が同時に Firewall として機能しているのが現代のシステムで、Defense in Depth で多層に組み合わせるのが基本設計。Firewall だけで守れない時代に入った今、Zero Trust の発想 (内側を信頼しない / Identity と Device 姿勢で判定 / マイクロセグメンテーションで横移動を止める) に移行することが Firewall を活かす唯一の道筋になる。

𝕏 ポスト B! はてブ