В определенный момент мне захотелось более удобного решения и я, найдя возможность запустить 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
Комментарии (21)
SmirnoffA
30.01.2018 22:16Не в тему. «нашев»?, кошмар какой-то… Да что же это такое? Ну неужели можно быть настолько «узким» специалистом?
DeeZ
31.01.2018 08:23Вы изобрели велосипед )
Я под винду брал враперы из пакета eve-ng немного правил их под свои нужны.
На линуксе алиас:
alias rshark='OIFS=$IFS;IFS=,;rshark=( $(zenity --forms --title="Remote Shark" --text="tcpdump parameters" --separator="," --add-entry="host*" --add-entry="interface*" --add-entry="filter" --add-entry="extra options")); [[ -n ${rshark[0]} && -n ${rshark[1]} ]] && ssh root@${rshark[0]} ${rshark[3]} "/usr/sbin/tcpdump -U -i ${rshark[1]} -s 0 -w - ${rshark[2]}" | wireshark -k -i - ;IFS=$OIFS;'
spacewalk Автор
31.01.2018 10:50Я не изобретал, а сказал, что немного подпилил существующее решение. В частности добавил авторизацию на сервер по ключам, отдельного пользователя (чтобы не логиниться под рутом, обычно отключаю эту возможность в ssh) и хождение через socks-прокси из-под Windows
throttle
31.01.2018 15:29Как же это все сложно по виндой. Сам когда-то реализовывал нечто похожее, но забросил, т.к. было нестабильно.
В linux это делается одной строкой.Tufed
31.01.2018 16:55И эта строка (комментарием выше) пока что меня пугает.
throttle
31.01.2018 17:26Там просто алиас со свистелками. Можно так, например:
ssh user@server sudo tcpdump -i eth0 'net 192.168.1.0/24 and not port 22' -s 0 -w - | wireshark -k -i -
Дляuser
наserver
должно быть разрешено запускатьsudo tcpdump
без пароля.cruxacrux
31.01.2018 17:37tcpdump не нужно запускать от рута, чтобы открыть сетевое устройство для перехвата трафика. Выдайте /usr/sbin/tcpdump разрешения CAP_NET_RAW и CAP_NET_ADMIN:
setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
И прав рута не нужно будет для запускаthrottle
31.01.2018 17:48Да, так еще лучше. И еще проще, чем под виндой.
И почему «все» думают, что linux — это сложно?.. :)
ValdikSS
02.02.2018 11:56…и его смогут запускать все пользователи.
cruxacrux
02.02.2018 16:16Это понятно. Как и с setuid программами, рекомендуется устанавливать файловые ограничения какой группе пользователей можно иметь доступ к исполнению такого файла. Просто в отличии от sudo программа получит более ограниченный набор прав.
NLO
НЛО прилетело и опубликовало эту надпись здесь
spacewalk Автор
Спасибо!