- Sysadminium
- Об утилите
- Работа утилиты
- Примеры работы и дополнительные опции
- Активные подключения и прослушиваемые порты
- Только прослушиваемые порты
- Поиск определённых соединений
- Получение статистики
- Итог
- 14 примеров команды ss для мониторинга сетевых подключений
- 1. Перечисление всех соединений
- 2. Список слушающих и не слушающих портов
- 3. Список прослушивающих сокетов
- 4. Список всех TCP соединений
- 5. Список всех слушающих TCP соединения
- 6. Список всех UDP соединений
- 7. Список всех слушающих UDP соединений
- 8. Отображение у сокетов PID (идентификаторов процессов)
- 9. Показать сводную статистику
- 10. Показать сокеты IPv4 и IPv6
- 11. Фильтр соединений по номеру порта
- 12. Вывод номеров портов в числовом формате, а не имени в ss
- 13. Поиск открытых портов на Linux
- 14. Поиск программ, которые прослушивают порты на Linux
- Статьи о программе ss
Sysadminium
В статье разбирается утилита ss, которая предназначена для получения информации о сетевых подключениях к серверу или от него.
Об утилите
Эта утилита используется для вывода информации о сетевых подключениях. Она может отображать информацию, аналогичную netstat, которую мы рассмотрели в прошлой статье. Но утилита ss может показать больше информации чем другие инструменты.
Ещё одним преимуществом этой утилиты, является то, что она уже предустановлена и в Debian и в Ubuntu. И вам не нужно ставить пакет с устаревшими инструментами (это я про net-tools).
Получить справку об этой утилите можно здесь, или выполнив команду man ss.
Работа утилиты
Если мы выполним ss без дополнительных опций, то увидим только активные соединения (TCP и сокеты).
$ ss Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process u_dgr ESTAB 0 0 /run/systemd/notify 18859 * 0 u_dgr ESTAB 0 0 /run/systemd/journal/dev-log 18885 * 0 u_str ESTAB 0 0 * 18325 * 19647 u_str ESTAB 0 0 /run/systemd/journal/stdout 18038 * 18033 u_dgr ESTAB 0 0 * 20631 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19650 * 18344 u_str ESTAB 0 0 /run/dbus/system_bus_socket 20934 * 21645 icmp6 UNCONN 0 0 *%ens18:ipv6-icmp *:* tcp ESTAB 0 52 192.168.0.34:ssh 192.168.0.14:62063
В выводе мы видим следующие поля:
- Netid — тип подключения:
- u_dgr — тип сокета, который работает без установки соединения;
- u_str — тип сокета, который работает с предварительной установкой соединения;
- tcp — tcp соединение;
- udp — udp соединение.
- UNCONN — это состояние обычно устанавливается для UDP соединений, так как UDP работает без установки соединения;
- LISTEN — ожидает запрос на подключение (слушает);
- ESTAB — соединение установлено;
- Остальные состояния сеанса TCP я описывал здесь.
Примеры работы и дополнительные опции
Активные подключения и прослушиваемые порты
Здесь нужно использовать все те же опции что и для утилиты netstat. Так опция -a помимо активных соединений покажет прослушиваемые порты. А с помощью опций -t, -u, -x вы можете ограничить вывод по tcp, udp или сокетами.
Дополнительно с опцией -o вы можете посмотреть время работы соединения (timer). А с опцией -p вы увидите имя процесса, но в этом случае нужно использовать sudo. И в качестве ещё одной дополнительной опции вы можете использовать -n, чтобы не переводить номера портов в имена протоколов. При этом, по умолчанию, утилита ss не пытается переводить ip-адреса в доменные имена, как это делала утилита netstat.
Вот пример получения всех соединений и прослушиваемых портов (-a), но только для TCP соединений (-t). И дополнительно я смотрю время соединения (-o) и информацию о процессе (-p):
$ sudo ss -atop State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 511 0.0.0.0:http 0.0.0.0:* users:(("nginx",pid=536,fd=6),("nginx",pid=535,fd=6),("nginx",pid=534,fd=6)) LISTEN 0 4096 127.0.0.53%lo:domain 0.0.0.0:* users:(("systemd-resolve",pid=445,fd=14)) LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* users:(("sshd",pid=608,fd=3)) ESTAB 0 52 192.168.0.34:ssh 192.168.0.14:62063 users:(("sshd",pid=771,fd=4),("sshd",pid=672,fd=4)) timer:(on,224ms,0) LISTEN 0 511 [::]:http [::]:* users:(("nginx",pid=536,fd=7),("nginx",pid=535,fd=7),("nginx",pid=534,fd=7)) LISTEN 0 128 [::]:ssh [::]:* users:(("sshd",pid=608,fd=4))
При этом время работы процесса пишется только для ESTABLISHED соединений в информации о процессе, в поле timer.
Как видите мы получаем больше информации чем выдавала утилита netstat.
Только прослушиваемые порты
И в этом случае используем опции, как для утилиты netstat. Опция -l покажет нам только прослушиваемые порты, а опциями -t, -u, -x мы можем ограничить вывод.
Например, следующая команда, выведет прослушиваемые tcp и udp порты (-ltu), и информацию по процессу (-p).
$ sudo ss -ltup Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process udp UNCONN 0 0 127.0.0.53%lo:domain 0.0.0.0:* users:(("systemd-resolve",pid=445,fd=13)) udp UNCONN 0 0 192.168.0.34%ens18:bootpc 0.0.0.0:* users:(("systemd-network",pid=424,fd=15)) tcp LISTEN 0 511 0.0.0.0:http 0.0.0.0:* users:(("nginx",pid=536,fd=6),("nginx",pid=535,fd=6),("nginx",pid=534,fd=6)) tcp LISTEN 0 4096 127.0.0.53%lo:domain 0.0.0.0:* users:(("systemd-resolve",pid=445,fd=14)) tcp LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* users:(("sshd",pid=608,fd=3)) tcp LISTEN 0 511 [::]:http [::]:* users:(("nginx",pid=536,fd=7),("nginx",pid=535,fd=7),("nginx",pid=534,fd=7)) tcp LISTEN 0 128 [::]:ssh [::]:* users:(("sshd",pid=608,fd=4))
Поиск определённых соединений
Так же мы можем искать более конкретные вещи. Например, найдём кто слушает 22 порт на нашем сервере:
$ sudo ss -ltpn | grep 22 LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=608,fd=3)) LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=608,fd=4))
Можем искать соединения по статусу соединения или порту отправителя и порту получателя. Например, здесь, мы ищем все established соединения для локального порта ssh и удалённого порта ssh:
$ ss state established '( dport = :ssh or sport = :ssh )' Netid Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp 0 52 192.168.0.34:ssh 192.168.0.14:62063
Можем найти все подключения с определённого ip адреса:
$ ss dst 192.168.0.14 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp ESTAB 0 52 192.168.0.34:ssh 192.168.0.14:62063
Найдем все подключения к нашему веб-серверу по порту 80:
$ ss src :80 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp ESTAB 0 0 192.168.0.34:http 192.168.0.14:57171 tcp ESTAB 0 0 192.168.0.34:http 192.168.0.14:57172
Получение статистики
Для получения статистики используется опция -s, например:
$ ss -s Total: 162 TCP: 6 (estab 1, closed 0, orphaned 0, timewait 0) Transport Total IP IPv6 RAW 1 0 1 UDP 2 2 0 TCP 6 4 2 INET 9 6 3 FRAG 0 0 0
Здесь видно, что всего 162 соединения. Из них 6 tcp соединений.
Итог
Мы познакомились с утилитой ss, которая сейчас заменяет утилиту netstat. Она позволяет смотреть информацию о сетевых подключениях к серверу или от него.
Рассмотрели следующие опции:
- -a — посмотреть все соединения;
- -l — посмотреть только прослушиваемые порты;
- -t — только tcp;
- -u — только udp;
- -x — только unix socket;
- -o — добавить к выводу информацию о таймерах соединения;
- -p — добавить к выводу информацию о процессе;
- -n — не переводить номера процессов в имена протоколов;
- state established — показать соединения только для определённого состояния;
- src 192.168.0.14 — показать соединения только на определённый ip-адрес сервера;
- dst 192.168.0.14 — показать соединения только с определённым ip-адресом второй стороны;
- src :22 — соединения только с локальным 22 портом, можете выбрать любой другой порт;
- ‘( dport = :ssh or sport = :ssh )’ — совмещение разных опций.
14 примеров команды ss для мониторинга сетевых подключений
Команда ss — это инструмент, который используется для отображения информации о сетевых сокетах в системе Linux. Инструмент отображает более подробную информацию, чем команда netstat, которая используется для отображения активных соединений сокетов.
В этом руководстве мы подробно рассмотрим, как можно использовать команду ss для отображения различной информации о сетевых подключения (сокетах) в Linux.
1. Перечисление всех соединений
Базовая команда ss без каких-либо опций просто выводит список всех соединений независимо от состояния, в котором они находятся.
Если ни одна из опций не используется, ss отображает список открытых не слушающих сокетов (например, TCP/UNIX/UDP), которые установили соединение.
2. Список слушающих и не слушающих портов
Вы можете получить список как слушающих, так и не слушающих портов, используя опцию -a, как показано ниже.
3. Список прослушивающих сокетов
Чтобы отобразить только сокеты прослушивания, используйте флаг -l:
4. Список всех TCP соединений
Чтобы отобразить все соединения TCP, используйте параметр -t:
5. Список всех слушающих TCP соединения
Для просмотра всех слушающих TCP-сокетов используйте комбинацию -lt:
6. Список всех UDP соединений
Для просмотра всех сокетов с UDP соединениями используйте параметр -ua:
7. Список всех слушающих UDP соединений
Для просмотра списка подключений UDP используйте параметр -lu.
8. Отображение у сокетов PID (идентификаторов процессов)
Для отображения идентификаторов процессов, связанных с соединениями сокетов, используйте флаг -p:
9. Показать сводную статистику
Чтобы вывести сводную статистику, используйте опцию -s.
10. Показать сокеты IPv4 и IPv6
Если вам интересны соединения через сокет IPv4, используйте опцию -4.
Чтобы отобразить соединения IPv6, используйте параметр -6.
11. Фильтр соединений по номеру порта
Команда ss также позволяет фильтровать номер порта сокета или номер адреса. Например, для отображения всех соединений сокетов с портом назначения или исходным портом ssh выполните команду.
ss -at '( dport = :22 or sport = :22 )'
ss -at '( dport = :ssh or sport = :ssh )'
12. Вывод номеров портов в числовом формате, а не имени в ss
По умолчанию команда ss показывает имена портов, чтобы выводились порты в виде чисел, используйте опцию -n:
13. Поиск открытых портов на Linux
Следующая команда покажет все прослушиваемые порты для TCP и UDP соединений в виде цифровых значений:
14. Поиск программ, которые прослушивают порты на Linux
Если добавить ключ -p, то программа дополнительно покажет процессы, использующие сокет:
Статьи о программе ss