Логотип

RustNet: пользовательский интерфейс для мониторинга сети в реальном времени, созданный на Rust

Мониторинг сети в режиме реального времени с помощью RustNet — обзор

Как сетевой администратор, вы должны знать, что происходит в вашей сети прямо сейчас. Мониторинг сети в режиме реального времени помогает выявлять всплески активности, аномалии, некорректные процессы или нежелательные подключения по мере их возникновения. Существует множество инструментов для мониторинга сети в режиме реального времени. Недавно я наткнулся на многообещающий инструмент под названием RustNet.

RustNet — это инструмент для мониторинга на основе терминала, созданный на языке Rust. Он позволяет в режиме реального времени отслеживать сетевые подключения: какой процесс их инициировал, в каком они состоянии и какой объём данных они передают.

В этой статье мы узнаем, что такое RustNet, как его установить в Linux и как контролировать свою сеть с помощью RustNet.

 

Что такое RustNet?

RustNet — это кроссплатформенный инструмент с пользовательским интерфейсом для мониторинга сети, созданный на языке Rust. Основная цель RustNet — обеспечить мониторинг сетевых подключений в режиме реального времени с подробной информацией о состоянии.

RustNet запускается в окне терминала, что делает его подходящим для сред, в которых использование графических инструментов, таких как Wireshark, нецелесообразно, особенно на серверах.

Он поддерживает различные платформы, включая Linux, macOS и Windows. На компьютере с Linux его можно установить с помощью менеджера пакетов Rust Cargo или Docker. Для пользователей Fedora он доступен через репозиторий COPR.

Это проект с открытым исходным кодом, доступный на GitHub. Проект распространяется по лицензии Apache версии 2.0.

 

Ключевые особенности RustNet

1. Мониторинг в реальном времени и отслеживание подключений

RustNet отслеживает активные соединения по протоколам TCP, UDP, ICMP и ARP. Он отображает конкретные статусы соединений, в том числе подробные состояния для различных протоколов:

  • Состояния TCPESTABLISHEDSYN_SENTTIME_WAITCLOSED и другие.
  • Состояния QUICQUIC_INITIALQUIC_HANDSHAKEQUIC_CONNECTED, и QUIC_DRAINING.
  • Состояния DNSDNS_QUERY, и DNS_RESPONSE.
  • Состояния SSHBANNERKEYEXCHANGEAUTHENTICATION, и ESTABLISHED (для протокола SSH).

 

2. Глубокая проверка пакетов (DPI)

Инструмент определяет протоколы приложений, анализируя содержимое пакетов:

  • Он определяет HTTP-соединения, включая информацию о хосте.
  • Он обнаруживает соединения HTTPS/TLS и отображает индикацию имени сервера (Server Name Indication, SNI).
  • Он отслеживает DNS-запросы и ответы.
  • Он обеспечивает отслеживание SSH-подключений, включая определение версии и состояния подключения.
  • Он отслеживает протокол QUIC, в частности обнаруживает CONNECTION_CLOSE-фрейм и проверяет соответствие RFC 9000. DPI можно отключить с помощью --no-dpi-параметра командной строки, чтобы снизить нагрузку.

 

3. Идентификация процесса

Важной особенностью RustNet является возможность связывать сетевые подключения с запущенными процессами в системе.

  • В Linux он предлагает экспериментальную поддержку eBPF для повышения производительности и снижения накладных расходов при идентификации процессов.
  • Если eBPF недоступен или не работает, RustNet возвращается к стандартным методам, зависящим от платформы (например, к чтению файлов /proc в Linux или использованию lsof или PKTAP в macOS).
  • TUI показывает, какой метод обнаружения процессов активен в данный момент.
Читать  Вышла версия Krita 5.2.11 с исправлениями ошибок для пользователей Android

 

4. Пользовательский интерфейс терминала (TUI) и интерактивность

RustNet использует фреймворк ratatui для создания продвинутого интерфейса терминала:

  • Расширенная фильтрация: пользователи могут фильтровать подключения в режиме реального времени с помощью нечеткого поиска в стиле vim/fzf по всем полям, включая данные о разрешении экрана. Поддерживаются фильтры по ключевым словам (например, port:44process:firefoxsni:github.comstate:established).
  • Сортировка: подключения можно сортировать по различным столбцам, включая протокол, удалённый адрес, состояние, процесс и пропускную способность (для загрузки или выгрузки).
  • Визуальные индикаторы: цвет соединений меняется в зависимости от приближающегося времени ожидания: жёлтый означает, что время ожидания достигнуто на 75–90 % (устаревшее соединение), а красный — что оно превышено на 90 % (критическое состояние, соединение будет разорвано).

 

