Home » Изучение netstat и ss: просмотр сокетов сети в Linux
Изучение netstat и ss: просмотр сокетов сети в Linux

Изучение netstat и ss: просмотр сокетов сети в Linux

О чём этот пост и зачем вообще возиться с netstat и ss

Если ты хоть раз управлял сервером (даже домашним на Raspberry Pi), то точно сталкивался с вопросами: “А что у меня слушает порт 80?”, “Почему мой сервис не стартует — порт занят?”, “Кто вообще лезет на мой сервер через SSH?” и т.д. Вот тут на сцену выходят две старые добрые утилиты — netstat и ss.

Эта статья — не сухая справка и не очередной мануал “жми сюда — получишь результат”. Я расскажу, как реально использовать netstat и ss для диагностики, настройки, поиска проблем и даже автоматизации задач. Будет немного гиковщины, лайфхаки, реальные кейсы и сравнение — чтобы ты мог выбрать лучшее решение для своих задач.

Почему важно понимать, что происходит в сетевых сокетах

Сетевые сокеты — это как двери в твой сервер. Через них заходят пользователи, админы, боты, иногда злоумышленники. Если не следить за этим, можно легко получить:

  • Занятый порт и неработающий сервис.
  • Открытый наружу тестовый сервис, который забыл закрыть.
  • Огромное количество неизвестных соединений (например, DDoS или вирус).
  • Проблемы с производительностью из-за утечек соединений.

Всё это — реальные истории из жизни любого системного администратора, девопса или просто любителя серверов. А netstat и ss — это твои глаза и уши в мире сетевых соединений.

Как работают netstat и ss: кратко о структуре и алгоритмах

netstat — старая, но проверенная временем утилита. Она читает содержимое специальных файлов ядра (например, /proc/net/tcp), парсит их и показывает тебе в удобном виде: какие сокеты открыты, кто с кем соединён, какие порты слушают процессы.

ss (socket statistics) — современный аналог netstat, который работает быстрее, эффективнее, поддерживает больше опций и лучше подходит для автоматизации. Он напрямую обращается к netlink-сокетам ядра, что позволяет получать информацию быстрее и без лишних накладных расходов.

Краткое сравнение:
netstat — работает везде, привычен, но устарел и может быть не установлен по умолчанию на новых дистрибутивах.
ss — быстрее, мощнее, развивается, есть практически везде, кроме совсем древних систем.

Что такое сокет и почему это важно?

Сокет — это абстракция для обмена данными между процессами через сеть или внутри системы. Каждый сокет ассоциирован с IP-адресом, портом и протоколом (TCP/UDP). С помощью netstat/ss ты видишь, какие программы используют какие сокеты, и можешь быстро понять, что происходит в системе.

Быстрый старт: как посмотреть сокеты и кто их держит

Окей, ближе к практике. Вот базовые команды, которые должен знать каждый:


# Посмотреть все открытые TCP-соединения
netstat -tn

# Посмотреть все слушающие порты и процессы
netstat -tulnp

# То же самое с помощью ss (рекомендуется!)
ss -tulnp

# Сокеты, которые слушают только локалхост
ss -tlpn | grep 127.0.0.1

# Все UDP-соединения
ss -unap

# Найти, кто слушает порт 80
ss -ltnp | grep ':80'

Пояснения к ключам:

  • -t — TCP
  • -u — UDP
  • -l — только слушающие (listening) сокеты
  • -n — не разрешать имена хостов (быстрее и нагляднее)
  • -p — показывать PID и имя процесса
  • -a — все сокеты (включая не слушающие)

Практические советы и схемы

1. Поиск “кто занял порт”:

ss -ltnp | grep ':443'

Получишь строку вроде:

LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=1234,fd=6))

Значит, порт 443 слушает nginx, PID 1234.

2. Быстрая проверка на открытые порты наружу:

ss -tuln | grep -v '127.0.0.1\|::1'

Видишь, что слушает на всех интерфейсах — срочно проверь, не открыл ли ты что-то лишнее!

3. Найти все соединения от подозрительного IP:

ss -tnp | grep '192.168.1.100'

Кейсы: как netstat и ss реально помогают

