「勝手に私物のノートPCをスイッチに挿す人がいて困ってる」——ネットワーク管理者なら一度は経験したことがあるんじゃないだろうか。特に客先常駐の現場だと、営業さんが会議室のLANポートに自分のPCをつなげて「ネット見れないんだけど」と言ってくるケースが本当に多い。
こういった不正接続を防ぐのが、CiscoスイッチのPort Security(ポートセキュリティ)機能だ。MACアドレスベースで接続機器を制限するシンプルな仕組みなんだけど、設定パラメータの組み合わせで挙動がかなり変わる。この記事では、stickyラーニング・違反モードの使い分け・エージング設定まで、現場で実際に使う設定パターンを一通り解説する。
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
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アドレス登録方式別)
95%
50%
15%
違反モード(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: 違反検知時の影響度比較
影響大
影響小
影響最小
Port Securityの設定手順(Catalyst 9200/9300対応)
ここからは実際のCLI設定を順番に見ていく。検証環境はCatalyst 9200L(IOS-XE 17.09.05)だけど、Catalyst 2960/3560シリーズでも基本的なコマンドは同じ。
| 確認項目 | 条件 | 備考 |
|---|---|---|
| ポートモード | switchport mode access | dynamic desirableのままだとエラー |
| EtherChannel | メンバーでないこと | channel-groupに入っているポートは不可 |
| SPAN宛先ポート | SPANのdestinationでないこと | ミラーリング先ポートには設定不可 |
| 接続機器の台数 | maximumの値を事前に決定 | IP電話+PC構成なら最低2 |
まずポートをアクセスモードにする。これがPort Securityの前提条件。
Switch(config)# interface GigabitEthernet1/0/1 Switch(config-if)# switchport mode access Switch(config-if)# switchport access vlan 10
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に自動で書き込まれる。
エージングを設定すると、一定時間後に学習した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のバージョンによる)ので、検証してから本番適用することをおすすめする。
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コマンドは地味に種類が多い。
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が増えてたら、どこかで不正接続が試行されてる。
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 recovery | err-disabled自動復旧の設定状態 | 復旧タイマーの確認 |
| show interfaces status err-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
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を実行してから再度有効化する必要がある。この辺は正直ちょっとクセがあるので、検証環境で試してから本番で実行してほしい。