5. Архитектура и требования

RustNet использует многопоточную архитектуру с такими ключевыми компонентами, как поток захвата пакетов (с использованием libpcap), обработчики пакетов, обогащение процессов и поток очистки.

Из-за необходимости перехвата пакетов RustNet требует повышенных привилегий (например, sudo) в большинстве систем.

В Linux двоичному файлу можно предоставить определённые сетевые возможности (CAP_NET_RAW и CAP_NET_ADMIN), чтобы он мог работать без полного доступа root.

 

Установите RustNet в Linux

Убедитесь, что у вас есть всё необходимое:

  • RustNet — это кроссплатформенный инструмент, поэтому вам понадобится система под управлением Linux, macOS или Windows.
  • Рабочая цепочка инструментов Rust (т. е. rustc и cargo)
  • Разрешения на захват/проверку сетевого трафика (часто требуются права суперпользователя/администратора или аналогичные)

 

Установка Rust

Если вы ещё не установили Rust, запустите:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

 

Следуйте инструкциям. После установки запустите:

rustc --version
cargo --version

 

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

 

Установка RustNet

После настройки Rust установите RustNet с помощью cargo:

cargo install rustnet

 

Если команда не выполняется, возможно, вам нужно обновить набор инструментов.

rustup update

 

Если вы используете RHEL или Fedora, вы можете установить Rustnet через репозиторий COPR:

sudo dnf copr enable domcyrus/rustnet
sudo dnf install rustnet

 

Если вы используете системы на базе Arch, он доступен в AUR. Вы можете установить его с помощью любых вспомогательных инструментов AUR, таких как Paru или Yay:

paru -S rustnet

 

