CCNA の学習を進めていると、1度は目にするのが 「ポートセキュリティ」 の問題です。
ただし、用語や仕組みは理解できても、実際に設定して挙動を確認したことがないと
「本当にこう動くのかな?」と不安になる方も多いのではないでしょうか。
本記事では、CML 2.9(Cisco Modeling Labs)を使って実際にポートセキュリティを構築・検証し、
そのときのコンフィグやログ、スクリーンショットを交えてわかりやすく解説します。
「試験対策としての理解」だけでなく、
実際の設定イメージを掴みたい方にとっても参考になる内容になっています。
なお、今回の検証で使用している CML(Cisco Modeling Labs) は、Cisco機器を仮想環境で動かせるシミュレーションツールです。
初めて使う方は、以下の記事で構築手順や基本的な使い方をまとめていますので、あわせてご覧ください。
それでは早速、解説していきましょう。
検証環境
使用ツール
使用するツールは以下になります。
なお、今回は検証をシンプルにするため、以下の要素は省略しています。
ポートセキュリティ検証用のネットワーク構成図
ネットワーク構成は以下の通りになります。

各機器のバージョンは以下の通りになります。
分類 | 名称 | バージョン |
---|---|---|
L2 Switch | iol-l2 | Version 17.16.1a |
クライアント PC | Desktop | Alpine Linux 3.21.3 |
想定する結果
想定する結果は以下の通りになります!
また、ポートセキュリティにてdesktop Bの通信が遮断されたときのログなども確認出来たらいいなと思っています。
設定手順
CMLにはブラウザから利用できる GUIコンソール機能 が備わっており、そのままノードを操作することも可能です。
一方で、Teratermなどを使ってCML本体へSSH接続し、そこからノードにアクセスする方法もあります。
GUI操作は手軽ですが、実機の学習や試験対策を意識するならコンソール操作に慣れておくのがおすすめです。
本記事では、Teratermを使った操作手順を解説していきます。
GUIではなく「実機に近い感覚でコマンドを叩きたい」という方は、以下記事をぜひ参考にしてください。
desktop-A
dekstop-Aでは、以下3点の設定を行っていきたいと思います!
- MACアドレス
- ホスト名(任意)
- IPアドレス
早速おこなっていきます。
MACアドレス
電源が落ちている状態で、desktop-Aをクリックします。
UI上で右に設定を変更できる画面が表示されます。
INTERFACES > MAC Address(下記赤枠の空白になっているところ)をクリックします。

すると、MACアドレスの前半6桁が埋まった状態で、残り6桁を入力できる状態になります。

今回はわかりやすく、各desktopのMACアドレスを連番で振りたいと考えておりますので、
01で設定していきます。

入力が終わったら、チェックマークをクリックします。
ホスト名
GUI上でdesktop-AのPCアイコンをクリックします。
右ペインから「Config」タブをクリック。
以下赤枠で囲った箇所を編集していきます。

以下の通りホスト名を変更できたら、SAVEをクリックします。

IPアドレス
続いてIPアドレスの設定に行きます。
desktop-Aは192.168.1.1を割り振るので以下の通り設定します。
desktop-A:~$ sudo vi /etc/network/interfaces
補足になりますが、ネットワークファイルのデフォルト値は以下の通りです。
auto eth0を編集していきますが、設定前はDHCPになっていることが確認できます。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
~
ファイル内の文字を編集できる状態になりますので、以下の通り入力するか、コピペしてください。
auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
~
~
~
(中略)
I /etc/network/interfaces [Modified] 7/7 100%
ファイルを開けたら、キーボードキーのiを押します。
入力が完了したら、ESCキーを押します。
:wqを押して、エンターキーを押すと設定内容が保存されます。
設定内容を反映させるため、再起動します。
desktop-A:~$ sudo reboot 再起動コマンド
desktop-A:~$
Welcome to Alpine Linux 3.21
Kernel 6.12.27-0-virt on an x86_64 (/dev/ttyS0)
inserthostname-here login: 再起動が完了すると再度ログインを求められる
設定したIPアドレスが反映されているか確認していきます。
desktop-A:~$ ip a
出力結果はこんな感じ
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:00:00:01 brd ff:ff:ff:ff:ff:ff MACアドレス
inet 192.168.1.1/24 scope global eth0 IPアドレスアドレス
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:1/64 scope link
valid_lft forever preferred_lft forever
desktop-A:~$
確認してみると先ほど設定したMACアドレスも問題なく反映してますね!
以下の設定をdesktop-Bとdesktop-Cにも設定していきます。
desktop-B
desktop-Bもdesktop-Aと同様に設定していきます。
設定内容はdesktop-Aとほとんど変わりませんので、省略しながら進めていきます!
MACアドレス
まずは、MACアドレスから行います。

