Linux

Netstat в Linux: как узнать открытые порты и соединения

Это руководство научит вас эффективно использовать утилиту netstat для анализа сетевых подключений в Linux. Вы узнаете, как найти открытые порты, определить процессы-владельцы, фильтровать вывод по протоколу и интерфейсу, а также как интерпретировать результаты для диагностики проблем с сетью.

Обновлено 17 февраля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04+CentOS 7+Debian 10+RHEL 8+Any Linux with net-tools package

Введение / Зачем это нужно

Команда netstat (network statistics) — это классическая утилита командной строки в Linux для диагностики и мониторинга сетевых подключений. Она показывает таблицы маршрутизации, статистику по интерфейсам, а самое главное — список всех активных сетевых соединений (входящих и исходящих) и портов, которые находятся в состоянии прослушивания (LISTEN).

Этот гайд поможет вам:

  • Быстро определить, какие службы и приложения используют сетевые порты.
  • Найти "зависшие" или неожиданные соединения.
  • Диагностировать проблемы с доступностью сервиса (например, почему порт 80 не отвечает).
  • Получить базовую информацию о трафике (кто с кем общается).

Несмотря на появление более современных аналогов (таких как ss), netstat остаётся незаменимым инструментом, который часто уже установлен в системе, и его синтаксис хорошо знаком многим администраторам.

Требования / Подготовка

  1. Доступ к терминалу Linux (Ubuntu, CentOS, Debian, RHEL, Fedora и др.).
  2. Права суперпользователя (root). Для отображения имён процессов (PID/Program name) почти всегда требуется запуск с sudo.
  3. Установленный пакет net-tools. На современных минималистичных установках (особенно в контейнерах) его может не быть. Инструкция по установке есть в первом шаге.
  4. Базовое понимание сетевых концепций: что такое порт, протокол 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 занят, но неизвестно каким приложением. Нужно найти и, возможно, остановить этот процесс.

  1. Найдите процесс:
    sudo netstat -tulpn | grep ':8080'
    

    Пример вывода: tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 4321/java
  2. Проанализируйте: Процесс с PID 4321 и именем java слушает порт 8080 на всех интерфейсах.
  3. (Опционально) Получите больше информации о процессе:
    ps aux | grep 4321
    # или
    sudo lsof -i :8080
    
  4. Если это нежелательный процесс, его можно остановить: 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 (см. связанный гайд).

Часто задаваемые вопросы

Чем netstat отличается от ss?
Как найти процесс, который занимает конкретный порт (например, 8080)?
Почему в выводе netstat нет информации о процессах (PID/Program name)?
Как сохранить вывод netstat в файл для дальнейшего анализа?

Полезное

Установите netstat (если отсутствует)
Просмотрите все активные соединения и слушающие порты
Отфильтруйте вывод по протоколу или порту
Отслеживайте соединения в реальном времени
Определите, какой процесс использует конкретный порт