「勝手に私物のノートPCをスイッチに挿す人がいて困ってる」——ネットワーク管理者なら一度は経験したことがあるんじゃないだろうか。特に客先常駐の現場だと、営業さんが会議室のLANポートに自分のPCをつなげて「ネット見れないんだけど」と言ってくるケースが本当に多い。

こういった不正接続を防ぐのが、CiscoスイッチのPort Security(ポートセキュリティ)機能だ。MACアドレスベースで接続機器を制限するシンプルな仕組みなんだけど、設定パラメータの組み合わせで挙動がかなり変わる。この記事では、stickyラーニング・違反モードの使い分け・エージング設定まで、現場で実際に使う設定パターンを一通り解説する。

Port Security(ポートセキュリティ)とは何か

Port Security(ポートセキュリティ)とは何か

Port Securityは、Ciscoスイッチの各ポートに対して「接続を許可するMACアドレス」を制限する機能。ざっくり言うと、「このポートにはこのMACアドレスの機器しかつなげさせない」というホワイトリスト方式のアクセス制御だ。

仕組み自体はシンプルで、スイッチがフレームのソースMACアドレスを見て、許可リストに載っていなければ違反(violation)として処理する。IEEE 802.1Xのような認証サーバーは不要で、スイッチ単体で完結するのが最大のメリットだと思う。ただ、ユーザー単位じゃなくてMACアドレス単位の制御なので、MACアドレスを偽装されると突破される。そこは正直、限界がある。

📝 補足情報

Port Securityはアクセスポート(switchport mode access)でのみ有効。トランクポートやEtherChannelメンバーポートには設定できない。ダイナミックポート(switchport mode dynamic)のままだとエラーになるので、必ず先にswitchport mode accessを設定すること。

💡 現場での体験談

以前、ある金融系の客先で「会議室のLANポートから社内ネットワークに不正APが接続された」というインシデントがあった。誰かが無線ルーターを持ち込んで、有線ポートに挿してスマホ用のWi-Fiにしていたらしい。Port Securityを入れていれば未然に防げた事例で、それ以降はアクセスポート全台にPort Securityを入れるのが標準設計になった。導入コストはゼロだし、やらない理由がない。

MACアドレス学習方式の違い|static・dynamic・sticky

MACアドレス学習方式の違い|static・dynamic・sticky

Port Securityで許可するMACアドレスの登録方法は3種類ある。現場では圧倒的にstickyを使うことが多いけど、それぞれ特性が違うので整理しておく。

学習方式MACアドレスの登録方法再起動後の保持ユースケース
Static(手動)CLIで1台ずつ手入力running-configに保存される(write memで永続化)サーバールームなど接続機器が固定の環境
Dynamic(自動)最初に接続した機器のMACを自動学習再起動で消える(MACアドレステーブルのみ)一時的な制限、テスト環境
Sticky(自動+保存)自動学習したMACをrunning-configに書き込みwrite memすれば永続化(しなければ再起動で消える)オフィスのフロアスイッチ(実務で最も多い)

ぶっちゃけ、Staticは100ポート超のスイッチで1台ずつMAC打つのが現実的じゃない。かといってDynamicだと再起動で全部消えるから運用が面倒。で、結局stickyに落ち着くパターンがほとんどだ。

図1: 運用負荷の比較(MACアドレス登録方式別)

Static(手動登録)

95%

Dynamic(自動・揮発)

50%

Sticky(自動+保存)

15%

違反モード(Violation Mode)の動作と選び方

違反モード(Violation Mode)の動作と選び方

許可されていないMACアドレスのフレームを受信したとき、スイッチがどう反応するかを決めるのが違反モード。3つのモードがあるが、デフォルトはshutdownで、これがまた現場で問題を起こしがち。

違反モード違反時の動作Syslog通知違反カウンタ復旧方法
shutdown(デフォルト)ポートをerr-disabledにして完全遮断あり増加するshut → no shut が必要
restrict不正MACのフレームだけ破棄(ポートは生きたまま)あり増加する自動復旧(不正機器を外せばOK)
protect不正MACのフレームだけ破棄(ポートは生きたまま)なし増加しない自動復旧(不正機器を外せばOK)

個人的にはrestrictが一番バランスいいと思う。shutdownだとポートが完全に死ぬから、正規の機器まで通信できなくなる。しかもerr-disabledの復旧には手動でshut/no shutが必要で、リモートからだと最悪「現地に行って」という話になる。protectはログも出ないから、不正接続されても気づけない。restrictなら不正フレームだけ落としつつSyslogで通知もくれるので、運用的に一番扱いやすい。

⚠ よくあるミス

