Da ich mich aktuell auf einige Cisco Zertifizierungen vorbereite, treffe ich immer wieder auf Themen, die gut in diesen IT Security Blog passen könnten. Beginnen möchte ich heute mit dem Thema Cisco Port Security.
Port Security ermöglicht es auf Cisco Geräten, den eingehenden Traffic eines Ports auf bestimmte MAC-Adressen zu limitieren. Durch diese Technologie kann innerhalb eines Unternehmens garantiert werden, dass an einem Switch-Port ausschließlich bestimmte Unternehmenshardware und nicht etwa fremde Geräte (mit anderer MAC-Adresse) oder ein Switch angeschlossen werden.
Grenzen von Port Security
Zu Beginn möchte ich auf die Grenzen von Port Security hinweisen: Port Security basiert auf MAC-Adressen. Netzwerkhardware hat zwar eine feste, "eingebrannte" MAC-Adresse, die BIA, diese lässt sich jedoch häufig von übergeordneten Schichten verändern. Es besteht in den meisten Betriebssystemen die Möglichkeit, die Layer 2 Adresse, welche beim Senden verwendet wird, zu modifizieren.
Zugelassenen MAC-Adressen
Die Port-Security Funktion arbeitet mit einer Whitelist an MAC-Adressen, die am Port eingehend zugelassen werden sollen.
Die Liste kann auf verschiedene Arten aufgebaut werden:
- die Adressen können manuell definiert werden,
- es kann ein Pool dynamischer Adressen definiert werden (die mit Hilfe von switchport port-security mac-address sticky ggf. statisch werden können), oder
- eine Mischform aus beiden Verfahren: Ein Teil der Adressen ist statisch, eine Anzahl n Adressen wird dynamisch ermöglicht.
Die Anzahl der insgesamt möglichen nicht-statischen Adressen berechnet sich aus der Differenz der maximal möglichen Adressen (switchport port-security maximum, Default 1) abzüglich der statisch vergebenen Adressen. Sticky bedeutet, dass das Gerät solange neue MAC-Adressen in die Running-Config einträgt, bis der maximum Wert an Adressen erreicht wurde. Sticky / Dynamisch gelernte Adressen müssen in diesem Fall vor einem Neustart in die Startup-Config übernommen werden, sonst sind die gelernten Adressen, trotz Sticky, nach einem Neustart verloren.
Switch# show port-security address Secure Mac Address Table ----------------------------------------------------------------------------- Vlan Mac Address Type Ports Remaining Age (mins) ---- ----------- ---- ----- ------------- 2 fa16.3e14.6136 SecureDynamic Gi0/1 - 2 fa16.3ef8.93e9 SecureDynamic Gi0/1 - ----------------------------------------------------------------------------- Total Addresses in System (excluding one mac per port) : 1 Max Addresses limit in System (excluding one mac per port) : 4096
Angenommen, es wird maximal eine Adresse erlaubt (switchport port-security maximum 1) und die Sticky Option (switchport port-security mac-address sticky) wurde nicht gesetzt: Wird nun an diesem Port ein Host angeschlossen, kann der mit dem Port verbundene Host nicht mehr ohne weiteres getauscht werden. Ein Tausch des Hosts ist nur möglich:
- wenn der Switch neu gestartet,
- switchport security manuell deaktiviert und wieder aktiviert,
- die gelernte MAC-Adresse manuell entfernt wurde oder
- nach Ablauf der des port-security aging Timers, insofern dieser konfiguriert wurde.
Konfiguration
Im nachfolgenden Absatz werden ich die Funktion "Port Security" an folgender Konfiguration näher erläutern:
Switch# configure terminal Switch(config)# interface Gi 0/1 Switch(config-if)# switchport mode access Switch(config-if)# switchport port-security Switch(config-if)# switchport port-security violation restrict Switch(config-if)# switchport port-security maximum 4 Switch(config-if)# switchport port-security mac-address aabb.ccdd.eeff Switch(config-if)# switchport port-security mac-address a1b2.c3d4.e5f6
Die in der Konfiguration verwendeten Befehle werden im folgenden näher erläutert.
[Zeile 3] Port auswählen |
Die Funktion Port Security wird je Port konfiguriert: Die Konfiguration wird somit nicht global, sondern individuell für jeden Port vorgenommen. Der Befehl
Switch(config)# interface type slot/port
wählt das Interface aus, welches im folgenden konfiguriert werden soll. Alternativ lassen sich auch mehrere Interfaces gleichzeitig konfigurieren, z.B. mit dem folgenden Befehl:
Switch(config)# interface range Gi 0/1-3
Die Beispielzeile wählt die Interfaces Gi 0/1, Gi 0/2 und Gi 0/3 aus.
[Zeile 5] Switchport Mode |
Der Switchport muss entweder als Access- oder als Trunkport konfiguriert werden. Der Standardwert "auto" ist für die Konfiguration von Port Security nicht zulässig.
Konfiguration als Access-Port:
Switch(config-if)# switchport mode access
Konfiguration als Trunk-Port:
Switch(config-if)# switchport mode trunk Switch(config-if)# switchport nonegotiate
Die zweite Zeile deaktiviert das DTP.
[Zeile 7] Port Security aktivieren |
Der folgende Befehl aktiviert Port Security auf dem Interface:
Switch(config-if)# switchport port-security
Der Befehl aktiviert Port-Security ohne weitere Rückfragen auf dem Port. Wurde vorher nichts konfiguriert, gelten die Standardeinstellungen.
[Zeile 9] Port Security Reaktionen bei Verletzungen |
Eine Verletzung bezeichnet
- entweder das Überschreiten der maximal zulässigen Anzahl MAC-Adressen an einem Port (switchport port-security maximum) oder
- das Eintreffen eines Frames mit einer Mac-Adresse, die im selben VLAN bereits an einem anderen Port des Switches gelernt worden ist.
Switch(config-if)# switchport port-security violation ? protect Security violation protect mode restrict Security violation restrict mode shutdown Security violation shutdown mode
Der Switch kann auf drei verschiedene Arten auf Verletzungen reagieren:
Switch(config-if)# switchport port-security violation protect
Protect: Alle nicht zugelassenen Frames werden stillschweigend verworfen.
Switch(config-if)# switchport port-security violation restrict
Restrict: Alle nicht zugelassenen Frames werden verworfen, der "Violation Counter" wird hochgezählt.
Switch(config-if)# switchport port-security violation shutdown
Shutdown: Alle nicht zugelassenen Frames werden verworfen, der "Violation Counter" wird hochgezählt, das Interface wird heruntergefahren (Zustand "error-disabled").
[Zeile 11] Maximal zugelässige MAC-Adressen |
Der folgende Befehl legt das Maximum an insgesamt zugelassenen Port-Security Adressen in der Whitelist fest:
Switch(config-if)# switchport port-security maximum ? <1-4097> Maximum addresses
Das festgelegte Maximum gilt sowohl für statisch, als auch für dynamisch ermittelte MAC-Adressen. Wird das Maximum beispielsweise auf "4" festgelegt und werden 2 statische MAC-Adressen definiert, bleiben 2 Adressen übrig, die dynamisch assoziiert werden können.
[Zeile 13 & 15] Statisch zugelassene MAC-Adressen |
MAC-Adressen, die manuell definiert an diesem Port als Layer 2 Quelle zugelassen werden, sind statische Port-Security MAC-Adressen. Sie werden wie folgt definiert:
Switch(config-if)# switchport port-security mac-address aabb.ccdd.eeff
Um weitere Adressen zu definieren, kann der Befehl mehrfach, bis zum definierten Maximum, aufgerufen werden.
Verifizierung der Konfiguration
Die Konfiguration kann auf vielfältige Weise verifiziert werden:
show port-security interface
Mit folgendem Befehl kann der Status des Interfaces angezeigt werden:
Switch# show port-security interface gi 0/1 Port Security : Enabled Port Status : Secure-up Violation Mode : Shutdown Aging Time : 0 mins Aging Type : Absolute SecureStatic Address Aging : Disabled Maximum MAC Addresses : 2 Total MAC Addresses : 2 Configured MAC Addresses : 0 Sticky MAC Addresses : 0 Last Source Address:Vlan : fa16.3ef8.93e9:2 Security Violation Count : 0
Das Beispiel zeigt, dass Port Security auf dem Port aktiviert wurde, der Port aktiv ist und der Modus "Shutdown" bei Verletzungen konfiguriert wurde.
Im Falle einer Verletzung ändert sich der Status wie folgt:
*May 25 20:55:32.377: %PM-4-ERR_DISABLE: psecure-violation error detected on Gi0/1, putting Gi0/1 in err-disable state *May 25 20:55:32.380: %PORT_SECURITY-2-PSECURE_VIOLATION: Security violation occurred, caused by MAC address 0aaa.0bbb.0ccc on port GigabitEthernet0/1. *May 25 20:55:33.377: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/1, changed state to down *May 25 20:55:34.379: %LINK-3-UPDOWN: Interface GigabitEthernet0/1, changed state to down
Daraus folgt:
Switch# show port-security interface gi 0/1 Port Security : Enabled Port Status : Secure-shutdown Violation Mode : Shutdown Aging Time : 0 mins Aging Type : Absolute SecureStatic Address Aging : Disabled Maximum MAC Addresses : 2 Total MAC Addresses : 0 Configured MAC Addresses : 0 Sticky MAC Addresses : 0 Last Source Address:Vlan : 0aaa.0bbb.0ccc:2 Security Violation Count : 1
Aus dem Auszug lässt sich gut erkennen, dass der Switch-Port nun im Zustand "Error Disabled" ist.
show port-security address
Mit folgendem Befehl lassen sich die bisher gelernte MAC-Adressen anzeigen:
Switch# show port-security address Secure Mac Address Table ----------------------------------------------------------------------------- Vlan Mac Address Type Ports Remaining Age (mins) ---- ----------- ---- ----- ------------- 2 fa16.3e14.6136 SecureDynamic Gi0/1 - 2 fa16.3ef8.93e9 SecureDynamic Gi0/1 - ----------------------------------------------------------------------------- Total Addresses in System (excluding one mac per port) : 1 Max Addresses limit in System (excluding one mac per port) : 4096
Das Beispiel zeigt die beiden gelernten Adressen am Port Gi 0/1 des VLAN 2.
Optimierung der Konfiguration
An einigen Stellen lässt sich die Konfiguration noch etwas feiner konfigurieren, insbesondere möchte ich auf den Aging Timer und die automatische Port-Recovery eingehen.
Aging Timer
Standardmäßig ist die zeitgesteuerte Entfernung von dynamisch gelernten Adressen nicht aktiviert, eine Adresse wird erst wieder nach einem manuellen Eingriff aus dem Port-Security Pool entfernt. Um Adressen zeitgesteuert zu entfernen, kann folgender Befehl verwendet werden:
Switch(config-if)# switchport port-security aging time <time> Switch(config-if)# switchport port-security aging type {absolute | inactivity}
Der erste Befehl legt die Dauer fest, nach dem eine Adresse entfernt wird, der zweite Befehl bestimmt den Zeitpunkt, ab welchem die vorher festgelegte Dauer zu zählen beginnt:
- Absolute: Die Adresse wird nach einer festgelegten Zeitspanne unabhängig der Aktivität entfernt.
- Inactivity: Die Adresse wird nach einer festgelegten Dauer der Inaktivität entfernt.
Sichere Adressen löschen
Dynamisch gelernte Adressen lassen sich mit folgendem Befehl löschen:
Switch(config)# clear port-security
Statische Adressen lassen sich, wie bei Cisco üblich, mit dem „no“ Zusatz löschen:
Switch(config-if)# no switchport port-security mac-address aabb.ccdd.eeff
Automatisches Port-Recovery
Wenn ein Port aufgrund einer Violation in den „error-disabled“ Zustand übergegangen ist, muss standardmäßig manuell gehandelt werden. Alternativ lässt sich dies automatisieren:
Switch(config)# errdisable recovery cause psecure-violation Switch(config)# errdisable recovery interval <interval>
Standardmäßig liegt das errdisable recovery interval bei 300 Sekunden.
Fazit
Port-Security ist ein interessantes Tool, um die angeschlossenen MAC-Adressen an einem Port einzuschränken. Beim Einsatz sollte jedoch bedacht werden, dass sich MAC-Adressen leicht fälschen lassen können.
Bildnachweise:
- © Alex Tihonov - Fotolia.com