末尾が「02」になるように設定します。
ホスト名
ホスト名も変更していきます。

ここまで完了したら、desktopの電源をONにします。
IPアドレス
viエディターにて設定ファイルを直接編集していきます。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
設定が完了したら、:wqを押して、内容を保存します。
reboot実行後、ip aコマンドにて設定内容の確認を行います。
desktop-B:~$ ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:00:00:02 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:2/64 scope link
valid_lft forever preferred_lft foreve
desktop-C
desktop-Cの設定していきます。
MACアドレス
スクショだけ載せていきます。末尾が「03」になるように設定します。

ホスト名
ホスト名も変更していきます。

IPアドレス
viエディターにて設定ファイルを直接編集していきます。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.3
netmask 255.255.255.0
設定が完了したら、:wqを押して、内容を保存します。
reboot実行後、ip aコマンドにて設定内容の確認を行います。
desktop-C:~$ ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:00:00:03 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.3/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:3/64 scope link
valid_lft forever preferred_lft foreve
ping疎通確認
各desktopの設定が完了したら、pingの疎通確認を行います。
desktop-Aからdesktop-BとC当てにpingを実行します。
desktop-A:~$ ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: seq=0 ttl=42 time=1.375 ms
64 bytes from 192.168.1.2: seq=1 ttl=42 time=2.535 ms
64 bytes from 192.168.1.2: seq=2 ttl=42 time=1.578 ms
64 bytes from 192.168.1.2: seq=3 ttl=42 time=2.496 ms
64 bytes from 192.168.1.2: seq=4 ttl=42 time=2.603 ms
64 bytes from 192.168.1.2: seq=5 ttl=42 time=2.333 ms
^C
— 192.168.1.2 ping statistics —
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 1.375/2.153/2.603 ms
desktop-A:~$
desktop-A:~$ ping 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: seq=0 ttl=42 time=1.710 ms
64 bytes from 192.168.1.3: seq=1 ttl=42 time=1.859 ms
64 bytes from 192.168.1.3: seq=2 ttl=42 time=3.221 ms
64 bytes from 192.168.1.3: seq=3 ttl=42 time=1.695 ms
64 bytes from 192.168.1.3: seq=4 ttl=42 time=1.103 ms
64 bytes from 192.168.1.3: seq=5 ttl=42 time=1.881 ms
64 bytes from 192.168.1.3: seq=6 ttl=42 time=1.834 ms
64 bytes from 192.168.1.3: seq=7 ttl=42 time=1.098 ms
64 bytes from 192.168.1.3: seq=8 ttl=42 time=1.161 ms
^C
— 192.168.1.3 ping statistics —
9 packets transmitted, 9 packets received, 0% packet loss
round-trip min/avg/max = 1.098/1.729/3.221 ms
desktop-A:~$
適当な回数pingを実行し、各端末間の疎通が問題ないことが確認できました。
ここからはいよいよポートセキュリティの設定になります!
SW-01
では、さっそくSW-01にポートセキュリティの設定を行っていきたいと思います。
SW-01(config)#interface ethernet0/1
SW-01(config-if)#switchport mode access
続いて、ポートセキュリティの設定を有効化します。
SW-01(config-if)#switchport port-security
SW-01(config-if)#switchport port-security mac-address 52:54:00:00:00:01
ここまで設定できたら、特権モードに戻り、設定を保存します。
SW-01で設定した内容を確認していきましょう
今回確認で使用するコマンドは2つになります。
結果は以下の通りです。
interface Ethernet0/1
switchport mode access
switchport port-security mac-address 5254.0000.0001
switchport port-security
すみません、テキストで結果を貼り付けると体裁が崩れてしまったので、画像で結果はペーストしています。

