ss: просмотр и фильтрация сетевых сокетов в Linux

Что такое ss
ss (socket statistics) — это утилита в составе пакета iproute2 для просмотра информации о сетевых соединениях и сокетах в Linux. Она заменяет устаревший netstat и обычно работает быстрее и даёт более подробные данные. Одной строкой: ss показывает, какие сокеты открыты, какие процессы их держат и в каком они состоянии.
Краткое определение: ss — инструмент для диагностики сетевых соединений и поиска проблем с сокетами.
Важно: ss чаще предустановлен в современных дистрибутивах; если его нет, установите пакет iproute2 через менеджер пакетов вашего дистрибутива.
Быстрая памятка по часто используемым флагам
- -a — все сокеты (listening и non-listening)
- -l — только прослушивающие сокеты (listening)
- -t — TCP
- -u — UDP
- -x — Unix-сокеты
- -4 / -6 — IPv4 / IPv6
- -p — показать PID и имя процесса
- -n — не резолвить имена хостов/портов (numeric)
- -e — расширенная информация
- -o — отобразить таймеры
- -m — показать используемую память на сокет
- -w / –raw — raw-сокеты
Эта памятка пригодится при оперативной диагностике.
Базовый синтаксис
ss [опции]Без опций ss по умолчанию покажет список установленных соединений. Пример самой простой команды:
ssВывод (пример):

Колонки в выводе:
- Netid — тип сокета (TCP, UDP, u_seq, u_str и т.д.)
- State — состояние соединения (ESTAB, UNCONN, LISTEN и др.)
- Recv-Q / Send-Q — очереди приема/отправки
- Local address:port / Peer address:port — локальный и удалённый адрес с портом
Полный список сокетов
Показать все сокеты, включая прослушивающие и непрослушивающие:
ss -a
Только прослушивающие сокеты
ss -l
Примечание: каждый прослушивающий сокет остаётся в состоянии UNCONN, пока не появится входящее соединение; при подключении создаётся дочерний сокет для обслуживания сессии.
Фильтрация по типу сокета: TCP, UDP, Unix
TCP:
ss -t
UDP:
ss -u
Unix-сокеты:
ss -x
Чтобы показать все типы одновременно вместе с состояниями, комбинируйте флаги, например:
ss -ta
ss -ua
ss -xaФильтрация TCP по состоянию
TCP-соединения имеют состояния (например, established, listening, time-wait). Формат фильтрации:
ss -t state establishedПримеры состояний: established, syn-recv, time-wait, closed, listening и др. Используйте их для быстрого поиска проблемных состояний.

