弱者は決して許すことができない。許しは強者の態度である── ガンディー
ネットワーク

落ちた通信は、経路表を探すところまで行かない

ルータの口に「通す・通さない」の行の並びを付け、上から順に照らして最初に一致した行で決める。図 6 と同じ構成で、VLAN 20 から VLAN 10 へのウェブだけを止める

ぴぐおv1人の校閲なし(AI のみ)訂正なし
ネットワークaclセキュリティconcept
目次

図 3 では、VLAN を分けると届かなくなること、間にルータを置けば制御できることを書きました。

その「制御」の中身には触れていませんでした。 図 9 は、その実体を扱います。 図 7 で挙げた 3 つの問題を解く道具ではなく、図 3 で保留にしたものを取りに戻る 1 枚です。 ここで出てくる行の並びは、図 11 の IPsec で「どの通信を守るか」の選別にもう一度出てきます。

この連載は、ネットワークの言葉を 3 つの層に置いて読みます。 もの(物理か論理か)、結びつき(人が設定で付ける手動か、機器が学習する自動か、製造時に決まる固定か)、通信フロー(1 本の通信がそれらを順に通る道筋)の 3 つです。

登場するもの

ACL(アクセスコントロールリスト)

論理のもので、人が書きます。 「通す(permit)」「通さない(deny)」の行の並びです。 上から順に照らし、最初に一致した行で決まります。 以降の行は見ません。 書いていなくても最後に「全部拒否」の行が必ずあります。

標準 ACL と拡張 ACL

標準 ACL は番号 1〜99(と 1300〜1999)で、送信元 IP だけを見ます。 拡張 ACL は番号 100〜199(と 2000〜2699)で、名前でも書けます(標準 ACL も同じです)。 見るのは送信元 IP・宛先 IP・プロトコル・送信元ポート番号・宛先ポート番号です。 この図で使っているのは名前付きの拡張 ACL です。

ワイルドカードマスク

行に書く 0.0.0.255 のような値です。 0 の桁は照合し、1 の桁は照合しません。 0.0.0.255 なら「最後の 1 桁は何でもよい」、つまり 192.168.20.0/24 のどれでも、という意味になります。

結びつき

  • インターフェースと向き ⇄ ACL は手動です。どの口の in(入ってくる通信)か out(出ていく通信)かを人が決めます。1 つの口の 1 つの向きに付けられる ACL は 1 つだけです。
  • 図 1 から図 7 までのテーブルと違い、通信では行が増えません。増えるのは各行に一致した回数だけで、show access-lists で読めます。破棄した通信もこの数に残るので、どの行で落ちたかを後から追えます。

通信フロー

図 6 と同じ構成です。 ルータ 1 の Gi8.20 の in に、次の 2 行の ACL を付けてあります。 1 行目は「送信元が 192.168.20.0/24、宛先が 192.168.10.0/24、プロトコルが TCP、宛先ポート番号が 80」のときだけ拒否します。 2 行目はそれ以外を全部許可します。

① PC-D(192.168.20.30)から PC-A(192.168.10.10)へのウェブ。Gi8.20 から入るので判定されます。1 行目に一致して破棄されます。ルーティングテーブルを見る前に落ちます。

② PC-A から PC-D への ping。Gi8.10 から入ります。この口に ACL は付いていないので判定は無く、そのまま届きます。

③ ② の返事(D から A)。Gi8.20 から入るので判定されます。不一致の理由は「TCP ではない」ことです。ポート番号の有無は理由ではありません。1 行目はまずプロトコルを見て、ping は ICMP なのでここで外れ、2 行目の permit で通ります。

④ PC-D からデータセンターの PC-C へのウェブ。1 行目は宛先が 192.168.10.0/24 のときだけの条件なので一致せず、2 行目の permit で通ります。

2 行目を書かなければ、③ も ④ も最後の暗黙の拒否に落ちます。 拒否したい行だけを書くと、残り全部が止まります。

図 9

図の上半分が構成図と ACL の中身、下半分が各テーブルの推移と通信の中身の推移です。