動作確認
ここまで確認できたら、desktop-Aとdesktop-Bにてpingを実行してポートセキュリティの検証を行っていきたいと思います。
desktop-A:~$ ping 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: seq=0 ttl=42 time=2.107 ms
64 bytes from 192.168.1.3: seq=1 ttl=42 time=3.253 ms
64 bytes from 192.168.1.3: seq=2 ttl=42 time=3.726 ms
64 bytes from 192.168.1.3: seq=3 ttl=42 time=2.510 ms
64 bytes from 192.168.1.3: seq=4 ttl=42 time=1.762 ms
^C
— 192.168.1.3 ping statistics —
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 1.762/2.671/3.726 ms
desktop-A:~
desktop-B:~$ ping 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
^C
— 192.168.1.3 ping statistics —
91 packets transmitted, 0 packets received, 100% packet loss
desktop-B:~$
desktop-Bからpingを打った場合、pingの応答がないことが確認できました。
windowsの場合は、time out や宛先ネットワークに到達できません。のようなエラー文を返してくれるのですが、Alpine Linuxの場合、無反応ですので使い慣れてない私からすると少し使いにくく感じてしまいます。。
ちなみにCML上ではリンクのステータスがわからないので、コンソールで確かめていきましょう。

SW-01側の確認をしていきます。
show port-securityコマンドを実行すると、securityViolationが「1」になっていることが確認できます。
ポートセキュリティ確認コマンド
show port-security
SW-01#show port-security
Secure Port MaxSecureAddr CurrentAddr SecurityViolation Security Action
(Count) (Count) (Count)
---------------------------------------------------------------------------
Et0/1 1 1 1 Shutdown
---------------------------------------------------------------------------
Total Addresses in System (excluding one mac per port) : 0
Max Addresses limit in System (excluding one mac per port) : 4096
SW-01#
ポートのステータスについても確認していきます。
ポートステータス確認コマンド
show interfaces status
SW-01#show interfaces status
Port Name Status Vlan Duplex Speed Type
Et0/0 connected 1 full auto 10/100/1000BaseTX
Et0/1 err-disabled 1 full auto 10/100/1000BaseTX
Et0/2 connected 1 full auto 10/100/1000BaseTX
Et0/3 connected 1 full auto 10/100/1000BaseTX
Et1/0 connected 1 full auto 10/100/1000BaseTX
Et1/1 connected 1 full auto 10/100/1000BaseTX
Et1/2 connected 1 full auto 10/100/1000BaseTX
Et1/3 connected 1 full auto 10/100/1000BaseTX
SW-01#
想定通り、Ethernet0/1のステータスが「 err-disabled」になっていることが確認できました!
最後に、該当ポートを正常な状態に戻して終わりたいと思います。
SW-01(config)#interface ethernet0/1
SW-01(config-if)#shutdown
SW-01(config-if)#no shutdown
SW-01(config-if)#
SW-01#show interfaces status
Port Name Status Vlan Duplex Speed Type
Et0/0 connected 1 full auto 10/100/1000BaseTX
Et0/1 connected 1 full auto 10/100/1000BaseTX
Et0/2 connected 1 full auto 10/100/1000BaseTX
Et0/3 connected 1 full auto 10/100/1000BaseTX
Et1/0 connected 1 full auto 10/100/1000BaseTX
Et1/1 connected 1 full auto 10/100/1000BaseTX
Et1/2 connected 1 full auto 10/100/1000BaseTX
Et1/3 connected 1 full auto 10/100/1000BaseTX
SW-01#
最後に
今回は CMLを用いてポートセキュリティの基本的な設定と挙動を検証しました。
実際にコマンドを入力して挙動を確認することで、テキストだけでは掴みにくい動きを理解できたのではないかと思います。
ポートセキュリティには、今回触れた内容以外にも sticky MAC の設定 や 違反モード(protect / restrict / shutdown)の挙動比較 など、学べるポイントがまだまだあります。
設定を少しずつ変えて検証してみると、より理解が深まるかと思います。
また、CCNA試験でよく出るテーマとして「EtherChannel」もあります。
パケットトレーサーでの例にはなりますが、解説記事をまとめていますので、次の学習ステップにぜひ参考にしてください。
コメント