- Home »

Изучение 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 варианты.
Прокачивай свои скиллы, автоматизируй рутину, и пусть твой сервер всегда будет под контролем!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.