© Alex Tihonov - Fotolia.com

Cisco Port-Security

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.

Port Security Layer

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert