- Home »

Отслеживание трафика по процессам с помощью nethogs: простая диагностика в Linux
О чём эта статья и почему она важна
Если ты когда-нибудь задавался вопросом: «Кто, чёрт возьми, жрёт мой трафик на сервере?» — значит, ты пришёл по адресу. Сегодня разбираемся с nethogs — утилитой, которая показывает сетевое потребление не просто по портам или IP, а по процессам. Это как «top» для сети, только вместо нагрузки на CPU/память ты видишь, какой конкретно сервис или контейнер сейчас качает или отдает данные. В эпоху облаков, VPS, Docker и прочих радостей — штука незаменимая. Особенно если ты держишь руку на пульсе своих серверов или хочешь быстро вычислить подозрительный процесс, который внезапно съел весь канал.
Почему это важно: проблема и её значимость
В мире, где сервера крутятся в облаках, а на одном VPS могут жить десятки сервисов, бывает сложно понять, какой процесс реально грузит сеть. «iftop», «vnstat», «netstat» — все они показывают трафик по IP, портам, интерфейсам, но вот кто именно (какой pid или команда) это делает — уже не так просто узнать. А если у тебя на сервере и nginx, и docker, и почта, и ещё десяток микросервисов, то без точного ответа на этот вопрос ты рискуешь:
- Не заметить, как какой-то багнутый контейнер выкачивает весь лимит трафика за ночь.
- Потратить кучу времени на ручной анализ логов и конфигов.
- Пропустить момент, когда сервер начал участвовать в DDoS или рассылке спама.
Вот тут и появляется nethogs — твой сетевой детектив, который быстро и понятно показывает, кто виноват.
Как это работает? Алгоритмы и структура nethogs
В отличие от классических сетевых мониторов, nethogs отслеживает сетевые соединения на уровне процессов. Он использует системные вызовы ядра Linux (например, читает /proc/net/tcp, /proc/net/udp и сопоставляет их с /proc/[pid]/fd/), чтобы построить карту: какой процесс каким сокетом пользуется, и сколько трафика через этот сокет прошло.
Короче, алгоритм такой:
- Сканируем все сетевые соединения в системе.
- Для каждого соединения ищем, какой процесс его открыл (через файловые дескрипторы в /proc).
- Суммируем трафик по каждому процессу и отображаем в реальном времени.
Это позволяет увидеть не только «что» и «куда», но и «кто» — прямо по имени процесса и его PID. Особенно круто, если ты ловишь утечку трафика в Docker-контейнерах или подозреваешь, что кто-то запускает на сервере майнер.
Как быстро и просто всё настроить? Практические советы и примеры
Установка nethogs
Всё до боли просто. В большинстве дистрибутивов (Debian, Ubuntu, CentOS, Fedora) nethogs есть в стандартных репозиториях.
# Для Debian/Ubuntu
sudo apt update
sudo apt install nethogs
# Для CentOS/RHEL/Fedora
sudo yum install nethogs
# или
sudo dnf install nethogs
Если вдруг ты на каком-то экзотическом дистрибе или хочешь самую свежую версию — репозиторий на GitHub.
Запуск и базовые команды
nethogs требует root-доступа, потому что ему нужно читать /proc и sniff-ить интерфейсы.
sudo nethogs
По умолчанию он мониторит все интерфейсы, но можно явно указать нужный:
sudo nethogs eth0
sudo nethogs enp0s3
sudo nethogs wlan0
Если у тебя несколько интерфейсов, можно указать сразу несколько:
sudo nethogs eth0 eth1
Краткий обзор интерфейса
- PID/Program name — имя процесса и его PID.
- DEV — сетевой интерфейс (eth0, ens33 и т.д.).
- Sent/Received — скорость отправки и приёма трафика (KB/s).
- Total Sent/Received — общий объём трафика (если запущено с параметром -t).
Управлять можно горячими клавишами:
- q — выйти
- m — поменять режим отображения (по скорости, по байтам, по PID и т.д.)
- r — сбросить статистику
Автоматизация и вывод в консоль
Если хочется использовать nethogs в скриптах, есть режим вывода в текстовый поток:
sudo nethogs -t
Каждая строка — это событие: PID USER DEV SENT RECEIVED PROGRAM
Можно парсить вывод, отправлять алерты в Telegram или логировать подозрительные процессы. Например, простейший однострочник:
sudo nethogs -t | grep -i "python"
— покажет только процессы python, которые сейчас качают/отдают трафик.
Примеры и кейсы: где nethogs реально помогает
Кейс | Результат с nethogs | Рекомендации | Что было бы без nethogs |
---|---|---|---|
Неожиданный расход трафика на VPS. (Провайдер прислал письмо, что лимит превышен) |
Запуск nethogs показал: mysqld качает данные на внешний IP. | Проверить конфиг MySQL, убедиться, что нет открытого доступа из вне. | Долгий анализ логов, tcpdump, гадание на кофейной гуще. |
Контейнер Docker грузит сеть, а какой — неясно. | nethogs показал PID, связанный с контейнером, и имя образа. | Остановить/перезапустить только нужный контейнер. | Перезапуск всех контейнеров, потеря времени. |
Сервер начал тормозить, подозрение на DDoS. | nethogs выявил подозрительный процесс (например, curl/wget), который flood-ит сеть. | Убить процесс, заблокировать пользователя, проверить на вирусы. | Долгий разбор, возможно, пропустишь момент. |
Нужно быстро проверить, какой сервис жрёт исходящий трафик. | nethogs сразу показывает лидеров по трафику. | Оптимизировать конфиги, ограничить скорость. | Долго искать через netstat/iftop, без PID. |
Положительный кейс
На выделенном сервере неожиданно вырос исходящий трафик. Владелец быстро запускает sudo nethogs eth0
и видит, что exim (почтовый сервер) отправляет гигабайты данных. Оказалось, сервер взломали и используют для спама. За 2 минуты найден виновник, почта остановлена, сервер чистится. Без nethogs — пришлось бы ковырять логи, анализировать netstat, терять часы.
Отрицательный кейс
Пользователь запускает nethogs на VPS с нестандартным ядром, а оно не поддерживает нужные флаги в /proc. В результате nethogs показывает только часть процессов или вообще пусто. Решение: обновить ядро, проверить поддержку /proc/net/tcp, /proc/net/udp.
Ошибки новичков, мифы и похожие решения
- Ошибка: Запускать nethogs без sudo/root.
Результат: Утилита не видит все процессы, выводит неполную картину. - Миф: nethogs — это просто красивый iftop.
Правда: iftop показывает трафик по IP/портам, но не по процессам. nethogs — единственный стабильный инструмент, который связывает трафик с PID. - Ошибка: Использовать nethogs для долгосрочного мониторинга.
Результат: Утилита не предназначена для сбора статистики за недели/месяцы, не пишет логи (только потоковый вывод). - Похожее ПО: netstat, iftop, tcpdump — все они не показывают связь с процессом напрямую.
Статистика и сравнение с другими решениями
Утилита | Показывает процессы? | Показывает IP/Порт? | Графика в терминале? | Поддержка скриптов? |
---|---|---|---|---|
nethogs | Да | Нет | Да | Да (-t) |
iftop | Нет | Да | Да | Нет |
vnstat | Нет | Нет | Нет | Да |
netstat | Частично (с -p) | Да | Нет | Да |
tcpdump | Нет | Да | Нет | Да |
Интересные факты и нестандартные способы использования
- nethogs отлично работает внутри Docker-контейнеров, если дать ему доступ к host network. Можно мониторить, какой контейнер грузит сеть на хосте.
- С помощью
watch -n 1 nethogs -t
можно получить «живой» лог трафика по процессам для последующего анализа. - Можно запускать nethogs по cron-у (например, раз в 5 минут с выводом в файл), чтобы отлавливать пиковые нагрузки.
- Если у тебя много пользователей на сервере, быстро найдёшь, кто качает торренты, даже если они используют нестандартные клиенты.
- В связке с fail2ban можно автоматически банить пользователей, если их процесс превышает лимит трафика.
Новые возможности: автоматизация и скрипты
nethogs в режиме -t
можно интегрировать в любые мониторинговые системы. Например, парсить поток вывода через Python/Bash, отправлять алерты в Telegram, Slack или по email, если какой-то процесс резко увеличил трафик.
Пример скрипта для мониторинга трафика процесса:
#!/bin/bash
# Мониторим, если какой-то процесс выдает больше 10MB/s — алертим
sudo nethogs -t | while read line; do
sent=$(echo $line | awk '{print $4}')
if (( $(echo "$sent > 10000" | bc -l) )); then
echo "ALERT: High network usage: $line" | mail -s "nethogs alert" [email protected]
fi
done
Можно строить свои дешевые системы мониторинга без Zabbix/Prometheus, если нужен только быстрый алертинг по процессам.
Выводы и рекомендации
nethogs — это must-have для всех, кто админит сервера, особенно если ты живёшь в мире облаков, VPS, Docker и микросервисов. Он экономит время, нервы и деньги, позволяет быстро находить виновников утечек трафика и подозрительных процессов. Не путай с iftop и vnstat — nethogs уникален тем, что показывает именно процессы, а не только IP и порты.
Когда использовать:
- Когда внезапно вырос расход трафика на сервере.
- Когда хочется быстро найти контейнер или сервис, который грузит сеть.
- Для оперативного реагирования на инциденты (DDoS, спам, вирусы).
- При настройке новых сервисов — чтобы убедиться, что всё работает как надо.
Где брать сервера для экспериментов?
Если нужен VPS для тестов — арендовать VPS.
Если хочется выделенный сервер для продакшена — арендовать выделенный сервер.
Официальные ресурсы:
- https://github.com/raboof/nethogs — репозиторий и исходники
- man-страница nethogs
Пробуй, экспериментируй, автоматизируй! Не давай своему серверу утонуть в неизвестном трафике.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.