Pull to refresh

Мониторинг трафика на коммутаторах при помощи Wireshark + Plink

Reading time4 min
Views6.2K

Сразу отмечу, что способ не мой, а подсмотренный у EVE-NG. Никаких особых преимуществ он не даёт, обладает массой ограничений, но кому-то, просто, удобнее работать с Wireshark в режиме реального времени.

Суть метода проста: перенаправить вывод от утилиты Tcpdump в SSH сессию и передать его в Wireshark.

Ограничения метода в том, что нагружается линк, через который заходите на устройство, а при определённом рвении, можно попытаться его же прослушать (расскажите о последствиях в комментариях). Из этого же ограничения следует, что нужно стараться уменьшить трафик, максимально фильтруя вывод tcpdump.

Ну, и по традиции, вы всё делаете на свой страх и риск. Настоятельно рекомендую, сначала, подумать о последствиях своих действий.

Ну, вот теперь, когда всё бесполезное сказано, переходим к сути.

Утилита Plink.exe которая входит в пакет Putty умеет создавать SSH сессии и выполнять там заданные команды. Эту её особенность, будем использовать для запуска на целевой машине утилиту Tcpdump. В общем виде команда выглядит так:

plink.exe -ssh -batch -pw Password root@10.0.0.2 "tcpdump -U -i eth0 -w -" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -

Plink поднимает SSH сессию до машины, от имени root, где запускает утилиту Tcpdump, которая отправляет вывод в SSH сессию, который "скармливаем" Wireshark.

Если вы никогда не заходили на машину используя Putty, то с первого раза у Вас не получится потому, что нужно обменяться ключами. То есть, сначала нужно запустить Putty, и разрешить прием ключа.

Если вам нужны полученные Wireshark данные, то не забудьте их сохранить перед закрытием сессии, иначе после нажатия ctrl+c все полученные данные превратятся в тыкву потеряются без предупреждения и объяснения причин.

Перейдём к практике:

Данная конструкция прекрасно работает на коммутаторах под управлением JunOS. Правда, нужно попасть не в cli, куда попадают простые пользователи, а разу в shell. Что, в свою очередь, возможно только от учётки root, которую нужно разрешить для сессии SSH. В режиме конфигурации добавляем:

user@switch# set system services ssh root-login allow

Коммитим, радуемся пользуемся.

Часто,на линуксовых машинах, бывает, что зайти непосредственно под root нельзя, но можно повыситься до него, тогда применяем следующую конструкцию:

plink.exe -ssh -batch -pw Password root@10.0.0.2 "echo -e 'SudoPass\r' | sudo -S tcpdump -U -i eth0 -w -" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -

Отдельно следует анально покарать упомянуть, что у некоторых производителей, интерфейсы в cli, имеют иное наименование, чем в shell. К примеру, коммутаторы Dell под управлением OS10.

У данных коммутаторов, интерфейс, который в cli называется "ethernet1/1/23", в shell будет называться "e101-023-0", а интерфейс 23го влана - "br23". Весь список интерфейсов можно получить традиционно, введя команду "ip a" в режиме shell, в который можно попасть введя команду "system bash" в cli.

Чтобы попасть в shell минуя ввод команд в cli у OS10 есть специальный пользователь с правами root - "linuxadmin". Следует упомянуть, что если вы хотите получить доступ от этого пользователя по SSH, то пароль данному зверю, нужно задавать непосредственно в его учётке. Алгоритм следующий:

  • в cli задаем временный пароль на system-user linuxadmin;

  • переходим в shell;

  • переключаемся на linuxadmin через su используя временный пароль;

  • меняем пароль на необходимый;

  • плачем пользуемся привилегированным доступом.

Таким образом, строка для коммутаторов Dell будет следующей:

plink.exe -ssh -batch -pw Password linuxadmin@10.0.0.2 "echo -e 'Password\r' | sudo -S tcpdump -U -i e101-023-0 -w -" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -

К сожалению, переходя к всё более производительным решениям, производители всё дальше и дальше отдаляют пути прохождения пакетов от процессора, контролирующего работу системы. И вот, уже, вырвать пакеты из цепких лап ASIC становится не банальной задачей. Но решаемой, благодаря предусмотрительности производителя.
Так например, у Mellanox есть механизм зеркалирования, подробно описанный на сайте техподдерки (https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-43/Monitoring-and-Troubleshooting/Network-Troubleshooting/SPAN-and-ERSPAN/##cpu-port-as-the-span-destination)

В крадце, суть в следующем: создается политика перенаправления входящего или исходящего трафика с нужного интерфейса на CPU, где его, в последствии ловит Tcpdump.

Итак, по пунктам, по рекомендации от производителя:

  • создаём файл span.rules, в директории /etc/cumulus/acl/policy.d/ в котором пропишем правила перенаправления, например:

[iptables]
     -A FORWARD -i swp1 -s 10.10.1.1 -j SPAN --dport cpu
     -A FORWARD -o swp1 -s 10.10.1.1 -j SPAN --dport cpu
  • применяем политики

user@switch$ sudo cl-acltool -i
  • проверяем

user@switch:~$ sudo iptables -L -v | grep SPAN
  • запускаем мониторинг трафика

plink.exe -ssh -batch -pw Password user@10.0.0.2 "echo -e 'SudoPass\r' | sudo -S tcpdump -U -i mirror -w -" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -

К сожалению, у меня не получилось, таким способом, получить исходящий трайфик с интерфейсов bond. Производитель, в инструкции, ловко обошел вопрос: "Можно ли зеркалить на CPU интерфейсы bond?"

Возможно, кто-то решит, что у меня есть предрасположенность к Mellanox и антипатия к Dell, то он ошибается, я люблю любовно(нет) собранный у меня зоопарк одинаково.

Надеюсь, информация была полезна.

Tags:
Hubs:
Total votes 6: ↑6 and ↓0+6
Comments8

Articles