Иногда мне необходимо было залезть на linux-сервера и иметь возможность просматривать текущий трафик в реальном времени. Как я делал до этого? На целевом сервере устанавливался tcpdump, выхлоп которого писался в файлик. Далее файл через scp тянулся на локальный компьютер под Windows и открывался в Wireshark.
В определенный момент мне захотелось более удобного решения и я, найдя возможность запустить Wireshark на винде (локально) в связке с tcpdump-ом на сервере (удаленно) на просторах интернета, и немного подпилив эту реализацию, решил поделиться с Вами.
Работающая связка (которую проверил я) состоит из:
И хотя, как мне кажется, эти программы будут работать на большинстве версий так же, как и сейчас, я думаю стоит упомянуть именно рабочую конфигурацию.
Установим необходимое ПО и настройки на сервере и десктопе с Windows.
На этом на стороне Linux закончили.
Далее для Windows необходимо установить putty (и с ним обязательно plink), а также само собой wireshark
Открываем putty

Создаем новую сессию trafficmonitor и оставляем пустым Hostname

Идем в настройки авторизации и добавляем ранее вытянутый ключ (который не забываем протянуть через puttygen, чтобы он подходил для putty)

Сохраняем сессию в главном окне.
Хочу уточнить, что у меня также была потребность настройки этого функционала через socks5 прокси с авторизацией, поэтому я покажу как и это сделать, но для этого нам нужна еще одна сессия для putty (trafficmonitor_via_proxy):

Также прописываем ключ

И настраиваем прокси (в моем случае тип, IP-port, username-password)

Сохраняем.
Собственно Putty готово, а ведь из него мы и будем для plink дергать эти сохраненые сессии.
Теперь дело за cmd:
Теперь после запуска этого cmd вы сможете непосредственно мониторить трафик на сервере, без лишней волокиты. Для удобства можно также подкорректировать cmd-файл, чтобы он брал из настроек putty уже существующие сессии.
Вот так, к примеру, выглядит работа этого скрипта:
1. Отвечаем на вопросы

2. Выбираем интерфейс


3. Наслаждаемся

Стоит отметить что поток в Wireshark можно фильтровать, но нельзя остановить — он не возобновится. По итогу также удобно сохранить интересующий нас кусок трафика в pcap-файл.
На этом все и всем спасибо.
UPD1. Если серверов больше 1, то в каждом необходимо проделать процедуру добавления пользователя trafficmonitor и помещения в его домашнюю директорию раннее созданного нами открытого ключа id_rsa.pub(authorized_keys) по пути ~/.ssh/ с правами 755 на каталог и 644 на файл соотвественно. А также озаботиться наличием записей в sudoers
В определенный момент мне захотелось более удобного решения и я, найдя возможность запустить Wireshark на винде (локально) в связке с tcpdump-ом на сервере (удаленно) на просторах интернета, и немного подпилив эту реализацию, решил поделиться с Вами.
Работающая связка (которую проверил я) состоит из:
tcpdump: version 4.9.2 wireshark: version 2.4.4 (v2.4.4-0-g90a7be11a4) plink: release 0.67 Windows 7 64 Bit Максимальная
И хотя, как мне кажется, эти программы будут работать на большинстве версий так же, как и сейчас, я думаю стоит упомянуть именно рабочую конфигурацию.
Установим необходимое ПО и настройки на сервере и десктопе с Windows.
Linux (у меня debian)
# установка необходимых программ apt-get install sudo tcpdump -y # добавление дополнительного пользователя в систему для взаимодействия через него по SSH adduser trafficmonitor # логинимся в него su trafficmonitor # создаем ключи ssh-keygen (по умолчанию создаст в домашней директории в каталоге .ssh) ssh-keygen # переименовываем открытый ключ и утягиваем закрытый к себе через scp/winscp mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys # права на каталог и файл chmod 755 ~/.ssh && chmod 644 ~/.ssh/authorized_keys # идем в sudoers... nano /etc/sudoers # ...и разрешаем пользователю trafficmonitor безпарольно выполнять от sudo две команды: trafficmonitor ALL=NOPASSWD: /usr/sbin/tcpdump trafficmonitor ALL=NOPASSWD: /sbin/ip addr show # рестартуем ssh (тут стоит оговориться, что у вас настроена авторизация по ключам и конечно отключена авторизация по паролю, иначе вы получите еще одну слабую точку в виде подбора пароля к этому юзеру) service ssh restart
На этом на стороне Linux закончили.
Windows
Далее для Windows необходимо установить putty (и с ним обязательно plink), а также само собой wireshark
Открываем putty

Создаем новую сессию trafficmonitor и оставляем пустым Hostname

Идем в настройки авторизации и добавляем ранее вытянутый ключ (который не забываем протянуть через puttygen, чтобы он подходил для putty)

Сохраняем сессию в главном окне.
Хочу уточнить, что у меня также была потребность настройки этого функционала через socks5 прокси с авторизацией, поэтому я покажу как и это сделать, но для этого нам нужна еще одна сессия для putty (trafficmonitor_via_proxy):

Также прописываем ключ

И настраиваем прокси (в моем случае тип, IP-port, username-password)

Сохраняем.
Собственно Putty готово, а ведь из него мы и будем для plink дергать эти сохраненые сессии.
Теперь дело за cmd:
@echo off :: ip/hostname целевого linux-сервера set /P ip="Input IP or hostname: " :: TCP-порт для службы SSH set /P port="Input SSH port(default 22): " IF "%port%"=="" ( SET port=22 echo "SSH port is TCP/22..." ) ELSE (echo "SSH port is TCP/%port%...") :: в некоторых случаях необходимо видеть также SSH трафик, через который пойдет дамп, но в обычных случаях я его отключаю set /P ssh="Show SSH traffic?(y/N): " IF "%ssh%"=="y" (echo "SSH will be showed...") ELSE ( SET visible_ssh='not port 22' echo "SSH won't be showed..." ) :: вопрос об использовании предварительно настроенной сессии через socks5 set /p socks="Use SOCKS5?(y/N): " IF "%socks%"=="y" ( echo "SOCKS5 will be used..." SET params=-load trafficmonitor_via_proxy ) ELSE ( echo "Direct connection will be used..." SET params=-load trafficmonitor ) :: данная команда вываливает список интерфейсов, если есть необходимость для выбора определенного (хотя в данной версии надо его указывать в любом случае) plink %params% trafficmonitor@%ip% -P %port% "sudo ip addr show" @echo. set /P int="Select interface(eth0,lo...) " :: запускаем сайм wireshark и через pipe из tcpdump передаем в него наш трафик plink %params% trafficmonitor@%ip% -P %port% "sudo tcpdump -i %int% -U -s0 -w - %visible_ssh%" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -
Вывод
Теперь после запуска этого cmd вы сможете непосредственно мониторить трафик на сервере, без лишней волокиты. Для удобства можно также подкорректировать cmd-файл, чтобы он брал из настроек putty уже существующие сессии.
Вот так, к примеру, выглядит работа этого скрипта:
1. Отвечаем на вопросы

2. Выбираем интерфейс


3. Наслаждаемся

Стоит отметить что поток в Wireshark можно фильтровать, но нельзя остановить — он не возобновится. По итогу также удобно сохранить интересующий нас кусок трафика в pcap-файл.
На этом все и всем спасибо.
UPD1. Если серверов больше 1, то в каждом необходимо проделать процедуру добавления пользователя trafficmonitor и помещения в его домашнюю директорию раннее созданного нами открытого ключа id_rsa.pub(authorized_keys) по пути ~/.ssh/ с правами 755 на каталог и 644 на файл соотвественно. А также озаботиться наличием записей в sudoers
