MACアドレステーブルの深淵:スタティック登録とポートセキュリティが守る「L2の防壁」
ネットワークエンジニアにとって、スイッチのMACアドレステーブル(CAMテーブル)は単なる転送先リストではない。それは、その物理ポートの先に「何が接続されているか」という、信頼の起点(Root of Trust)そのものだ。
現代のゼロトラストアーキテクチャにおいて、L2レベルでのエントリ制御は古臭い手法のように思えるかもしれない。しかし、物理層・データリンク層のガードを固めない限り、上位層のTLSハンドシェイクやTCPバッファチューニングをいくら最適化しても、基礎が脆ければすべては砂上の楼閣と化す。
本稿では、スタティックMACエントリの堅牢な管理と、ポートセキュリティによる動的制御を、パケットレベルの挙動から紐解いていく。
—
1. CAMテーブルの「汚染」とスタティック登録の意義
スイッチのMACアドレステーブルが動的に学習される過程は、EthernetフレームのSource MACを覗き見ることによって行われる。これは便利だが、MACスプーフィングに対する耐性は皆無に近い。
ここで登場するのが「スタティックMACエントリ」だ。これを登録すると、スイッチのASIC(Application Specific Integrated Circuit)は、そのMACアドレスを該当ポートにハードコーディングする。
スタティック登録の真価
動的なMACエントリはAging Timer(デフォルト300秒など)によって消去されるが、スタティックエントリは永続的だ。これは単なる固定化ではない。「不明なMACアドレスからのパケットを一切受け付けない」という、極めて強力なフィルタリング要件を構築するための第一歩となる。
# Cisco IOSでのスタティック登録例
# 特定のサーバのNIC(MAC: 0011.2233.4455)をGi0/1に固定
Switch(config)# mac address-table static 0011.2233.4455 vlan 10 interface GigabitEthernet0/1
この設定を行うと、CAMテーブルの論理回路レベルで当該アドレスが保護される。MACフラッディング攻撃を受けた際も、このエントリは追い出されることはない。
—
2. ポートセキュリティ:自動ロックの仕組みとパケット廃棄の瞬き
Port Securityは、CAMテーブルの動的学習を「制限」する機能だ。特に、stickyオプションを用いた運用は現場の救世主となる。
内部挙動の深掘り
ポートセキュリティが有効なポートに未知のMACアドレスが到達した瞬間、スイッチはViolationモードに応じて以下の挙動をとる。
1. shutdown: ポートを物理的に閉塞。最も安全だが、運用負荷が高い。
2. restrict: フレームをドロップし、SNMPトラップを送信。ログを残しつつ通信を遮断する。
3. protect: サイレントドロップ。ログも残さない(デバッグが困難になるため推奨しない)。
# ポートセキュリティの最適解(Sticky設定)
interface GigabitEthernet0/1
switchport mode access
switchport port-security
# 学習したMACをランニングコンフィグに書き込む
switchport port-security mac-address sticky
# 最大接続数を1に制限(PC+ハブを許さない)
switchport port-security maximum 1
# 違反時は即座にシャットダウン
switchport port-security violation shutdown
—
3. L2の安定がもたらす上位層への恩恵
なぜ、たかがMACアドレスにこだわるのか。それはRTT(Round Trip Time)の安定化に直結するからだ。
MACアドレステーブルが不安定(フラッピングなど)になると、Unknown Unicastが大量発生し、スイッチは全ポートへフレームを転送(Flooding)する。これにより、本来不要なホストまでネットワーク帯域を消費し、NICのバッファを圧迫する。
結果として、TCPのハンドシェイクにおいて、SYNパケットの再送が発生したり、輻輳制御アルゴリズム(CUBICやBBR)が帯域制限を誤認してスループットが急落する。
ネットワークチューニングの鉄則
1. L2の決定論的な挙動を担保する: スタティックMACとポートセキュリティで、不要なブロードキャスト/マルチキャストを排除。
2. バッファの最適化: Linux側のsysctl設定でtcp_rmemやtcp_wmemを調整する際、NICのリングバッファと合わせてL2の輻輳を考慮する。
# Linuxカーネルパラメータの例(参考)
# ネットワークスタックのバッファを拡張し、L2のゆらぎに耐性を持たせる
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
—
4. スペシャリストとしての提言:セキュリティと可用性のバランス
ポートセキュリティは強力だが、運用ミスによるダウンタイムのリスクも孕んでいる。特に、仮想化基盤やコンテナオーケストレーション環境では、MACアドレスが動的に生成されるため、スタティックな縛りは致命的だ。
- 物理サーバやIoTデバイス: スタティックMAC + ポートセキュリティを厳格に適用。
- 仮想化ホスト(ESXi/KVM):
802.1X認証によるポート制御への移行を検討。
L2スイッチを単なる「つなぎ役」と見なすか、あるいは「最初の検問所」と見なすか。その意識の差が、大規模トラフィックを扱う際の堅牢性に如実に表れる。ネットワークプロトコルの美学は、こうした地味な設定の積み重ねの中にこそ宿るのだ。
パケットは嘘をつかない。L2の防壁を固め、その上でTLSのオーバーヘッドを削り、カーネルバッファを研ぎ澄ます。これこそが、アーキテクトが追求すべき「ネットワークの最適解」である。
コメント