Port-Security is fundamentally great to implement, especially since this command supports both static (Sticky) and dynamic mac-address filtering.
Basic configuration:
##Open Interface##
(config)#int e0/2
##Enable Port-Security##
(config-if)#switchport port-security
##Allow a specific mac-address##
(config-if)#switchport port-security mac-address aabb.ccdd.eeff
##Only Allow a single mac-address##
(config-if)#switchport port-security maximum 1
##If policy is violated, err-disable port##
(config-if)#switchport port-security violation shutdown
Verify configuration on the interface:
#show port-security interface e0/2
Sw1#sh port-security int e0/2
Port Security : Enabled
Port Status : Secure-up
Violation Mode : Shutdown
Aging Time : 0 mins
Aging Type : Absolute
SecureStatic Address Aging : Disabled
Maximum MAC Addresses : 1
Total MAC Addresses : 1
Configured MAC Addresses : 1
Sticky MAC Addresses : 0
Last Source Address:Vlan : aabb.ccdd.eeff:10
Security Violation Count : 0

View from both devices:
Once the Router (R1) changes it’s mac-address, it will err-disable the Switchport from Sw1.
R1(config)#interface e0/0
R1(config-if)#mac-address aabb.ccff.eeff
Sw1#
*Jul 6 17:14:56.613: %PM-4-ERR_DISABLE: psecure-violation error detected on Et0/2, putting Et0/2 in err-disabl
e state
Sw1#
*Jul 6 17:14:56.613: %PORT_SECURITY-2-PSECURE_VIOLATION: Security violation occurred, caused by MAC address aa
bb.ccff.eeff on port Ethernet0/2.
*Jul 6 17:14:57.621: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/2, changed state to down
Sw1#
*Jul 6 17:14:58.617: %LINK-3-UPDOWN: Interface Ethernet0/2, changed state to down
Sw1#
To fix the err-disable, you will want to put the original MAC-address back on R1 or add the new mac-address to the port-security interface. Then, you will want to cycle the switchport. (shut/no shut) – verify w/ ping.
If you want/need to save the mac-address that was learned after a reboot, you will need to use this:
(config)#int e0/2
(config-if)#switchport port-security mac-address sticky aabb.ccdd.eeff
#wr
If you get an error, perform this first, to remove any previously set mac-address:
(config-if)#no switchport port-security mac-address aabb.ccdd.eeff
##followed by:
(config-if)#switchport port-security mac-address sticky aabb.ccdd.eeff