Кейс Что делать Рекомендации
Сервис не стартует, пишет “Address already in use” Проверить, кто занял порт:
ss -ltnp | grep ':порт'
Завершить процесс, изменить порт, перезапустить сервис
Непонятные соединения из-за границы Посмотреть все установленные соединения:
ss -tnp | grep 'ESTAB'
Заблокировать IP через firewall, проанализировать логи
Падает производительность, много TIME_WAIT Посчитать количество TIME_WAIT:
ss -tan | grep TIME_WAIT | wc -l
Настроить параметры ядра:
net.ipv4.tcp_tw_reuse=1

Ошибки новичков и мифы

  • Миф: netstat и ss — это одно и то же.
    Факт: ss быстрее, поддерживает больше опций, netstat устарел, но иногда привычнее.
  • Ошибка: Смотреть только на netstat без -p — не увидишь, какой процесс держит порт.
  • Ошибка: Не использовать -n — вывод будет тормозить, если много соединений.
  • Миф: netstat показывает только TCP/UDP.
    Факт: Можно смотреть и UNIX-сокеты (ss -x), и RAW, и даже DCCP.

Похожие решения и альтернативные утилиты

  • lsof -i — показывает файлы и сокеты, удобно для поиска процессов по порту.
  • fuser — быстро узнать PID по порту: fuser -n tcp 80
  • nmap — сканирует открытые порты (но не процессы!), полезно для внешней проверки.
  • ip a / ip route — для сетевых интерфейсов и маршрутов, но не для сокетов.

Статистика и сравнение: netstat vs ss

Критерий netstat ss
Скорость работы Медленнее Быстрее (особенно на больших серверах)
Установлен по умолчанию На старых системах На новых системах (RHEL 7+, Ubuntu 18.04+)
Функционал Ограничен Шире (есть фильтры, статистика, быстрый вывод)
Автоматизация Сложнее парсить Удобно для скриптов

Интересные факты и нестандартные способы использования

  • С помощью ss -o state established '( dport = :22 or sport = :22 )' можно быстро узнать, кто сейчас подключён по SSH.
  • Можно фильтровать по пользователю: ss -tunap | grep 'uid=1000'
  • ss умеет показывать статистику по пакетам и ошибкам: ss -s
  • netstat можно использовать для мониторинга multicast-групп: netstat -g
  • Для автоматизации можно парсить вывод ss и отправлять алерты в Telegram или Slack при подозрительных соединениях.

Автоматизация и скрипты: новые возможности

Вот где ss реально раскрывается! Например, ты можешь писать скрипты для:

  • Мониторинга количества соединений на порт (например, для защиты от DDoS):
    ss -tn state established '( dport = :80 )' | wc -l
  • Автоматической блокировки IP, если их слишком много:

    for ip in $(ss -tn state established | awk '{print $6}' | sort | uniq -c | awk '$1>100 {print $2}'); do
    iptables -A INPUT -s $ip -j DROP
    done
  • Проверки, что сервис действительно слушает нужный порт после деплоя (например, через CI/CD).

Выводы и рекомендации

  • ss — твой основной инструмент для диагностики, мониторинга и автоматизации работы с сетевыми сокетами в Linux. Он быстрее, мощнее и удобнее для скриптов.
  • netstat — пригодится на старых серверах или когда ss не установлен, но его время уходит.
  • Используй ключи -p и -n всегда — это ускоряет работу и даёт больше информации.
  • Не забывай про автоматизацию: ss отлично парсится, его можно интегрировать в мониторинг, алерты, CI/CD.
  • Проверяй открытые порты и соединения регулярно — это поможет избежать как банальных ошибок (порт занят), так и серьёзных проблем с безопасностью.
  • Не ограничивайся только этими утилитами — иногда lsof, nmap или fuser будут удобнее для конкретной задачи.

Где использовать?

  • На любом VPS, выделенном сервере или в облаке для диагностики и мониторинга.
  • В Docker-контейнерах — ss часто есть даже в минимальных образах.
  • Автоматизация и скрипты — для алертов, отчётов, CI/CD.
  • При настройке firewall, балансировщиков, прокси и любых сетевых сервисов.

Официальные ресурсы


Если ты ищешь надёжный VPS или выделенный сервер для экспериментов с сетевыми утилитами — смотри VPS и dedicated варианты.

Прокачивай свои скиллы, автоматизируй рутину, и пусть твой сервер всегда будет под контролем!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked