Просмотр активных сетевых соединений linux

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

    Источник

    Читайте также:  Linux online with root
Оцените статью
Adblock
detector