Jak przechwytywać ruch na przełącznikach Cisco IOS?

23

Aby zbadać problem w komunikacji między klientem a serwerem, muszę przechwycić pakiety do analizy. Jednak nie można instalować analizatora pakietów, takiego jak Wireshark lub tcpdump, na kliencie lub serwerze. Klient jest podłączony do Catalyst 3560, a serwer do przełącznika Catalyst 3750.

Czy mogę podłączyć laptopa do portu przełączników w celu przechwytywania ruchu za pomocą analizatora pakietów mojego laptopa i jak to zrobić?

Stefan
źródło
Zrobiłem to samo pytanie z odpowiedzią dla Brocade tutaj: networkengineering.stackexchange.com/questions/672/... Czuje się trochę dziwnie ... :)
Benjamin A.
@BenjaminA. Świetny! Dzięki za rozwiązanie dla Brocade i dodanie linku tutaj!
Stefan,
Czy w sesji jest konfiguracja, która pozwoliłaby przechwytującemu komputerowi / serwerowi nadal uzyskiwać IP z DHCP?
mickeyHR
Czy jakaś odpowiedź ci pomogła? jeśli tak, powinieneś zaakceptować odpowiedź, aby pytanie nie wyskakiwało wiecznie, szukając odpowiedzi. Alternatywnie możesz podać i zaakceptować własną odpowiedź.
Ron Maupin

Odpowiedzi:

34

Port przełączania klienta lub port przełączania serwera można monitorować. Trzeci port przełączający można skonfigurować jako port lustrzany . Oznacza to, że ten port lustrzany odbierze kopie wszystkich pakietów na odpowiednim oryginalnym porcie, a oryginalny ruch nie zostanie zmieniony.

Na przykład na Catalyst 3560:

  1. Wejdź do trybu konfiguracji:

    conf t
    
  2. Zdefiniuj źródło i ustaw numer sesji:

    monitor session 1 source interface fa 0/24
    

    Tutaj numer sesji może wynosić od 1 do 66, możesz również określić sieć VLAN lub kanał Ethernet. Możliwe są również zakresy interfejsów fa 0/25 - 26i lista interfejsów, np. fa 0/24,fa 0/26Jeśli chcesz monitorować kilka klientów jednocześnie. Również poprzez powtórzenie polecenia możesz dodać porty lub usunąć za pomocą no. Mieszanie portów i sieci VLAN nie jest możliwe w tej samej sesji, innym ograniczeniem jest to, że nie można użyć portu docelowego jako portu źródłowego.

  3. Zdefiniuj port docelowy:

    monitor session 1 destination interface gi 0/1
    

    Możesz użyć normalnego portu, ale nie VLAN. Podobnie jak powyżej, port docelowy nie może być portem źródłowym: wykorzystywany tutaj port może być portem źródłowym lub docelowym i tylko jednej sesji. Ponownie możesz określić wiele portów jak wyżej.

  4. Możesz chcieć exitprzejść do trybu konfiguracji i zapisać konfigurację.

  5. Możesz spojrzeć na swoją zdefiniowaną sesję - tutaj wiele portów, próbowałem jak wyżej:

    #show monitor session 1
    Session 1
    ---------
    Type                   : Local Session
    Source Ports           :
        Both               : Fa0/24,Fa0/25-26
    Destination Ports      : Fa0/48,Gi0/1
        Encapsulation      : Native
              Ingress      : Disabled
    

    Możesz zobaczyć enkapsulację tutaj - opcjonalnie możesz ustawić ją replicatena replikację metody enkapsulacji interfejsu źródłowego, na przykład poprzez dodanie encapsulation replicatepo interfejsie źródłowym. Ponadto, można określić kierunku ( tx, rx, both) oraz sieci VLAN filtry i więcej. Te Ingress: Disabledśrodki linia że przełącznik nie będzie akceptować żadnych ramek przedstawionych mu przez urządzenia przechwytywania w porcie docelowym. Aby uzyskać bardziej szczegółowe informacje oraz dalsze ograniczenia i ustawienia domyślne, zapoznaj się z odnośnikiem do komendy wersji IOS twojego przełącznika.

Po skonfigurowaniu portu źródłowego i docelowego możesz przechwytywać ruch za pomocą laptopa podłączonego do portu docelowego, na przykład za pomocą Wireshark.

Liczba sesji źródłowych może być ograniczona, na przykład 3560 obsługuje maksymalnie 2.

Po przechwyceniu nie zapomnij usunąć tej konfiguracji sesji.

Stefan
źródło
1
Możesz zostawić sesję monitorowania na miejscu i po prostu wyłączyć łącze w karcie sieciowej monitora hosta. Pakiety nie będą przechwytywane i wysyłane przez łącze, które nie działa. Na serwerze Windows mam podwójne karty sieciowe z jednym o nazwie SPAN. Kiedy nie chcę, aby przełącznik robił narzuty, przechodzę do właściwości sieci i wyłączyłem SPAN NIC. (Zwykle porty źródłowe są zmieniane, ale port docelowy pozostaje taki sam, więc wiem, że w przyszłości zamierzam ponownie
utworzyć kopię
Aby wyłączyć sesję monitorowania, użyj# no monitor session 1
wimh
17

Jeśli Twój ruch przypadkowo przechodzi przez router z systemem Cisco IOS 12.4 (20) T lub nowszym, inną możliwością jest użycie funkcji przechwytywania pakietów osadzonych.

Ta funkcja NIE jest dostępna na platformach przełączników, takich jak 3560 lub 3750.

Funkcja ta polega na przechwytywaniu i zapisywaniu na routerze małego pliku PCAP, który można pobrać i przeanalizować za pomocą Wireshark.

A kilka linków ze szczegółami .

Mike Marotta
źródło
7
... i właśnie dlatego dobrze jest, gdy ludzie publikują, a następnie odpowiadają na własne pytania: Ponieważ inni użytkownicy są proszeni o wskoczenie i dodanie czegoś nowego. Słodkie.
Craig Constantine
W tym momencie ASA zawsze miała tę funkcję, używając polecenia przechwytywania . Został odziedziczony po PIX, który miał go od wersji 6.2.
James Sneeringer,
5

Chciałbym dodać ELAM do miksu. ELAM jest obsługiwany przez PFC3 (6500, 7600).

Musisz mieć włączoną funkcję „usługa wewnętrzna”, ale jest to dość bezpieczna funkcja, uruchomiłem ją dobrze w sieciach produkcyjnych i jeszcze raz nie doświadczyłem negatywnego wpływu.

Zasadniczo to, co robi ELAM, pokazuje, co zostało wysłane do przetwarzania odnośników do PFC przez DBUS (Data BUS) i co PFC dało jako wynik wyszukiwania w RBUS (Result BUS).

  1. pokaż plat cap elam asic superman slot DFC / PFC_SLOT_YOU_WANT_TO_LOOK
  2. pokaż plat cap elam trigger dbus ipv4 jeśli ip_sa = 192.0.2.1
  3. pokaż plat cap elam start
  4. pokaż dane dotyczące plat cap elam

W przypadku wyzwalaczy dostępna jest pomoc online, IP_SA == adres źródłowy IP, IP_DA == adres docelowy IP, wiele innych jest dostępnych. JEŚLI to, co chcesz sprawdzić, nie jest dostępne, możesz wykonać dopasowanie danych + maska ​​dla dowolnych danych w pierwszym 64B.
Dowolny wyzwalacz jest nieco niewygodny, ale może być dożywotni, użyjesz go w następujący sposób:

pokaż przechwytywanie platformy elam wyzwalaj dbus inne jeśli dane = DATA1 DATA2 DATAn [MASK1 MASK2 MASKn]

Dane zaczynają się od DMAC. Powiedzmy, że chcemy przechwycić przychodzący stos MPLS o wartości [0 1951], ale nie dbamy o adresy MAC, moglibyśmy to zrobić:

pokaż przechwytywanie platformy wyzwalaj elam dbus inne, jeśli dane = 0 0 0 0x88470000 0x00000079 0xF0000000 [0 0 0 0xffffffff 0xf000ffff 0xf0000000]


Przykładowy wynik może być:

7600#show platform capture elam data
DBUS data:
SEQ_NUM                          [5] = 0x1D
QOS                              [3] = 1
QOS_TYPE                         [1] = 0
TYPE                             [4] = 0 [ETHERNET]
STATUS_BPDU                      [1] = 0
IPO                              [1] = 1
NO_ESTBLS                        [1] = 0
RBH                              [3] = b000   ! port-channel hash
CR                               [1] = 1      ! recirculated
TRUSTED                          [1] = 1
NOTIFY_IL                        [1] = 0
NOTIFY_NL                        [1] = 0
DISABLE_NL                       [1] = 0
DISABLE_IL                       [1] = 0
DONT_FWD                         [1] = 0
INDEX_DIRECT                     [1] = 0
DONT_LEARN                       [1] = 0
COND_LEARN                       [1] = 0
BUNDLE_BYPASS                    [1] = 0
QOS_TIC                          [1] = 1
INBAND                           [1] = 0
IGNORE_QOSO                      [1] = 0
IGNORE_QOSI                      [1] = 0
IGNORE_ACLO                      [1] = 0
IGNORE_ACLI                      [1] = 0
PORT_QOS                         [1] = 0
CACHE_CNTRL                      [2] = 0 [NORMAL]
VLAN                             [12] = 4086
SRC_FLOOD                        [1] = 0
SRC_INDEX                        [19] = 0xC0          ! divmod64(0xc0) = 3,0, add 1 to each, 4/1 == our physical port
LEN                              [16] = 102
FORMAT                           [2] = 0 [IP]
MPLS_EXP                         [3] = 0x0
REC                              [1] = 0
NO_STATS                         [1] = 0
VPN_INDEX                        [10] = 0x7F
PACKET_TYPE                      [3] = 0 [ETHERNET]
L3_PROTOCOL                      [4] = 0 [IPV4]
L3_PT                            [8] = 1 [ICMP]
MPLS_TTL                         [8] = 0
SRC_XTAG                         [4] = 0xF
DEST_XTAG                        [4] = 0xA
FF                               [1] = 0
MN                               [1] = 0
RF                               [1] = 1
SC                               [1] = 0
CARD_TYPE                        [4] = 0x0
DMAC                             = 8843.e1de.22c0
SMAC                             = 0000.0000.0000
IPVER                            [1] = 0 [IPV4]
IP_DF                            [1] = 1
IP_MF                            [1] = 0
IP_HDR_LEN                       [4] = 5
IP_TOS                           [8] = 0x0
IP_LEN                           [16] = 84
IP_HDR_VALID                     [1] = 1
IP_CHKSUM_VALID                  [1] = 1
IP_L4HDR_VALID                   [1] = 1
IP_OFFSET                        [13] = 0
IP_TTL                           [8] = 63
IP_CHKSUM                        [16] = 0xBCF1
IP_SA                            = x.x.x       ! to protect the guilty
IP_DA                            = y.y.y.y     ! to protect the guilty
ICMP_TYPE                        [8] = 0x8
ICMP_CODE                        [8] = 0x0
ICMP_DATA [104]
0000:  A0 8B 18 A5 00 39 46 35 BF 51 00 6F 3C            ".....9F5.Q.o<"
CRC                              [16] = 0x71B3

RBUS data:
SEQ_NUM                          [5] = 0x1D
CCC                              [3] = b100 [L3_RW]  ! normal L3_RW, we know it was not dropped, L2/mls policed etc
CAP1                             [1] = 0
CAP2                             [1] = 0
QOS                              [3] = 0
EGRESS                           [1] = 0
DT                               [1] = 0 [IP]
TL                               [1] = 0 [B32]
FLOOD                            [1] = 1
DEST_INDEX                       [19] = 0x3E8    ! same as VLAN, but not always    
VLAN                             [12] = 1000     ! you may need to check internal vlan     
RBH                              [3] = b111      ! again, port-channel hash
RDT                              [1] = 0
GENERIC                          [1] = 0
EXTRA_CICLE                      [1] = 0
FABRIC_PRIO                      [1] = 0
L2                               [1] = 0
FCS1                             [8] = 0x1
IP_TOS_VALID                     [1] = 1
IP_TOS_OFS                       [7] = 15
IP_TOS                           [8] = 0x0
IP_TTL_VALID                     [1] = 1
IP_TTL_OFS                       [7] = 22
IP_TTL                           [8] = 62
IP_CSUM_VALID                    [1] = 1
IP_CSUM_OFS                      [7] = 24
IP_CSUM                          [16] = 0xBDF1
DELTA_LEN                        [8] = 0
REWRITE_INFO
 i0  - replace bytes from ofs 0 to ofs 11 with seq 'D0 D0 FD 09 34 2D 88 43 E1 DE 22 C0'.   ! this is the actual L2 rewrite data, so you should obviously see DMAC and SMAC here 
FCS2                             [8] = 0x0
7600#

Prawie wszystkie większe platformy mają tego typu przechwytywanie pakietów niskiego poziomu, które są wyjątkowo przydatne, gdy trzeba sprawdzić, czy HW robi to, co mówi konfiguracja, czasem występują wady oprogramowania i robi coś innego niż oczekiwano.
Wiem, że w GSR widać tranzyt w pamięci, w Juniper Trio jest też całkiem niezłe narzędzie. Brokat może to zrobić. To dość zaskakujące, że nie są one udokumentowane na stronach dostawców.

iti
źródło