デフォルトのshutdownモードのまま導入して、IP電話+PCのデイジーチェーン構成でmaximumを1にしてしまうケースが非常に多い。IP電話のMACとPCのMACで2台分必要なので、maximumは最低2に設定すること。これを忘れると、朝一で全ポートがerr-disabledになって電話もPCも使えないという地獄が待っている。

図2: 違反検知時の影響度比較

shutdown

影響大

restrict

影響小

protect

影響最小

Port Securityの設定手順(Catalyst 9200/9300対応)

Port Securityの設定手順(Catalyst 9200/9300対応)

ここからは実際のCLI設定を順番に見ていく。検証環境はCatalyst 9200L(IOS-XE 17.09.05)だけど、Catalyst 2960/3560シリーズでも基本的なコマンドは同じ。

確認項目条件備考
ポートモードswitchport mode accessdynamic desirableのままだとエラー
EtherChannelメンバーでないことchannel-groupに入っているポートは不可
SPAN宛先ポートSPANのdestinationでないことミラーリング先ポートには設定不可
接続機器の台数maximumの値を事前に決定IP電話+PC構成なら最低2
Step 1: アクセスポートの設定

まずポートをアクセスモードにする。これがPort Securityの前提条件。

Switch(config)# interface GigabitEthernet1/0/1
Switch(config-if)# switchport mode access
Switch(config-if)# switchport access vlan 10
Step 2: Port Securityの有効化とパラメータ設定

Port Securityを有効にして、学習方式・最大MAC数・違反モードを設定する。ここが一番重要なところ。

Switch(config-if)# switchport port-security
Switch(config-if)# switchport port-security maximum 2
Switch(config-if)# switchport port-security violation restrict
Switch(config-if)# switchport port-security mac-address sticky

この設定で「最大2台まで自動学習、違反時はフレーム破棄+Syslog通知」という動作になる。stickyにしておくと、最初に接続した機器のMACアドレスがrunning-configに自動で書き込まれる。

Step 3: エージングの設定(オプション)

エージングを設定すると、一定時間後に学習したMACアドレスを自動で削除できる。席替えが多いオフィスや、ホットデスク環境では設定しておくと運用が楽になる。

Switch(config-if)# switchport port-security aging time 120
Switch(config-if)# switchport port-security aging type inactivity

aging type inactivityにすると「120分間通信がなければMACを削除」という動作。absoluteにすると「学習から120分経ったら無条件で削除」になる。ちなみに、stickyで学習したMACアドレスにはエージングが効かないケースがある(IOS-XEのバージョンによる)ので、検証してから本番適用することをおすすめする。

Step 4: err-disabled自動復旧の設定

shutdownモードを使う場合は、err-disabled recovery(自動復旧)も一緒に設定しておくのが鉄則。これがないと、違反が発生するたびに手動でshut/no shutしないといけない。

Switch(config)# errdisable recovery cause psecure-violation
Switch(config)# errdisable recovery interval 300

これで違反発生後300秒(5分)で自動復旧する。ただし、不正機器がつながったままだとまたすぐerr-disabledになるので、根本的には機器を外す必要がある。

⚠ 注意

errdisable recoveryのintervalはグローバル設定で、全ポート共通の値になる。ポート単位では変更できない。また、recovery intervalが短すぎるとフラッピング(復旧→違反→復旧→違反…)を繰り返すので、最低300秒以上を推奨する。Cisco公式ドキュメントでも300秒がデフォルト値として記載されている。

設定確認・検証コマンド

設定確認・検証コマンド

設定が終わったら、ちゃんと動いてるか確認しよう。Port Security関連のshowコマンドは地味に種類が多い。

ポート全体のPort Security状態を確認
Switch# show port-security interface GigabitEthernet1/0/1
Port Security              : Enabled
Port Status                : Secure-up
Violation Mode             : Restrict
Aging Time                 : 120 mins
Aging Type                 : Inactivity
SecureStatic Address Aging : Disabled
Maximum MAC Addresses      : 2
Total MAC Addresses        : 1
Configured MAC Addresses   : 0
Sticky MAC Addresses       : 1
Last Source Address:Vlan   : 0050.56bf.1a2c:10
Security Violation Count   : 0

Port StatusがSecure-upなら正常動作中。Secure-shutdownならerr-disabled状態だから、すぐに原因調査が必要。Security Violation Countが増えてたら、どこかで不正接続が試行されてる。

学習済みMACアドレスの一覧確認
Switch# show port-security address
               Secure Mac Address Table
-------------------------------------------------------------
Vlan    Mac Address       Type        Ports   Remaining Age
                                               (mins)
----    -----------       ----        -----   -------------
  10    0050.56bf.1a2c    SecureSticky Gi1/0/1      -
-------------------------------------------------------------
Total Addresses in System (excluding one mac per port)     : 0
Max Addresses limit in System (excluding one mac per port) : 4096
コマンド確認できる内容使いどころ
show port-security全ポートのPort Security状態一覧全体把握、違反ポートの特定
show port-security interface [IF]特定ポートの詳細情報違反モード・MAC数・違反回数の確認
show port-security address学習済みMACアドレス一覧どのポートにどのMACが登録されているか確認
show errdisable recoveryerr-disabled自動復旧の設定状態復旧タイマーの確認
show interfaces status err-disablederr-disabled状態のポート一覧障害発生時の一次切り分け
よくあるトラブルと対処法

よくあるトラブルと対処法

ポートがerr-disabledになって通信できない

これが一番多いトラブル。原因の9割は「想定外の機器が接続された」か「maximumの値が足りない」のどちらか。まずはshow port-security interface [IF]で違反の詳細を確認する。

Switch# show interfaces GigabitEthernet1/0/5 status
Port      Name    Status       Vlan   Duplex  Speed  Type
Gi1/0/5           err-disabled 10     auto    auto   10/100/1000BaseTX

Switch# show port-security interface GigabitEthernet1/0/5
Port Security              : Enabled
Port Status                : Secure-shutdown
Violation Mode             : Shutdown
Last Source Address:Vlan   : 00e0.4c68.1234:10
Security Violation Count   : 1

Last Source Addressを見れば、どのMACアドレスが違反を起こしたか分かる。不正機器を外した後、以下のコマンドでポートを復旧させる。

Switch(config)# interface GigabitEthernet1/0/5
Switch(config-if)# shutdown
Switch(config-if)# no shutdown
PCを交換したらポートが使えなくなった

stickyで学習済みのMACアドレスが残っている状態で、別のPCを接続すると違反になる。この場合は古いMACアドレスを手動で削除する必要がある。

Switch(config)# interface GigabitEthernet1/0/5
Switch(config-if)# no switchport port-security mac-address sticky 0050.56bf.1a2c
Switch(config-if)# shutdown
Switch(config-if)# no shutdown

余談だけど、大量のPC入替え作業のときにこれを1ポートずつやるのは正直しんどい。そういう場合は一旦Port Securityを無効化(no switchport port-security)してから全台つなぎ替え、その後再度有効化する方が早い。ただしその間はセキュリティが効かないので、夜間メンテの時間帯を使うのが安全。

💡 ポイント

Port SecurityはDHCP Snooping・DAI(Dynamic ARP Inspection)と組み合わせることで、L2レベルのセキュリティが格段に上がる。Port SecurityでMACアドレスを制限し、DHCP SnoopingでDHCPの不正サーバーを排除し、DAIでARPスプーフィングを防ぐ。この3つをセットで入れるのが、現場での鉄板構成になっている。

まとめ

まとめ

📋 まとめ

Port Securityは「MACアドレスで接続機器を制限する」シンプルだけど実用的な機能。学習方式はstickyが運用しやすく、違反モードはrestrictがバランスいい。IP電話+PC構成ではmaximumを2以上に設定すること、shutdownモードを使うならerrdisable recoveryを忘れずに。DHCP SnoopingやDAIと組み合わせると、L2セキュリティの鉄板構成ができる。

よくある質問(FAQ)

Q. Port Securityはトランクポートに設定できる?

基本的にはアクセスポートのみ対応。ただし、Catalyst 9000シリーズのIOS-XE 17.x以降では「switchport port-security」をトランクポートに設定できるバージョンもある。とはいえ、トランクポートにPort Securityを入れるケースは実務ではほとんどない。トランクはスイッチ間接続に使うことが多く、MACアドレスが大量に流れるので管理が現実的じゃないからだ。

Q. Port Securityと802.1X認証は併用できる?

併用できる。802.1Xで認証が通った後にPort SecurityのMACチェックが走る、という二段構えが可能。ただし設定が複雑になるので、大規模環境ではISE(Identity Services Engine)を使った方が管理しやすい。中小規模でRADIUSサーバーを立てるのが難しいなら、Port Security単体でも十分なセキュリティは確保できる。

Q. stickyで学習したMACアドレスを一括削除するには?

clear port-security allコマンドで全ポートの学習済みMACを一括削除できる。特定ポートだけクリアしたい場合はclear port-security sticky interface [IF]を使う。ただし、running-configに書き込まれたstickyエントリはコマンドでは消えないので、interface配下でno switchport port-security mac-address stickyを実行してから再度有効化する必要がある。この辺は正直ちょっとクセがあるので、検証環境で試してから本番で実行してほしい。