С чего начать Первые шаги трек · 15 ступеней
Linux Labs

ss — сокеты и порты

4 мин Ubuntu 24.04 · iproute2

Показывает, кто слушает порты и какие соединения открыты; замена netstat, заметно быстрее на большом числе соединений.

Шпаргалка

6 команд Версия для печати
  • ss -tlnp слушающие порты + кто
  • ss -tnp активные соединения
  • ss -tulnp TCP+UDP слушающие
  • ss -tlnp 'sport = :80' кто на 80
  • ss -tan state close-wait утечка сокетов?
  • ss -s статистика

Обзор

ss (socket statistics) показывает сокеты: какие порты слушаются, какие соединения установлены, и какой процесс за ними стоит. Замена netstat (пакет net-tools), заметно быстрее на большом числе соединений.

Самая частая команда админа — «кто что слушает»:

bash
ss -tlnp        # TCP · Listening · Numeric · Process

Ключи

11

Мнемоника частого набора -tlnp: tcp listening numeric process. -n важен на медленных сетях: без него ss пытается резолвить каждый адрес в имя, и вывод заметно тормозит. -p требует root, чтобы показать процессы других пользователей — без sudo увидишь только свои.

Ключ Что делает Пример
-t Показать TCP-сокеты. ss -t
-u Показать UDP-сокеты. ss -u
-l Только слушающие сокеты, без установленных соединений. ss -tl
-n Не резолвить порты и адреса в имена — быстрее и без обращений к DNS. ss -tln
-p Показать процесс, которому принадлежит сокет; для чужих процессов нужен root. sudo ss -tlnp
-a Все сокеты — слушающие и установленные вместе. ss -ta
-s Сводная статистика по числу сокетов и их типам. ss -s
-4 Только IPv4. ss -4tln
-6 Только IPv6. ss -6tln
-o Показать таймеры соединения (keepalive, retransmit). ss -tno
-x Показать unix-сокеты вместо сетевых. ss -x

Ничего не найдено. Попробуй запрос короче.

Рецепты

2

Команды

bash
ss -tlnp                          # слушающие TCP-порты + процессы
ss -ulnp                          # слушающие UDP-порты
ss -tnp                           # установленные TCP-соединения
ss -tanp                          # все TCP: и слушающие, и установленные
ss -s                             # сводка: сколько всего сокетов по типам
ss -tnp state established         # только установленные
ss -tnp state time-wait          # «зависшие» в TIME-WAIT
ss -tlnp '( sport = :80 or sport = :443 )'   # кто слушает 80/443
ss -tnp dst 10.0.0.5             # соединения к конкретному хосту
ss -tnp 'dport = :5432'          # соединения к порту postgres
ss -tnp dst 10.0.0.0/24          # к целой подсети
ss -tonp                          # с таймерами keepalive/retransmit
ss -tnp | wc -l                   # сколько активных TCP-соединений (грубо)

Состояния и фильтры

Фильтр по состоянию TCP — state <имя> (или state connected/listening):

bash
ss -tan state established         # рабочие соединения
ss -tan state syn-sent            # клиент ждёт ответа (висит коннект?)
ss -tan state close-wait          # приложение не закрывает сокеты (утечка fd!)
ss -tan state time-wait | wc -l   # много TIME-WAIT — частые короткие коннекты

Адресные фильтры комбинируются (and/or): src/dst (адрес), sport/dport (порт).

bash
ss -tnp 'dst 10.0.0.5 and dport = :443'
ss -tnp 'sport >= :1024'         # эфемерные исходящие порты

Неполадки

5

«Address already in use» при старте службы

Порт уже занят. Найди кем и останови/смени порт:

bash
ss -tlnp 'sport = :8000'         # users:(("python",pid=1234,fd=3))

Служба запущена, но снаружи недоступна

  1. Слушает ли вообще: ss -tlnp | grep :PORT.
  2. На 127.0.0.1 вместо 0.0.0.0/*? Тогда только локально — поправь bind в конфиге.
  3. Порт открыт в файрволе? (nft list ruleset / ufw status — см. firewall).

Растёт число сокетов в CLOSE-WAIT

Приложение не закрывает соединения (утечка дескрипторов) — рано или поздно упрётся в ulimit. ss -tanp state close-wait покажет виновный процесс.

Много TIME-WAIT

Норма при большом числе коротких клиентских соединений; обычно не проблема. Лечится keep-alive/пулом соединений на стороне приложения, не тюнингом ядра наобум.

Непонятно, что за процесс держит соединение

ss -tnp покажет users:(("nginx",pid=1234,...)). Глубже — lsof.

Термины

8
сокет socket
Объект взаимодействия программы с сетевым стеком или другим механизмом обмена. Ещё встречается в: Unix-сокеты, nginx, systemd, curl и ещё 16
сетевой порт network port
Числовой идентификатор транспортного получателя внутри узла; TCP и UDP имеют отдельные пространства портов.
TCP
Транспортный протокол с установлением соединения и упорядоченным потоком байтов. Ещё встречается в: nmap: какие порты видны снаружи, Файрвол, Классический файрвол iptables, nc и ещё 13
UDP
Транспортный протокол передачи датаграмм без TCP-подобного установления соединения. Ещё встречается в: chrony: синхронизация времени по NTP, nc, nmap: какие порты видны снаружи, BIND9 и ещё 5
слушающий сокет listening socket
Сокет сервера, ожидающий новых подключений; отличается от сокетов принятых соединений. Ещё встречается в: sysctl, Unix-сокеты
адрес привязки bind address
Локальный адрес, с которым приложение связывает сокет и тем самым ограничивает область прослушивания.
характеристика соединения connection tuple
Набор исходного и целевого адресов, портов и транспортного протокола.
поверхность атаки attack surface
Всё, до чего можно достучаться снаружи: сокеты, слушающие внешние адреса, и порты, которые пропускает файрвол, — а за ними службы и учётные записи. Аудит начинают с sudo ss -tlnp: какие сокеты слушают и чьи они. Ещё встречается в: nmap: какие порты видны снаружи

См. также

  • ip — Управление интерфейсами, адресами и маршрутами (iproute2) — замена ifconfig/route.
  • firewall — Фильтрация трафика — простой ufw и низкоуровневый nftables.
  • nginx — Веб-сервер и обратный прокси. Конфиг проверяется nginx -t; reload без даунтайма.
Загрузка…