ACL:ルータの口に「通す・通さない」の行の並びを付けて、上から順に照らす 図 3 で言った「間にルータを置いて制御する」の実体。図 6 と同じ構成で、VLAN 20 から VLAN 10 へのウェブだけを止める PC-A VLAN 10 192.168.10.10 PC-D VLAN 20 192.168.20.30 スイッチ 1 ポート 1: VLAN 10 ポート 2: VLAN 20 ポート T: トランク 1 2 T トランク タグ 10 / 20 ルータ 1 Gi8.10(タグ 10)192.168.10.1 Gi8.20(タグ 20)192.168.20.1 Gi1 172.16.12.1(ルータ 2 へ) Gi8.20 の in に ACL を適用 (下の箱がその中身) Gi8 Gi1 ルータ 2 172.16.12.2 PC-C 192.168.3.10 (データセンター) 2 1 3 4 ① ③ ④ は VLAN 20 から入るので判定される / ② は VLAN 10 から入るので、この ACL では判定されない ルータ 1 の ACL(名前付きの拡張 ACL・acl-vlan20) 10 deny  tcp 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255 eq 80 20 permit ip any any (書いていないが必ずある最後の行)deny ip any any = 暗黙の拒否 ・上から順に照らし、最初に一致した行で決まる。以降の行は見ない ・0.0.0.255 は「この桁は照合しない」の印。192.168.20.0/24 のどれでも、の意味 ・1 行目は「プロトコルが TCP」かつ「宛先ポート番号が 80(ウェブ)」のときだけの条件 どこに・どちら向きに付けたか interface Gi8.20  ip access-group acl-vlan20 in ・in = その口から入ってくる通信を見る ・out = その口から出ていく通信を見る ・1 つの口の 1 つの向きに付けられる  ACL は 1 つだけ ・付ける先を決めるのは人(手動) 標準 ACL 番号 1〜99(1300〜1999) 見るのは送信元 IP だけ 宛先で絞れないので、宛先の近くに置くのが定石 (置き場所の定石は二次資料のみ。下の注を見る) 拡張 ACL(この図で使っている方) 番号 100〜199(2000〜2699)。名前でも書ける 送信元 IP・宛先 IP・プロトコル・送信元ポート番号・宛先ポート番号 早く落とせるので、送信元の近くに置くのが定石 (すべての設計でそうすべきかは確認していない) フロー ① PC-D → PC-A のウェブ(宛先ポート番号 80):Gi8.20 から入るので判定される。1 行目に一致 → 破棄。ルーティングテーブルを見る前に落ちる ② PC-A → PC-D の ping:Gi8.10 から入る。この口に ACL は付いていないので判定は無く、そのままルーティングされて D に届く ③ ② の返事(D → A):Gi8.20 から入るので判定される。1 行目は「プロトコルが TCP」の条件。ping は ICMP なので一致せず、2 行目の permit で通る ④ PC-D → PC-C(データセンター)のウェブ:1 行目は宛先が 192.168.10.0/24 でないので一致せず、2 行目の permit で通る もし 2 行目(permit ip any any)を書かなかったら:③ も ④ も最後の暗黙の拒否に一致して落ちる。拒否したい行だけ書くと、残り全部が止まる 3 層で見ると もの:ACL(論理・手動。通す/通さない の行の並び)。標準は送信元 IP だけ、拡張は送信元・宛先・プロトコル・ポート番号まで見る 結びつき:インターフェースと向き ⇄ ACL(手動。どの口の in か out かを人が決める)。図 1〜7 のテーブルと違い、行は通信では増えない フロー:図 6 の ③「宛先 IP をテーブルで探して出口を決める」の前に、入口で 1 回の判定が入る。落ちた通信はテーブルを探すところまで行かない ACL は 1 本ずつ別々に照らすだけで、行きと返事を結び付けない。「192.168.20.0/24 → 192.168.10.0/24 を全部拒否」と書くと、② の返事(③)も同じ行に落ちる その場合、A から D への ping も往復が成立せず失敗する。この図が「eq 80」でサービスを絞っているのは、そうならないようにするため 各テーブルの推移(ACL だけは通信で育たない。ここが図 1〜7 のテーブルと違う) 前提: 図 6 と同じ Router on a Stick。ルータ 1 の Gi8.20 の in に ACL を付けた(他の口・他の向きには付けていない) ルータ 1: ACL(Gi8.20 の in) 10 deny tcp 192.168.20.0/24 →   192.168.10.0/24 の 80 番 20 permit ip any any (暗黙)deny ip any any 通信では行は増えない ルータ 1: ルーティングテーブル 192.168.10.0/24 → Gi8.10(自動) 192.168.20.0/24 → Gi8.20(自動) 192.168.3.0/24 → 172.16.12.2(手動) ① はここまで来ない ルータ 1: ARP テーブル ② 追加: 192.168.20.30 → MAC D (D へ出すために引いた) ① は落ちるので、何も残らない 一致した回数(show access-lists) 10 行目: ① で 1 増える 20 行目: ③ ④ で増える 破棄した通信も数に残るので、 「どの行で落ちたか」を後から追える 増えるのはこの数だけ 通信の中身の推移(フローごとのフレーム/パケット) ① PC-D → ルータ 1(Gi8.20 の in) 宛先 MAC MAC R1-Gi8 送信元 MAC MAC D タグ(VLAN 番号) 20 宛先 IP 192.168.10.10 送信元 IP 192.168.20.30 送信元ポート番号 50000 宛先ポート番号 80 データ ウェブ フレーム=全部。ただしスイッチが見るのは MAC とタグの部分だけ パケット=この部分。ルータはここ(IP)を見る ① の判定 1 行目(deny tcp 192.168.20.0/24 → 192.168.10.0/24 eq 80)に一致 → 破棄。この後の行もルーティングテーブルも見ない ② PC-A → ルータ 1(Gi8.10 の in) 宛先 MAC MAC R1-Gi8 送信元 MAC MAC A タグ(VLAN 番号) 10 宛先 IP 192.168.20.30 送信元 IP 192.168.10.10 送信元ポート番号 ICMP には無い 宛先ポート番号 ICMP には無い データ ping ② の判定 Gi8.10 の in に ACL は付いていない → 判定なし。そのままルーティングテーブルへ。ping は ICMP なので、TCP/UDP のポート番号の欄そのものが無い ③ ② の返事 PC-D → ルータ 1(Gi8.20 の in) 宛先 MAC MAC R1-Gi8 送信元 MAC MAC D タグ(VLAN 番号) 20 宛先 IP 192.168.10.10 送信元 IP 192.168.20.30 送信元ポート番号 ICMP には無い 宛先ポート番号 ICMP には無い データ ping 応答 ③ の判定 不一致の理由は「TCP ではない」。ポート番号の有無は理由ではない。1 行目はまずプロトコルを見て、ping は ICMP なのでここで外れる → 2 行目の permit で通る ④ PC-D → PC-C のウェブ(Gi8.20 の in) 宛先 MAC MAC R1-Gi8 送信元 MAC MAC D タグ(VLAN 番号) 20 宛先 IP 192.168.3.10 送信元 IP 192.168.20.30 送信元ポート番号 50001 宛先ポート番号 80 データ ウェブ ④ の判定 1 行目は宛先が 192.168.10.0/24 のときだけの条件。宛先が違うので一致しない → 2 行目の permit で通る 戻りだけを通す書き方に established がある(Ack または RST ビットの立った TCP が対象・インバウンドの TCP だけ)。ping には効かない IPsec(図 11)では、同じ書き方の ACL を「通す・通さない」ではなく「どの通信を守るか」の選別の印として使う。判定の仕組みは同じ 「標準は宛先の近く・拡張は送信元の近く」は二次資料が挙げる定石。すべての設計でそうすべきかは確認していない 未検証: ICMP のメッセージ種別(echo など)を条件に書くときの書式は確認していない。この図では使っていない 出典(上から順・最初に一致した行で決まる・暗黙の deny・1 つの向きに 1 つ): https://www.infraexpert.com/study/aclz2.html 出典(ワイルドカードマスクの 0 は照合する・1 は照合しない): https://www.infraexpert.com/study/aclz3.html 出典(標準 ACL は 1〜99・送信元 IP だけ・宛先の近くに置く): https://www.infraexpert.com/study/aclz4.html 出典(拡張 ACL は 100〜199・照合項目・送信元の近くに置く・established): https://www.infraexpert.com/study/aclz5.html 出典(show access-lists に一致した回数 matches が出る): https://www.infraexpert.com/study/aclz7.html 出典(入口の ACL は経路探しより先。内側 → 外側は 入口 ACL → 経路探し → NAT → 出口 ACL): Cisco Understand the NAT Order of Operation  https://www.cisco.com/c/en/us/support/docs/ip/network-address-translation-nat/6209-5.html 出典(ウェブの既定のポート番号が 80): RFC 9110 4.2.1 https://www.rfc-editor.org/rfc/rfc9110.html ## 図 6・図 11 との接続

図 6 の ③ では、ルータが宛先 IP をテーブルで探して出口を決めていました。 図 9 では、その前に入口で 1 回の判定が入ります。 落ちた通信はテーブルを探すところまで行かないので、ARP テーブルにも何も残りません。 この順序は、図 8 で使ったのと同じ Cisco のページの表から読めます。

図 11 の IPsec では、同じ書き方の行の並びを「通す・通さない」ではなく「どの通信を守るか」の選別に使います。 判定の仕組みは同じで、使い道だけが違います。

未検証・注意

  • ACL は 1 本ずつ別々に照らすだけで、行きと返事を結び付けません。「192.168.20.0/24 から 192.168.10.0/24 を全部拒否」と書くと、② の返事である ③ も同じ行に落ちます。その場合、A から D への ping も往復が成立せず失敗します。この図が宛先ポート番号 80 でサービスを絞っているのは、そうならないようにするためです。
  • 戻りだけを通す書き方に established があります。Ack または RST ビットの立った TCP が対象で、インバウンドの TCP だけに効きます。ping には効きません。
  • ICMP のメッセージ種別(echo など)を条件に書くときの書式は確認していません。この図では使っていません。
  • 図には「標準は宛先の近く・拡張は送信元の近く」という置き場所の定石を、二次資料が挙げるものとして載せてあります。この記事を書くにあたって標準 ACL・拡張 ACL・名前付き ACL のページを取り直しましたが、本文の中にこの記述を見つけられませんでした。すべての設計でそうすべきかも確認していません。

