Port Security to jedna z podstawowych funkcjonalności oferowanych przez większość nowoczesnych switchy sieciowych. Ma ona za zadanie zabezpieczyć fizyczny port przed nieuprawnionym dostępem oraz zapobiec atakom typu MAC spoofing czy też MAC flooding. W tym artykule omówimy zasadę działania oraz konfigurację funkcjonalności Port Security.
Wprowadzenie do Port Security
Bezpieczeństwo to temat na czasie – sieci ewoluują zatem zabezpieczenie ich to sprawa kluczowa. Jest to też jeden z najważniejszych obowiązków każdego administratora sieciowego. Temat bezpieczeństwa jest również bardzo szeroki stąd jest to dość duże wyzwanie. W tym artykule przyjrzymy się szczególnie tylko konkretnemu przypadkowi w warstwie 2 ISO/OSI.
Na wstępie warto podkreślić, że Port Security nie jest metodą ani idealną ani jedyną możliwą do zastosowania w L2. Istnieje jeszcze choćby dot1X lub też MAB (ang. MAC Authentication Bypass). O sensie istnienia warstwy drugiej możesz poczytać w naszym artykule, a z kolei o innych metodach ataków i zabezpieczeń możesz poczytać tutaj: DHCP, ARP.
Zasada działania Port Security
Dzięki tej metodzie mówiąc wprost i w skrócie możemy ograniczyć nieuprawniony dostęp do sieci eliminując tym samym problemy i niebezpieczeństwa z tym związane. Sieć możemy zabezpieczyć na wiele różnych sposobów, ale jeżeli potencjalny włamywacz dostałby się fizycznie do switcha / gniazdka sieciowego i podłączył się do niego to sieć byłaby podatna na atak. Dzięki ustawieniu Port Security to już nie będzie możliwe (z małym zastrzeżeniem o którym wspomnę póżniej – jak wiadomo świat nie jest idealny więc i to rozwiązanie ma swój słaby punkt 😅).
Mamy możliwość określenia adresów MAC które będą mogły komunikować się na danym porcie switcha. Jeżeli zatem ustawisz, że na danym porcie można podłączyć tylko urządzenie o adresie MAC np. 00E0.F7D5.41EB to tylko ono będzie mogło się komunikować w sieci. Podłączenie jakiegokolwiek urządzenia z innym adresem spowoduje domyślnie wyłączenie portu lub blokowanie komunikacji itp.
Konfiguracja Port Security
W zależności czy konfigurujemy switch od zera, czy tylko modyfikujemy już istniejącą konfigurację to na wstępie warto zacząć od sprawdzenia czy ktoś już skonfigurował Port Security. Można to dokonać komendą:
Switch# show port-security address
Secure Mac Address Table
---------------------------------------------------------------------
Vlan Mac Address Type Ports Remaining
---- ----------- ---- ----- ----------
---------------------------------------------------------------------
Total Addresses in System (excluding one mac per port) : 0
Max Addresses limit in System (excluding one mac per port) : 1024
Code language: plaintext (plaintext)
W powyższym przypadku możemy zauważyć, że nikt nie skonfigurował tej funkcji ponieważ gdyby była to przełącznik pokazałby jakieś informacje.
1. Włącz Port Security
Zostanie on włączony na domyślnych ustawieniach. Konfiguracja ta odbywa się bezpośrednio na interfejsie który ma być chroniony:
Switch# conf t
Enter configuration commands, one per line. End with CNTL/Z.
Switch(config)# int fa0/1
Switch(config-if)# switchport port-security
Code language: plaintext (plaintext)
Gdyby pokazał Ci się błąd:
Command rejected: FastEthernet0/1 is a dynamic port.
Code language: plaintext (plaintext)
Spowodowany jest on tym, że prawdopodobnie wpisana na danym interfejsie jest komenda switchport mode dynamic desirable która jest związana z protokołem DTP (ang. Discovery Trunk Protocol). Wówczas nie ma możliwości uruchomienia na tym interfejsie Port Security. Należy zmienić ten port na access lub trunk i ta możliwość wróci.
Jeżeli po drugiej stronie chcesz podłączyć urządzenie np. komputer to skonfiguruj na tym porcie połączenie typu access, jeżeli ma to być np. przełącznik to dobrym pomysłem będzie ustawienie trybu trunk.
Bez dalszej konfiguracji w zasadzie nic się nie wydarzy. Zastosowana będzie wszędzie domyślna konfiguracja. Warto jednak dostosować Port Security do własnych potrzeb i oczekiwań. Po podaniu polecenia z dodatkiem znaku zapytania zobaczymy kolejne opcje:
Switch(config-if)# switchport port-security ?
aging Port-security aging commands
mac-address Secure mac address
maximum Max secure addresses
violation Security violation mode
Code language: plaintext (plaintext)
2. Skonfiguruj mac-address
Tą komendą określamy jaki adres MAC na danym interfejsie będzie dopuszczony do komunikacji. Mamy 2 opcje:
- adres statyczny – wpisany ręcznie,
- adres dynamiczny – pozyskany przez parametr sticky który dynamicznie poznane adresy MAC będzie konwertować na statyczne wpisy w bieżącej konfiguracji portu.
Switch(config-if)# switchport port-security mac-address <adres_mac>
Code language: plaintext (plaintext)
lub
Switch(config-if)# switchport port-security mac-address sticky
Code language: plaintext (plaintext)
Opcja sticky jest szczególnie przydatna w dużych sieciach – pierwszy adres MAC który pojawi się na porcie przełącznika zostanie automatycznie dopisany do konfiguracji. Wyobraź sobie zbieranie, zarządzanie i na koniec kopiowanie adresów MAC z całej sieci aby móc je wkleić w tym poleceniu. Jest to podejście czasochłonne oraz narażone na pomyłki.
3. Ustaw maximum
Wartość ta określa jak wiele adresów MAC będzie mogło komunikować się na porcie przełącznika. Domyślna wartość to 1, czyli pierwszy adres poznany przez przełącznik będzie uprawniony do komunikacji, a reszta blokowana. Zakres możliwy do ustawienia to 1-5120.
Switch(config-if)# switchport port-security maximum <wartość_1-5120>
Code language: plaintext (plaintext)
4. Ustaw violation
Violation Mode, który definiuje akcje jakie mają być podjęte przez switch w przypadku złamania zasad ustalonych przez konfigurację Port Security, takich jak np.: przekroczenie dozwolonej ilości adresów MAC na porcie albo pojawienie się nieuprawnionego adresu MAC.
Wyróżniamy trzy tryby działania tego parametru:
- protect – port nie wyłącza się podczas zdarzenia naruszenia bezpieczeństwa (ang. security violation event) – ramki dotyczące dozwolonych adresów MAC będą obsługiwane, a wszystkie pozostałe będą odrzucane bez podejmowania żadnych dodatkowych akcji.
- restrict – podobnie do poprzedniego wariantu ramki dotyczące dozwolonych adresów MAC będą obsługiwane, a wszystkie pozostałe będą odrzucane. Dodatkowo jednak Switch poinformuje o tym wydarzeniu poprzez:
- wygenerowanie wiadomości w Syslog,
- wysłanie SNMP Trap,
- zwiększenie licznika Security Violation Count wraz z każdą odrzuconą ramką.
- shutdown – jest to domyślny tryb działania, który dodatkowo jest najbardziej rygorystyczny (warto z nim uważać 🤕). Złamanie zasad ustalonych przez Port Security skutkować będzie wyłączeniem portu i przydzieleniem mu statusu Error Disabled (err-disabled). W konsekwencji nawet dozwolone adresy MAC nie będą obsługiwane, a jeden z możliwych sposobów na przywrócenie pełnej pracy portu to jego restart (poprzez shutdown -> no shutdown na porcie)
Switch(config-if)# switchport port-security violation protect
Code language: plaintext (plaintext)
lub
Switch(config-if)# switchport port-security violation restrict
Code language: plaintext (plaintext)
lub
Switch(config-if)# switchport port-security violation shutdown
Code language: plaintext (plaintext)
5. Ustaw aging
Na porcie można włączyć usuwanie adresów MAC z obsługi mechanizmu Port Security po zadanym czasie. Ten czas jest aktywowany, gdy adres MAC inicjuje ruch na porcie. Po upływie tego czasu wpis dotyczący adresu MAC na porcie jest usuwany z listy bezpiecznych adresów. Obowiązuje zakres od 1 do 1440 minut. Ustawienie czasu age na zero wyłącza wygasanie bezpiecznych adresów.
Switch(config-if)# switchport port-security aging time <wartość_1-1440>
Code language: plaintext (plaintext)
Omówienie komendy show port-security
Po konfiguracji omówmy sobie przykładowy rezultat następującej komendy:
Switch# show port-security interface FastEthernet 0/1
Port Security : Enabled
Port Status : Secure-down
Violation Mode : Protect
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 : 0000.0000.0000:0
Security Violation Count : 0
Code language: plaintext (plaintext)
- Port Security – „Enabled” – oznacza to, że mechanizm Port Security na tym porcie jest włączony.
- Port Status – „Secure-down” – wskazuje na to, że port nie jest aktywny, w momencie wykonania komendy żaden z Hostów nie był jeszcze do niego podłączony.
- Violation Mode – „Protect” – ten parametr definiuje akcje jakie mają być podjęte przez Switch w przypadku złamania zasad ustalonych przez konfigurację Port Security. „Protect” oznacza, że ramki dotyczące dozwolonych adresów MAC będą obsługiwane, a wszystkie pozostałe będą odrzucane bez podejmowania żadnych dodatkowych akcji.
- Aging Time – „0 mins” – zacznijmy od tego, że Port Security może poznać adresy MAC na danym porcie w sposób statyczny, czyli przez konfigurację, albo dynamiczny, czyli poprzez badanie przesyłanego ruchu. „0 mins” jest domyślną wartością tego parametru i oznacza, że adresy MAC poznane w sposób dynamiczny nigdy nie wygasną. No chyba, że Switch zostanie zrestartowany lub lista poznanych adresów MAC zostanie ręcznie wyczyszczona dedykowaną komendą.
- Aging Type – „Absolute” – powiązanie z poprzednim parametrem, które oznacza, że dynamicznie poznane adresy MAC będą usuwane po upływie zadanego czasu. Druga możliwa wartość tego parametru to „Inactivity”, w której adresy usuwane są tylko w przypadku braku aktywności przez określony czas.
- SecureStatic Address Aging – „Disabled” – domyślna wartość parametru, która powoduje, że statycznie zdefiniowane adresy MAC nie będą usuwane.
- Maximum MAC Addresses – „1” – tylko jeden adres MAC jest dozwolony na tym porcie.
- Total MAC Addresses – „1” – jeden adres MAC jest już znany na tym porcie, nie mówi nam to jednak w jaki sposób został on poznany (statycznie, czy dynamicznie).
- Configured MAC Addresses – „1” – oznacza to, że ten jeden adres MAC został dodany statycznie, czyli przez konfigurację.
- Sticky MAC Addresses – „0” – na porcie można włączyć mechanizm Sticky, który dynamicznie poznane adresy MAC będzie konwertować na statyczne wpisy w bieżącej konfiguracji portu. „0” oznacza, że żaden adres MAC nie został dotychczas zapisany w ten sposób.
- Last Source Address:Vlan – „0000.0000.0000:0” – ostatni widziany adres MAC wraz z numerem VLAN, w którym się znajdował. W tym przypadku wpis oznacza, że nie było ruchu na porcie.
- Security Violation Count – „0” – licznik wykroczeń, który nie jest zwiększany w używanym w tym przypadku trybie „Protect”.
Tabela z przykładowym wpisem
Switch# show port-security address
Secure Mac Address Table
---------------------------------------------------------------------
Vlan Mac Address Type Ports Remaining
---- ----------- ---- ----- ----------
1 00E0.F7D5.41EB SecureConfigured Fa0/5 -
---------------------------------------------------------------------
Total Addresses in System (excluding one mac per port) : 0
Max Addresses limit in System (excluding one mac per port) : 1024
Code language: plaintext (plaintext)
Na początku konfiguracji pokazywałem pustą tabelę a w tym przykładzie możemy zobaczyć jak wygląda tabela z przykładowym wpisem. Wskazuje na to, że adres Hosta (00E0.F7D5.41EB) został statycznie wpisany w konfigurację portu FastEthernet0/5.
Port Security może poznać adresy MAC na danym porcie w sposób statyczny, czyli przez konfigurację, albo dynamiczny, czyli poprzez badanie przesyłanego ruchu. Tabelę adresów MAC w switchu można wyświetlić przy użyciu komendy:
Switch# show mac address-table
Code language: plaintext (plaintext)
Przykładowy wpis statyczny do tablicy adresów MAC:
Switch(config)# mac address-table static <adres_mac> vlan <numer_vlan> interface <nr_interfejsu>
Code language: plaintext (plaintext)
Zdarzenie naruszenia bezpieczeństwa
Załóżmy taki scenariusz w którym podłączyłeś właśnie do switcha uprawnione urządzenie (Host A). Nadszedł czas żeby sprawdzić jak zachowa się Port Security gdy podłączone zostanie urządzenie z innym adresem fizycznym, czyli takie które nie zostało uprawnione. Najpierw interfejs ten uruchomi się, a następnie natychmiast zostanie wyłączony. Spotka się to z wyświetleniem w konsoli błędu err-disabled. Zobaczmy to w praktyce:
Error Disabled jest stanem portu, który w praktyce oznacza, że port jest wyłączony. Nie przesyła żadnego ruchu, a zwykłe wyjęcie i ponowne włożenie kabla nie zmieni tego stanu. Jest to metoda zabezpieczenia przed konsekwencjami różnych, z definicji niebezpiecznych sytuacji w sieci. W omawianym przypadku stan Error Disabled portu możemy otrzymać, gdy tryb zabezpieczenia mechanizmu Port Security jest ustawiony na „Shutdown„.
Zaczynamy od włączenia trybu Shutdown:
Switch# conf t
Enter configuration commands, one per line. End with CNTL/Z.
Switch(config)# int fa0/5
Switch(config-if)# switchport port-security violation shutdown
Code language: plaintext (plaintext)
Następnie potwierdzamy użycie nowego trybu, parametr Violation Mode powinien być ustawiony na „Shutdown”:
Switch# show port-security interface fa0/5
Port Security : Enabled
Port Status : Secure-down
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 : 00E0.F7D5.41EB:1
Security Violation Count : 0
Code language: plaintext (plaintext)
Wszystko jest przygotowane zgodnie z planem. Wiemy, że jedynie Host A będzie zaakceptowany na porcie Fa0/5. Dlatego dla testu podłączymy Hosta B. Spójrzmy co się wydarzy po wygenerowaniu ruchu.
W momencie rozpoczęcia generowania ruchu port został wyłączony. Potwierdzają to też logi na switchu:
Switch#
%LINK-5-CHANGED: Interface FastEthernet0/5, changed state to administratively down
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/5, changed state to down
%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan1, changed state to down
Code language: plaintext (plaintext)
A tak prezentuje się zastany status portu:
Switch# show interfaces fa0/5 status
Port Name Status Vlan Duplex Speed Type
Fa0/5 err-disabled 1 auto auto 10/100BaseTX
Code language: plaintext (plaintext)
W kolumnie Security Violation wartość z 0 powinna zmienić się na 1, gdyż właśnie nastąpił incydent bezpieczeństwa.
Zgodnie z oczekiwaniami stan portu to Error Disabled. Zlikwidowanie połączenia od Hosta B nie przyniosło żadnego skutku, port nadal jest wyłączony. Aby pozbyć się stanu Error Disabled musimy zrestartować port:
Switch# conf t
Enter configuration commands, one per line. End with CNTL/Z.
Switch(config)# int fa0/5
Switch(config-if)# shutdown
%LINK-5-CHANGED: Interface FastEthernet0/5, changed state to administratively down
Switch(config-if)# no shutdown
%LINK-5-CHANGED: Interface FastEthernet0/5, changed state to down
Switch(config-if)# end
Switch#
%SYS-5-CONFIG_I: Configured from console by console
Switch# show interfaces fa0/5 status
Port Name Status Vlan Duplex Speed Type
Fa0/5 notconnect 1 auto auto 10/100BaseTX
Code language: plaintext (plaintext)
Jak obejść zabezpieczenia Port Security?
Jak wszystko na świecie tak i Port Security ma swoje wady. Mechanizm ten można oszukać na co najmniej dwa sposoby. Ponadto istnieje nieco lepsza metoda wychodzenia ze stanu err-disabled niż opisane wcześniej manualne resetowanie interfejsu. Przeczytasz o tym w naszym darmowym NSSletterze – mailingu dla sieciowców głodnych wiedzy.
Dołączając uzyskasz dostęp również do archiwum – tematykę tego artykułu rozszerzyliśmy w NSSletterze 25. Rozwiń swoją wiedzę już teraz i zapisz się używając formularza poniżej.
Bardzo fajnie opisane.
Cieszymy się, że materiał przypadł do gustu 🙂
Cześć, pytanie trochę z innej beczki. Aktualnie przerabiam kurs CCNA i tak się zastanawiam jak w sumie wygląda typowy dzień w pracy inżyniera sieciowego? Nie mam tu na myśli informatyka one-man-army. Kurs jest bardzo obfity w informacje i tak myślę czy ten ogrom teorii przekłada się aż tak na praktyke? Czy to prawda że przystępując do pierwszej pracy najważniejsze jest obycie w tematach co jak mniej więcej działa a reszta przychodzi z czasem?
Cześć Konrad! Fantastyczne pytanie 🙂 Udzielając odpowiedzi trochę się rozpisałem i pomyślałem, że będzie to też wartościowa informacja dla innych sieciowców. Dlatego też zawarłem ją w NSSletterze 29, w sekcji „Zapytaj NSS”. Tu strona archiwalna tego wydania: https://www.nastykusieci.pl/b4rjakamf1esepgwj07x6p/