Иногда мне необходимо было залезть на 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