Введение / Зачем это нужно
Команда netstat (network statistics) — это классическая утилита командной строки в Linux для диагностики и мониторинга сетевых подключений. Она показывает таблицы маршрутизации, статистику по интерфейсам, а самое главное — список всех активных сетевых соединений (входящих и исходящих) и портов, которые находятся в состоянии прослушивания (LISTEN).
Этот гайд поможет вам:
- Быстро определить, какие службы и приложения используют сетевые порты.
- Найти "зависшие" или неожиданные соединения.
- Диагностировать проблемы с доступностью сервиса (например, почему порт 80 не отвечает).
- Получить базовую информацию о трафике (кто с кем общается).
Несмотря на появление более современных аналогов (таких как ss), netstat остаётся незаменимым инструментом, который часто уже установлен в системе, и его синтаксис хорошо знаком многим администраторам.
Требования / Подготовка
- Доступ к терминалу Linux (Ubuntu, CentOS, Debian, RHEL, Fedora и др.).
- Права суперпользователя (root). Для отображения имён процессов (
PID/Program name) почти всегда требуется запуск сsudo. - Установленный пакет
net-tools. На современных минималистичных установках (особенно в контейнерах) его может не быть. Инструкция по установке есть в первом шаге. - Базовое понимание сетевых концепций: что такое порт, протокол TCP/UDP, состояние соединения (LISTEN, ESTABLISHED).
Пошаговая инструкция
Шаг 1: Установите netstat (если отсутствует)
Проверьте, есть ли команда: which netstat. Если ответ пустой, установите пакет net-tools.
Для Debian/Ubuntu и производных:
sudo apt update
sudo apt install net-tools
Для RHEL/CentOS 7:
sudo yum install net-tools
Для RHEL/CentOS 8+, Fedora, AlmaLinux, RockyLinux:
sudo dnf install net-tools
После установки команда netstat станет доступна.
Шаг 2: Просмотрите все активные соединения и слушающие порты
Запустите основную, самую информативную команду:
sudo netstat -tulpn
Что вы увидите и как читать вывод:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
tcp6 0 0 :::80 :::* LISTEN 5678/nginx: master
udp 0 0 127.0.0.1:323 0.0.0.0:* 901/chronyd
- Proto: Протокол (
tcp,udp,tcp6,udp6). - Local Address: Локальный адрес и порт.
0.0.0.0:22— сервис слушает на всех IPv4-интерфейсах порт 22.:::80— на всех IPv6-интерфейсах порт 80. - Foreign Address: Удалённый адрес и порт.
0.0.0.0:*или*:*означает, что соединение не с конкретным удалённым хостом (состояние LISTEN). - State: Состояние соединения. Для слушающих портов —
LISTEN. Для активных соединений —ESTABLISHED,TIME_WAITи др. - PID/Program name: Идентификатор процесса (PID) и имя программы, которая владеет сокетом. Ключевая колонка для диагностики.
Шаг 3: Отфильтруйте вывод по протоколу или порту
Полный вывод (-tulpn) может быть очень объёмным. Фильтрация с помощью grep сузит результаты.
Показать только TCP-соединения (игнорируя слушающие порты):
sudo netstat -tn
Показать только UDP-соединения:
sudo netstat -un
Найти все записи, связанные с портом 80 (HTTP) или 443 (HTTPS):
sudo netstat -tulpn | grep -E ':80|:443'
Найти процесс, слушающий конкретный порт (например, 3306 MySQL):
sudo netstat -tulpn | grep ':3306'
Вывод будет содержать одну строку с PID и именем программы (например, mysqld).
Найти все соединения с конкретным удалённым IP-адресом:
sudo netstat -tn | grep '192.168.1.100'
Шаг 4: Отслеживайте соединения в реальном времени
Чтобы наблюдать за динамикой подключений (например, кто подключается к вашему SSH-демону), используйте флаг --continuous (или -c).
sudo netstat -tulpn --continuous
Экран будет обновляться каждые несколько секунд. Для выхода нажмите Ctrl+C.
Шаг 5: Определите, какой процесс использует конкретный порт (практический пример)
Задача: Порт 8080 занят, но неизвестно каким приложением. Нужно найти и, возможно, остановить этот процесс.
- Найдите процесс:
sudo netstat -tulpn | grep ':8080'
Пример вывода:tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 4321/java - Проанализируйте: Процесс с PID
4321и именемjavaслушает порт 8080 на всех интерфейсах. - (Опционально) Получите больше информации о процессе:
ps aux | grep 4321 # или sudo lsof -i :8080 - Если это нежелательный процесс, его можно остановить:
sudo kill 4321(мягко) илиsudo kill -9 4321(принудительно).
Проверка результата
- Успешное выполнение: Команда
sudo netstat -tulpnвыводит таблицу с колонкамиProto,Local Address,State,PID/Program name. Вы видите список всех слушающих портов и активных соединений. - Практический результат: Вы можете по имени процесса (
PID/Program name) однозначно связать порт с конкретным сервисом (nginx, mysql, sshd, docker-proxy и т.д.). Вы можете отфильтровать вывод и найти информацию по нужному вам порту или IP. - Критерий завершения: Вы смогли ответить на вопрос "Какая программа использует порт X?" или "Какие соединения сейчас активны?" с помощью
netstat.
Возможные проблемы
| Проблема | Симптом | Решение |
|---|---|---|
Команда netstat не найдена | bash: netstat: command not found | Установите пакет net-tools (см. Шаг 1). |
В колонке PID/Program name прочерки (-) | Вывод - вместо PID/Program name | Запустите команду с sudo. Без привилегий root netstat не может определить владельца сокета. |
Адреса отображаются как имена (например, localhost:http) вместо чисел | В Local Address видите localhost:http вместо 127.0.0.1:80 | Это происходит из-за отсутствия флага -n. Используйте sudo netstat -tulpn (флаг -n уже есть в нашем шаблоне) или настройте /etc/hosts/DNS. |
| Не вижу IPv6-адреса | Нет записей с tcp6/udp6 | Либо на системе нет активных IPv6-соединений/слушающих портов, либо в системе отключён IPv6. Проверьте cat /proc/sys/net/ipv6/conf/all/disable_ipv6 (0 — включён). |
| Вывод обрезается (длинные имена путей) | Имя программы обрезано, например java вместо полного пути /usr/lib/jvm/... | Используйте флаг -W для широкого вывода: sudo netstat -tulpnW. Или используйте ss -p, который часто показывает полные пути. |
Много строк в состоянии TIME_WAIT | Вывод "забит" строками с TIME_WAIT | Это нормальное состояние TCP после закрытия соединения. Оно само исчезнет через некоторое время (2*MSL). Не является ошибкой, если их количество не растёт бесконечно. |
Заключение (не добавлять как отдельную секцию)
Вы освоили базовый, но мощный инструмент для анализа сетевой активности Linux. Навык быстрого определения "что слушает порт" и "кто с кем связался" критически важен для администрирования серверов, отладки приложений и обеспечения безопасности. Для более глубокого анализа и работы в высоконагруженных средах изучите современную альтернативу — команду ss (см. связанный гайд).