出典

関連

この記事の校閲記録

誰が・いつ・どの版の・どの段落を・何の観点で見て、何と言ったかを全件そのまま出す(追記のみ・削除しない)。

段落 30 のうち出典つき 12・出典なし 18

v1 2 件
  • AIAI (claude-fable-5) が AI 確認未解決

    出典 7 件を再取得した。上から順に照らして最初に一致した行で決まること・最後に暗黙の拒否があること・1 つの口の 1 つの向きに付けられる ACL は 1 つであることをインフラエキスパートの ACL のページで確認した。ワイルドカードマスクの 0 が照合する・1 が照合しないであることを同サイトのページで確認した。標準 ACL の 1〜99 と 1300〜1999・送信元 IP だけを見ること、拡張 ACL の 100〜199 と 2000〜2699・照合できる項目・established が Ack または RST ビットの立った TCP を対象にしインバウンドの TCP だけに効くことも同サイトで確認した。show access-lists に一致した回数(matches)が出ることを確認した。入口の ACL が経路探しより先に来ることを Cisco のページの表で確認した。ウェブの既定のポート番号 80 は RFC 9110 4.2.1 で確認した。図が引用している「標準は宛先の近く・拡張は送信元の近く」という置き場所の定石は、再取得した標準 ACL・拡張 ACL・名前付き ACL のページの本文からは見つけられなかったため、本文では定石として紹介したうえで未検証に明記した。ICMP のメッセージ種別を条件に書く書式は確認していないので未検証に残した。校正チェックリストを通し、例え話・体言止め・断定を示す禁止語の混入を機械検査した。守秘: 実名・社名・会場名・地名・金額なし

  • AIAI (claude-fable-5) が 編集未解決

    公開前の校閲。frontmatter のタグ ACL を小文字の acl に直した(運用指示書の英語タグの規約と公開済み記事の表記に合わせた)。本文は、Gi8.10 と Gi8.20 が公開済みの図 6 の呼び方と一致すること、拡張 ACL の番号の範囲と暗黙の拒否、③ の不一致の理由が「TCP ではない」であることを図の担当メモと突き合わせて確認し、修正はしていない。

参考文献

更新履歴

  • 連載のトピックを「ネットワーク基礎」から「ネットワーク」へ改名(32 本+目次。slug と URL は不変)
  • 公開: 連載「ネットワーク基礎」図 8〜24 の記事 17 本と目次の更新

機械可読の記録