IPv4 и IPv6
Отдельно вывести IPv4 или IPv6:
ss -4
ss -6
Также можно комбинировать с фильтрами состояния:
ss -4 state established
ss -6 state establishedФильтрация по порту
ss поддерживает выражения для портов: dport — destination port, sport — source port. Пример: отобрать соединения по портам назначения/исхода:
ss -ta '( dport = :https or sport = :39700)'
Соединение фильтра по состоянию и по порту:
ss -ta state established '( dport = :https or sport = :https )'Подсказка: используйте -n, чтобы увидеть числовые порты, а не имена служб: ss -tan
Сырые (raw) сокеты
Показать raw-сокеты:
ss -w
ss --raw
Фильтрация по адресу назначения
Показать соединения, направленные на конкретный IP:
ss dst 192.0.2.10
Показать PID и имя процесса
Чтобы быстро найти, какой процесс держит сокет:
ss -t -p
После этого можно получить детальную информацию о процессе через ps или systemctl (если это системный сервис).
Пример: показать процесс и его командную строку
ps -p -o pid,cmd Сводная статистика сети
Для быстрой оценки общего состояния:
ss -s
Вывод показывает общее число соединений по протоколам и состояниям.
Сохранение вывода в файл
ss > output.txt
Это удобно для постаналитики или передачи вывода в тикет инцидента.
Использование ss вместе с grep / awk / sed
Если вы не помните точный синтаксис выражений ss, проще отфильтровать вывод утилитой grep:
ss -t | grep ESTAB
Полезные комбинации:
ss -tanp | grep ':443 ' # все TCP-соединения к порту 443
ss -uap | awk '/127.0.0.1/ {print $0}' # UDP-сокеты на localhostПолезные расширенные флаги и примеры
- Показать расширенную информацию и таймеры:
ss -tpeo- Показать использование памяти сокетов:
ss -m- Быстрый аналог netstat -tulpn (прослушивающие TCP/UDP с pid и без резолов):
ss -tulpenВажно: опция -p требует прав root для отображения PID/имен всех процессов.
Ментальные модели и эвристики
- «Найти слушающий сокет» — сначала ss -lpn: показывает сервисы, ожидающие соединений.
- «Найти источник трафика» — ss -ta | grep
затем ps -p . - «Проверка перегрузки очередей» — смотреть Recv-Q и Send-Q: ненулевые значения указывают на задержки/узкие места.
- «Проверка таймаутов» — ss -o показывает таймеры TCP (retransmits, keepalive).
Эти простые эвристики ускоряют расследование.
Когда ss может не помочь
- Если проблема в сетевых устройствах вне ОС (коммутаторы, ISP), ss даст данные только по стороне хоста.
- Для сниффинга трафика и анализа пакетов нужен tcpdump или wireshark, ss не показывает сами пакеты.
- ss отображает состояние в момент запроса; для корреляции событий используйте запись вывода в файл через cron или systemd timer.
SOP: быстрый план расследования сетевого инцидента (шаги)
- Снять общую статистику: ss -s
- Найти прослушивающие сервисы: ss -lpn
- По симптомам — фильтровать по порту/адресу: ss -tanp | grep ‘:PORT’
- Посмотреть PID процесса: ss -p
- Просмотреть журнал сервиса: journalctl -u
- При необходимости — захват пакетов: tcpdump -i
port - Сохранить выводы в файл и добавить в запись инцидента
Критерии приёмки расследования: найдено соответствие между подозрительным соединением, PID и логами приложения; при повторяемой проблеме — воспроизводимость и шаги для mitigation.
Чек-листы по ролям
Sysadmin
- ss -lpn — найти слушающие сервисы
- ss -tanp — активные соединения
- ss -s — обзор
- Проверить журналы и процесс
Разработчик
- ss -p | grep
— проверить, есть ли соединения от/к приложению - ps + lsof для сопоставления дескрипторов
Инженер по безопасности
- ss -tulpen — найти неожиданные прослушивания
- ss -4 | ss -6 — проверить оба стека
- Сопоставить с политиками firewall (iptables/nft)
Безопасность и рекомендации по укреплению
- Закрывайте ненужные прослушивающие сокеты. Используйте ss -lpn, чтобы найти процессы.
- Не давайте привилегию root приложениям без необходимости — ss покажет владельца процесса.
- Используйте брандмауэр для ограничения доступа по IP/портам, а ss — для верификации применённых правил.
Совместимость и переход с netstat
ss входит в пакет iproute2 и присутствует в большинстве современных дистрибутивов Linux. Команды netstat можно соотнести с ss (например, netstat -tulpn ≈ ss -tulpen). Рекомендация: привыкать к ss — он быстрее и расширяем.
Примеры приёма для тестирования (тест-кейсы)
- Ожидается, что служба слушает порт 80: ss -ltn | grep ‘:80’ -> должен быть ответ
- После подключения TCP на порт 22 состояние должно быть ESTAB: ss -tan | grep :22
- При запуске сервиса с правами non-root ss -lpn не должен показывать root-процесс для этого порта (если это политика)
Мелкая галерея пограничных случаев
- Прослушивающие сокеты без PID (показывает ‘-‘) — обычно потому, что процесс завершился до запроса или нет прав root.
- Большие значения Recv-Q — возможный сетевой/программный буферный застой.
Простой шаблон отчёта для инцидента
- Время обнаружения
- Команда ss и её вывод (файл)
- PID и процесс
- Действия предпринятые и результат
- Рекомендации
Краткий глоссарий
- Сокет — конечная точка сетевого соединения.
- LISTEN — сокет ожидает входящие соединения.
- ESTAB — соединение установлено.
- Recv-Q / Send-Q — очереди приёма и отправки.
Итог
ss — это основной инструмент для диагностики сетевых проблем в Linux. Он быстрее и информативнее, чем старый netstat. Комбинация флагов и фильтров позволяет быстро локализовать проблемный порт, процесс или состояние соединения. Включите использование ss в повседневный набор инструментов оператора и автоматизируйте сбор выводов для последующего анализа.
Важно: всегда сохраняйте выводы и сопоставляйте их с журналами приложения и сетевыми захватами для полной картины.
Если нужно, добавлю готовые команды для ваших конкретных сервисов или подготовлю systemd-timer, который будет периодически сохранять вывод ss в файл для мониторинга.
Похожие материалы
Сводные таблицы в Python — руководство
Как изучить Microsoft 365: курсы и видео
Объединение Excel-файлов с Python
Бесплатный LinkedIn Learning через библиотеку
Заполнение пропущенных значений в pandas