ファイアウォールは、パケット 1 つではなく往復を見る
帰りを通す行を人が書いていないのに返事が返ってくる理由を、接続状態テーブルと ACL の判定順として 1 枚の図で見る
目次
勉強会では、ルータの代わりにファイアウォールを 1 台置いて、社内から外へ通信を出しました。 図 9 の ACL は、パケット 1 つごとに行を上から見て、通す・通さないを決める仕組みでした。 それだけなら、行きを通す行と帰りを通す行の両方を人が書くことになります。 ところが帰りの行を書かなくても、返事は返ってきました。 この記事は、その差がどこから来るのかを 1 枚の図で見ます。
扱うのは、製品としてのファイアウォールの設定のやり方ではなく、通過の可否を決める仕組みの側です。 CCNA 200-301 v1.1 の出題範囲でいえば 1.1.c「Next-generation firewalls and IPS」にあたります。 裏取りに使った資料が Cisco のファイアウォール製品のものなので、機能の名前はその呼び方で出てきます。
この連載は、ネットワークの言葉を 3 つの層に置いて読みます。 もの(物理か論理か)、結びつき(人が設定で付ける手動か、機器が学習する自動か、製造時に決まる固定か)、通信フロー(1 本の通信がそれらを順に通る道筋)の 3 つです。
登場するもの
ファイアウォール
物理の箱です。 ルータと同じく IP を見て、別のネットワークへ渡します。 違うのは既定の答えで、外から中への新しい通信は通しません。
セキュリティレベル
口ごとに付ける 0〜100 の数値です(論理・手動)。 内側を 100、外側を 0 にします。 ACL を書かないときの既定の答えにあたり、口に ACL を付ければそちらが優先します。
接続状態テーブル
通った通信 1 本につき 1 行できる表です(論理・自動)。 行の中身は、両端の IP とポート番号、そしてプロトコルです。 人は 1 行も書きません。
結びつき
- 口 ⇄ セキュリティレベル、口 ⇄ ACL は、どちらも手動です。人が設定します。
- 接続状態テーブルの行 ⇄ 実際に通った通信は自動です。図 9 の ACL は全部手で書いたので、ここが対照になります。
通す・通さないが決まる順
先に接続状態テーブルを引き、ACL の判定はその後です。 表に行があれば、以降の判定を飛ばして通します。これがステートフルインスペクションです。 行が無い通信だけがセキュリティレベルと ACL の判定に進み、そこを通れば表に 1 行できます。 データの中身まで見るアプリケーションインスペクションは、さらにその後です。 どの通信の中身を見るかは人が決め、見た結果どの穴を開けるかは自動です。
資料では、パケットの処理は 11 段に分かれ、3 段目が接続テーブルの確認、4 段目が ACL、6 段目がインスペクションです。 3 段目で既存の接続に一致すると、ACL の判定は飛ばされます。
通信フロー
支店の PC-A(192.168.10.10)から、外のウェブサーバ(192.0.2.50 の TCP 80 番)へつなぎに行きます。
① 表を引いても行が無いので、向き(内側 100 → 外側 0)と ACL の判定へ進み、通ります。通ったときに、表へ 1 行できます。
② 返事が外側に届きます。表に行があるので、向きの判定に進む前に通ります。ここが図 9 の ACL には無い判断です。
③ 外から新しく始まった通信は、表に行が無いので向きと ACL の判定へ進み、そこで止まります。外から受けたいものがあれば、ACL に行を書いて開けます。
④ 行きと帰りが別のファイアウォールを通る形(非対称ルーティング)では、帰りを受けた側は行きを見ていません。表に行が無いので、本来の返事でも捨てます。
図 22
図の上半分が構成図とフローの番号、下半分が接続状態テーブルの推移と通信の中身の推移です。
図 5・図 9 との接続
図 5 の ②「テーブルの行を探して出口を決める」の前に、そもそも通してよいかの関門が入ります。 通った後の MAC の付け替えは、図 5 とまったく同じです。
図 9 の ACL は、1 パケットごとに行を上から見る判定でした。 図 22 は、その手前に往復を単位にした表を置きます。 ACL に帰りの行が無くても返事が通るのは、表に行があって ACL の判定に進まないからです。 図 7 で残った 3 つの問題は、この図では解きません。図 22 が扱うのは、通してよいかを誰がどう決めるか、の 1 点です。
未検証・注意
- 接続状態テーブルの行が何秒で消えるか(アイドルタイムアウトの既定値)は確かめていません。
- この図では住所の書き換え(NAT・図 8)を省いています。実際の出口では NAT が同時に効き、①の送信元 IP は外側の住所に書き換わります。図の帯の ② は ① の鏡像として描いてあります。
- 勉強会での観察として書いたことが 2 つあります。両方の口をセキュリティレベル 100 にすると外から中への ping が通り、外側を 0 に戻すと通らなくなりました。ping の戻りは、ICMP をインスペクションの対象に入れてから通りました。機器の版による違いは確かめていません。
- 既定で有効なインスペクションの一覧に ICMP が入っていないことは、資料にある既定の設定で確認しました。上の観察と向きは合いますが、勉強会の機器でその一覧を表示して見たわけではありません。
- 高いレベルの口から低いレベルの口へ既定で自由に流れることは、ASA 8.1 の資料の文で確認しました。低いレベルから高いレベルへ通したいときに ACL へ行を書く、というのは、判定が 4 段目の ACL に進むというパケットフロー資料の記述からの読みで、そう書いた文を見つけたわけではありません。同じ値の口どうしには別の設定(same-security-traffic)が要ります。
- 設定を GUI(ASDM)から行えることは資料にありますが、この記事では扱いません。
出典
- 勉強会での本人の観察(2026-09-13 実機ハンズオン。資料は非公開)
- Cisco: ASA Packet Flow — 処理は 11 段。3 段目が接続テーブルの確認、4 段目が ACL、6 段目がインスペクション。「If the packet flow matches a current connection, then the Access Control List (ACL) check is bypassed and the packet is moved forward.」
- Cisco: ASA 8.1 Configuration Guide, Introduction — 「By default, the security appliance allows traffic to flow freely from an inside network (higher security level) to an outside network (lower security level).」/最初のパケットは session management path、以降は fast path で TCP シーケンス番号などを確認する
- Cisco: Getting Started with Application Layer Protocol Inspection — データ部に IP アドレスを埋め込む通信と、動的にポート番号を決める通信のためにインスペクションが要る。既定の
policy-map global_policyの一覧にinspect icmpは入っていない - インフラエキスパート: Cisco ASA セキュリティレベル — 各インターフェースに 0〜100 のセキュリティレベルを設定する/同じ値の口どうしは
same-security-traffic permit inter-interfaceで通す - インフラエキスパート: ステートフルインスペクション — 往路の情報をセッション情報として保存し、戻りのパケットと照合して一致すれば通し、一致しなければ遮断する
- CCNA 200-301 v1.1 出題範囲 — 1.1.c「Next-generation firewalls and IPS」
関連
-
ネットワーク_INDEX — 連載の目次
-
連載の入口: ネットワーク_00_3層で言葉を置く(
/notes/nw-basics-00-three-layers) -
前の記事(図 21): ネットワーク_21_SDN(
/notes/nw-basics-21-sdn) -
次の記事(図 23): ネットワーク_23_リモートアクセスVPN(
/notes/nw-basics-23-remote-access-vpn) -
土台になる記事(図 5): ネットワーク_05_行きと帰り(
/notes/nw-basics-05-static-route) -
1 パケットごとに判定する側: ネットワーク_09_ACL(
/notes/nw-basics-09-acl)
この記事の校閲記録
誰が・いつ・どの版の・どの段落を・何の観点で見て、何と言ったかを全件そのまま出す(追記のみ・削除しない)。
段落 33 のうち出典つき 14・出典なし 19
v1 2 件
AIAI (claude-fable-5) が AI 確認未解決
パケットの処理が 11 段に分かれ、3 段目の接続テーブルの確認で既存の接続に一致すると ACL の判定が飛ばされること(『If the packet flow matches a current connection, then the Access Control List (ACL) check is bypassed』)、4 段目が ACL、6 段目がインスペクションであることを Cisco のパケットフロー資料で確認した。高いレベルの口から低いレベルの口へは既定で自由に流れることを ASA 8.1 の資料で確認し、低いレベルから高いレベルへ通す場合に ACL の行が要ることは、判定が 4 段目の ACL に進むという同じ資料の記述として書いた。セキュリティレベルが 0〜100 であること・同レベルの口どうしに same-security-traffic が要ることはインフラエキスパートで確認した。既定の policy-map global_policy に inspect icmp が入っていないことを ASA 9.1 の設定ガイドの既定設定の記述で確認した。CCNA 1.1.c『Next-generation firewalls and IPS』を出題範囲の本文で確認した。接続状態テーブルのアイドルタイムアウトの既定値は確認できず未検証と書いた。守秘: 実名・社名・会場名・地名・金額なし
AIAI (claude-fable-5) が 編集未解決
公開前の校閲。frontmatter のタグ security を、図 9・図 17 と同じ「セキュリティ」に揃えた。関連の前後の記事へのリンクに /notes/ のパスを足した。先に接続状態テーブルを引き、一致すれば ACL の判定を飛ばすという順序は、出典の引用文と一致しているのでそのままにした。
参考文献
- 二次Cisco: ASA Packet Flow参照 2026-09-14
- 二次Cisco: ASA 8.1 Configuration Guide, Introduction参照 2026-09-14
- 二次Cisco: Getting Started with Application Layer Protocol Inspection参照 2026-09-14
- 二次インフラエキスパート: Cisco ASA セキュリティレベル参照 2026-09-14
- 二次インフラエキスパート: ステートフルインスペクション参照 2026-09-14
- 二次CCNA 200-301 v1.1 出題範囲参照 2026-09-14
更新履歴
- 連載のトピックを「ネットワーク基礎」から「ネットワーク」へ改名(32 本+目次。slug と URL は不変)
- 公開: 連載「ネットワーク基礎」図 8〜24 の記事 17 本と目次の更新
機械可読の記録
- article.json(記事の正本)
- reviews.json(校閲記録)
- blocks.json(ブロック一覧)