Сразу отмечу, что способ не мой, а подсмотренный у 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, то он ошибается, я люблю любовно(нет) собранный у меня зоопарк одинаково.

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

Комментарии (8)


  1. LuggerMan
    02.12.2021 12:48
    +1

    Короче не смог настроить порт мирроринг и понеслась…


    1. toxella
      02.12.2021 18:57

      Он не на всем оборудований корректно работает. На свитчах huawei люди жалуются, например


    1. jovany Автор
      09.12.2021 17:36

      Зазеркаленый порт нужно чем-то слушать. А здесь всё идёт по существующему пути.
      Можно, конечно, зеркалить в VLAN и ловить его на подинтерфейсе, но, мне кажется, то как описано - проще.


      1. LuggerMan
        09.12.2021 17:59

        Да нет, обычно без заморочек какую-нибудь дежурную машину цепляю и все, именно через VLAN


  1. psycha0s
    02.12.2021 14:37
    +1

    Уже несколько лет пользуюсь rpcapd из пакета libpcap. Это демон, который производит мониторинг трафика и позволяет удаленно подключаться из Wireshark.


  1. EvgenNet
    03.12.2021 15:36

    Давать ssh доступ к shell джуна - очень грустная затея, но это лирика)
    Мои опыты с джунипером в этом направлении показали, что запущенный в shell tcpdump ловит лишь трафик, предназначенный самому джуну, транзитный в дамп не попадает. Поправьте, если ошибаюсь.


    1. jovany Автор
      09.12.2021 17:25

      Это общая проблема оборудования с ASIC. Процессор, просто, не видит трафик, тот проходит мимо него.


  1. DeeZ
    05.12.2021 20:40

    Вы же знаете что это уже давно встроено в сам Wireshark? (ssh форвардер).

    Прописать рспан до места где можно его снять - сильно долго, по-моему проще просто собрать локально дамп и скачать.

    Сталкивался что capture на cisco пропускают пакеты =( дамп с сервера и с циско не совпадают.