Забудьте о netstat

Введение

Грамотная диагностика сетевого стека — базовый навык любого системного администратора и DevOps-инженера. Классический инструмент netstat уже давно признан устаревшим, а на смену ему пришла современная, высокопроизводительная утилита ss (Socket Statistics). В данном практическом руководстве мы подробно разберем, как с помощью ss мгновенно выявлять открытые порты, отслеживать активные соединения и сопоставлять сокеты с конкретными процессами в операционной системе Ubuntu.

1. Подготовка окружения и оценка глобальной статистики сокетов

Инструмент ss входит в состав стандартного набора сетевых утилит iproute2. Убедимся, что пакет установлен в системе и обновлен до актуальной версии:

Обновление репозиториев и установка пакета iproute2

В отличие от устаревших инструментов, считывающих данные через интерфейс /proc, утилита ss взаимодействует напрямую с пространством ядра Linux через интерфейс Netlink. Это обеспечивает колоссальный прирост скорости при обработке сотен тысяч открытых дескрипторов. Для быстрого аудита всей сетевой подсистемы применяется ключ -s, формирующий сводный отчет по всем типам соединений.

⚙️ [Ключевые аргументы командной строки]

-s : выводит агрегированную сводку по сокетам (TCP, UDP, RAW и др.).
-t : ограничивает выборку только протоколом TCP.
-u : выводит исключительно сокеты протокола UDP.
-l : отображает порты, ожидающие входящих подключений (режим LISTEN).
-a : формирует полный перечень сокетов (как активных, так и прослушиваемых).
-n : отключает резолвинг сетевых имен, выводя адреса и порты в числовом формате.
-p : идентифицирует владельца сокета (имя приложения и PID процесса).

Вывод общей статистики сокетов командой ss -s

2. Развертывание тестового сервиса и мониторинг прослушиваемых портов TCP

Для наглядной демонстрации работы сетевых фильтров установим веб-сервер Nginx и активируем его службу в фоновом режиме:

Инсталляция и запуск службы Nginx

Запустив команду ss -tl, мы получим список всех конечных точек TCP, находящихся в режиме ожидания запросов (LISTEN). По умолчанию утилита преобразует стандартные номера портов в понятные имена служб (например, http, ssh, domain).
В сформированном списке отчетливо виден наш свежеустановленный сервер Nginx, занявший стандартный веб-порт (http).

Просмотр прослушиваемых TCP-портов командой ss -tl

Если требуется исключить трансляцию номеров в названия протоколов, добавьте флаг -n. Команда ss -tln выведет адреса и порты в строгом числовом виде.
Такой подход незаменим при автоматизации и парсинге скриптами: вместо абстрактных названий http или ssh вы получите точные значения 80 и 22.

Отображение портов в числовом формате через ss -tln

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

Чтобы выяснить, какая конкретно программа захватила порт, вызовите утилиту с флагом -p. Команда ss -tlp связывает каждый прослушиваемый сокет с управляющим им приложением.
В столбце Process отображается связка из наименования бинарного файла, его PID и дескриптора сокета. Здесь прекрасно видно взаимодействие демонов Nginx и системных служб systemd с портами ОС.

Определение процессов, открывших сокеты, с помощью ss -tlp

Наиболее востребованная на практике комбинация флагов — ss -tulpn. Она собирает единый структурированный срез по обоим протоколам (TCP и UDP), фильтрует слушающие сокеты, форматирует порты в числа и подтягивает идентификаторы процессов.
Благодаря этой связке вы за секунду определите, что веб-сервер Nginx висит на 80-м порту, SSH-сервер обслуживает 22-й, а встроенный резолвер systemd-resolved занял порт 53.

Комплексный анализ прослушиваемых портов командой ss -tulpn

4. Отслеживание активных соединений и точечная фильтрация трафика

Сгенерируем реальное обращение к веб-интерфейсу, чтобы зафиксировать изменение жизненного цикла сетевой сессии. Установим клиент curl и сделаем локальный запрос к нашему хосту:

Отправка тестового HTTP-запроса через curl

Флаг -a в связке ss -ta снимает ограничения по статусам и показывает абсолютно все TCP-сокеты — включая те, что перешли в фазу закрытия соединения (TIME-WAIT).
В итоговом выводе сразу фиксируется служебная сессия 127.0.0.1:http, перешедшая в состояние TIME-WAIT сразу после завершения передачи страницы клиенту.

Отображение всех сокетов TCP в выводе ss -ta

Для мониторинга стабильно работающих клиентских каналов связи удобно применять встроенные фильтры состояний. Команда ss -t state established отбирает исключительно установленные соединения (ESTABLISHED), через которые прямо сейчас передаются данные.
Поскольку наш проверочный HTTP-запрос отработал мгновенно и сеанс разорвался, в текущей таблице активных соединений не зафиксировано.

Фильтрация активных сессий командой ss -t state established

Мощным преимуществом ss является поддержка сложных критериев отбора прямо в строке вызова. Синтаксис ss -tln 'sport = :80' позволяет изолировать порт источника (sport), оставив на экране лишь сокеты, привязанные к локальному 80-му порту.
Подобная прецизионная фильтрация избавляет от необходимости вручную вырезать строки через grep и позволяет моментально оценить состояние конкретного веб-приложения.

Точечная выборка 80-го порта через фильтр ss -tln sport = :80

Мы подробно рассмотрели переход от архаичного netstat к современному стандарту ss для комплексной диагностики сетевого стека в Linux.
Внедрение связок вроде ss -tulpn и фильтров по портам существенно ускорит траблшутинг серверных инцидентов и повысит эффективность администрирования вашей инфраструктуры.