Кроме того, вы можете скачать готовые двоичные файлы RustNet с страницы релизов (https://github.com/domcyrus/rustnet/releases) и установить их с помощью менеджера пакетов вашего дистрибутива:

Читать  Выпущена версия GNU Screen 5.0.1 с исправлениями для нескольких уязвимостей в системе безопасности

Debian / Ubuntu:

sudo dpkg -i Rustnet_LinuxDEB_amd64.deb
sudo apt-get install -f

# Запустите с помощью sudo
sudo rustnet

# Необязательно: предоставьте возможность запуска без sudo
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/rustnet
rustnet

 

RHEL / Fedora:

sudo dnf установить Rustnet_LinuxRPM_x86_64.rpm

# Запустите с помощью sudo
sudo rustnet

# Необязательно: предоставьте возможность запуска без sudo
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/rustnet
rustnet

Мониторинг сетевого трафика в режиме реального времени с помощью RustNet

Для мониторинга сетевого трафика в реальном времени часто требуются повышенные привилегии.

  • В Linux запустите RustNet с sudo или убедитесь, что ваш пользователь входит в группу с доступом к /dev/net/tun или устройствам для захвата пакетов.
  • В macOS вам может потребоваться разрешить «полный доступ к диску» или предоставить права на захват пакетов в настройках системы.
  • В Windows запустите от имени администратора.

 

Предупреждение: Запуск средств захвата с повышенными привилегиями может представлять угрозу безопасности. Используйте только проверенные источники.

В демонстрационных целях я буду запускать RustNet на виртуальной машине Arch Linux.

Запустите RustNet с помощью команды:

sudo rustnet

 

Если вы хотите запустить его без sudo, выполните команду:

sudo setcap cap_net_raw,cap_net_admin=eip $(which rustnet)

 

Теперь запустите инструмент RustNet без sudo:

rustnet

 

Так выглядит интерфейс RustNet по умолчанию.

По умолчанию вы увидите представление Обзор (см. скриншот ниже). Это экран по умолчанию, на котором отображаются активные подключения.

Мониторинг сети в режиме реального времени с помощью RustNet — обзор

Мониторинг сети в режиме реального времени с помощью RustNet — обзор

 

Обзорный раздел

Экран «Обзор» условно разделён на следующие части:

  • Список активных подключений: каждая строка представляет собой активное подключение
  • Столбцы: локальный адрес, удалённый адрес, состояние, служба, приложение/хост, количество входящих/исходящих (в байтах), процесс
  • Правые панели / боковые панели: сводная статистика и обзор трафика
  • Статус / подсказки по клавишам: внизу отображаются такие инструкции, как «Нажмите ‘h’ для получения справки | ‘/’ для фильтрации и навигации | ‘c’ для копирования адреса | Подключений: 3»

 

Несколько заметок:

  • Выделенная строка (в >) — это выбранное в данный момент подключение.
  • Справа отображается статистика интерфейса, обработанные пакеты и общий трафик (входящий/исходящий), а также время «последнего обновления».
  • Изначально столбцы «Сервис» и «Приложение/хост» могут быть пустыми (-), если RustNet не может определить их для данного подключения.

 

Вот что означает каждый столбец / показатель:

  • Локальный адрес / порт: локальная конечная точка (ваш компьютер).
  • Удаленный адрес / порт: удаленный узел.
  • Состояние: состояния TCP, такие как ESTABLISHED, LISTEN, CLOSE_WAIT и т. д.
  • Входящие/исходящие байты: объём отправленных/полученных данных.
  • Процесс / PID: какой процесс владеет соединением (если доступно).

 

Понимающие состояния:

  • LISTEN: служба, ожидающая входящих подключений
  • УСТАНОВЛЕНО: активное, открытое соединение
  • CLOSE_WAITFIN_WAIT и т. д.: соединения на этапах завершения

 

Читать  Выходит VPN на базе WireGuard: WireGuard Easy v15 с полной перезаписью

Просмотр Сведений о подключении

Если вы нажмете Enter при подключении, откроется это подробное представление. Оно включает в себя:

  • Протокол, локальный адрес, удалённый адрес
  • Состояние (например, УСТАНОВЛЕНО)
  • Имя процесса, PID (при наличии)
  • Название службы, приложение (если обнаружено)
  • Статистика трафика: общее количество отправленных/полученных байтов, отправленных/полученных пакетов, текущая скорость

 

Это позволяет увеличить масштаб одного соединения, чтобы понять, как оно работает. Используйте Esc (или соответствующую клавишу), чтобы вернуться к обзору.

Просмотр сведений о сетевом подключении в RustNet TUI

Просмотр сведений о сетевом подключении в RustNet TUI

 

Справка / Просмотр условных обозначений ключей

Нажатие h (или tab) переключает экран справки.

Раздел Справки RustNet

Раздел Справки RustNet

 

На скриншоте выше вы можете увидеть:

  • q увольняется (с подтверждением)
  • Ctrl+C немедленно увольняется
  • Tab переключается между вкладками (Обзор, Подробности, Справка)
  • Клавиши навигации: jk (или клавиши со стрелками) для перемещения вверх/вниз
  • p переключается между отображением имён служб и номеров портов
  • s циклы сортировки столбцов (по пропускной способности, процессу и т. д.)
  • S переключает направление сортировки
  • c копирует удаленный адрес в буфер обмена
  • / переходит в режим фильтрации

 

В разделе справки приведено несколько примеров синтаксиса фильтров. Вы можете использовать их в качестве краткого справочника.

  • /port:44
  • /src:192.168
  • /dst:github.com
  • /process:firefox

Примеры использования RustNet

С помощью инструмента сетевого мониторинга RustNet вы можете выявлять проблемы в режиме реального времени. Вот несколько примеров того, как использовать RustNet для выявления проблем.

1. Обнаружение всплесков трафика

Если вы заметили внезапное значительное увеличение количества байтов, передаваемых по одному соединению:

  • Определите процесс
  • Проверить удаленный адрес
  • Проверьте, является ли это ожидаемым действием (например, резервное копирование, загрузка файла) или чем-то подозрительным

 

2. Подозрительные подключения / неизвестные хосты

Если подключение осуществляется к IP-адресу/домену, который вам неизвестен:

  • Отфильтруйте это соединение
  • Посмотрите на процесс и на время
  • При необходимости разрешите DNS-запросы или проверьте репутацию IP-адреса

 

3. Мониторинг обслуживания

Если вы управляете веб-сервером:

  • Фильтр для порта 80 или 443
  • Следите за тем, какие клиенты подключаются
  • Смотрите размер ответа / сроки

 

Заключение

В этой статье мы рассказали, что такое RustNet, как установить и использовать RustNet для мониторинга вашей сети в режиме реального времени.

Мониторинг сети в режиме реального времени — важная задача системного или сетевого администратора. Он позволяет увидеть, что происходит «под капотом», выявить аномалии и понять, как ведёт себя сеть в процессе работы. RustNet TUI — это простой, но эффективный инструмент для начала работы.

Лучший способ узнать больше об этом инструменте — использовать его ежедневно. Попробуйте запустить RustNet на тестовой системе, сгенерируйте трафик (например, откройте несколько вкладок в браузере, передайте файлы), изучите фильтры и поэкспериментируйте.

Когда вы освоитесь, вы сможете расширить эту настройку, добавив скрипты, оповещения или информационные панели.

 

Ресурс:

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Редактор: AndreyEx

Рейтинг: 5 (1 голос)

Важно: Данная статья носит информационный характер. Автор не несёт ответственности за возможные сбои или ошибки, возникшие при использовании описанного программного обеспечения.

Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала