Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код: Skills Начать
Рубрики
Linux Безопасность

Проверка открытых и прослушиваемых портов в Linux с помощью Netstat и SS

Мониторинг открытых и прослушиваемых портов в системе Linux — одна из наиболее фундаментальных практик для поддержания безопасности сервера, диагностики сетевых проблем и эффективного управления инфраструктурой. Независимо от того, работаете ли вы с производственным веб-сервером, средой VPS Hosting или Dedicated Server, понимание того, какие именно порты открыты — и какие сервисы привязаны к ним — дает вам видимость, необходимую для предотвращения несанкционированного доступа, обнаружения неправильных конфигураций и устранения ненужных поверхностей атак.

В этом подробном руководстве мы рассмотрим, как использовать команды netstat и ss для проверки открытых и прослушиваемых портов в любой системе Linux, сравним их преимущества и представим дополнительные инструменты, такие как lsof и nmap, для более глубокого анализа сети.

Почему мониторинг открытых портов имеет значение

Каждый открытый порт на вашем сервере представляет потенциальную точку входа. Услуги, которые неправильно настроены, устарели или просто забыты, могут подвергнуть вашу систему эксплуатации. Регулярный аудит ваших прослушиваемых портов позволяет вам:

  • Выявить несанкционированные услуги, работающие на неожиданных портах
  • Обнаружить попытки вторжения или скомпрометированные процессы
  • Проверить правила брандмауэра, работают ли они как предполагается
  • Подтвердить, что недавно развернутые приложения привязаны к правильным интерфейсам
  • Закрыть неиспользуемые порты, чтобы снизить поверхность атаки

Это особенно важно для администраторов, управляющих Shared Web Hosting окружением или многопользовательскими серверами, где одновременно работают несколько услуг.

Понимание портов и их типов

Перед использованием инструментов важно понять терминологию, которую вы встретите в выводе команд.

ТерминОписание
Открытый портПорт, на котором приложение активно прослушивает входящие соединения
Прослушиваемый портПорт, привязанный к сервису, который ожидает сетевой трафик
TCP (Transmission Control Protocol)Ориентированный на соединение, надежный, используется HTTP, SSH, FTP и т.д.
UDP (User Datagram Protocol)Без соединения, быстрее, но менее надежен, используется DNS, NTP и т.д.

Проверка портов с netstat

Что такое netstat?

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

Установка netstat

Команда netstat является частью пакета net-tools, который может быть не установлен по умолчанию на современных дистрибутивах Linux.

Debian / Ubuntu:

sudo apt install net-tools

CentOS / RHEL / AlmaLinux / Rocky Linux:

sudo yum install net-tools

Использование netstat для проверки открытых и прослушиваемых портов

Чтобы отобразить все прослушиваемые TCP и UDP порты в вашей системе, выполните следующую команду:

sudo netstat -tuln

Описание флагов:

ФлагОписание
-tПоказать TCP порты
-uПоказать UDP порты
-lПоказать только прослушиваемые порты
-nОтображать числовые адреса вместо разрешения имен хостов

Пример вывода

Proto  Recv-Q  Send-Q  Local Address     Foreign Address   State
tcp         0       0  0.0.0.0:22        0.0.0.0:*         LISTEN
tcp         0       0  0.0.0.0:80        0.0.0.0:*         LISTEN
tcp6        0       0  :::443            :::*              LISTEN
udp         0       0  0.0.0.0:53        0.0.0.0:*

Понимание столбцов вывода

  • Local Address — IP-адрес и номер порта, на котором прослушивается сервис. 0.0.0.0 означает, что сервис прослушивает все доступные интерфейсы.
  • Foreign Address — удаленный IP и порт для активных соединений. Звездочка (*) означает, что соединение еще не установлено.
  • State — состояние соединения. LISTEN указывает, что порт открыт и ожидает входящих соединений.

Фильтрация конкретных портов с помощью netstat

Вы можете передать вывод через grep для изоляции конкретного порта или сервиса. Например, чтобы проверить, прослушивает ли что-либо порт 80 (HTTP):

sudo netstat -tuln | grep ":80"

Чтобы проверить порт 443 (HTTPS), который необходим для серверов с установленными SSL сертификатами:

sudo netstat -tuln | grep ":443"

Чтобы также отобразить имя процесса и PID, ответственные за каждое соединение, добавьте флаг -p:

sudo netstat -tulnp

Проверка портов с ss

Что такое ss?

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

Использование ss для проверки открытых и прослушиваемых портов

Синтаксис ss очень похож на синтаксис netstat, что упрощает переход:

ss -tuln

Разбор флагов:

ФлагОписание
-tПоказать TCP сокеты
-uПоказать UDP сокеты
-lПоказать только прослушиваемые сокеты
-nОтобразить числовые адреса

Пример вывода

Netid  State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port
tcp    LISTEN  0       128     0.0.0.0:22            0.0.0.0:*
tcp    LISTEN  0       511     0.0.0.0:80            0.0.0.0:*
tcp    LISTEN  0       511        [::]:443             [::]:*
udp    UNCONN  0       0       0.0.0.0:53            0.0.0.0:*

Расширенное использование ss

Команда ss предлагает широкий спектр опций фильтрации и отображения, которые выходят далеко за пределы возможностей netstat.

Показать только прослушиваемые TCP порты

ss -tl

Показать только прослушиваемые UDP порты

ss -ul

Отображение имен процессов и PID

Чтобы определить, какой процесс использует конкретный порт, используйте флаг -p:

ss -tulnp

Это одна из самых полезных команд для устранения неполадок — она показывает имя процесса и PID рядом с каждым прослушиваемым сокетом, что сразу же показывает, какому приложению принадлежит какой порт.

Пример вывода с флагом -p

Netid  State   Local Address:Port   Process
tcp    LISTEN  0.0.0.0:80           users:(("nginx",pid=1234,fd=6))
tcp    LISTEN  0.0.0.0:22           users:(("sshd",pid=987,fd=3))
tcp    LISTEN  0.0.0.0:3306         users:(("mysqld",pid=2345,fd=21))

Фильтрация по конкретному порту

Чтобы проверить, какой процесс прослушивает порт 8080:

ss -tulnp | grep ":8080"

Показать все установленные TCP соединения

ss -tn state established

Показать статистику сводки

ss -s

Это обеспечивает быстрый обзор общего количества сокетов по типам и состояниям — полезно для выявления необычных объемов соединений.

netstat vs. ss: прямое сравнение

Функция`netstat``ss`
ПроизводительностьМедленнее на загруженных системахЗначительно быстрее
Доступность по умолчаниюТребует пакет net-toolsПредустановлен на современных дистрибутивах
Параметры фильтрацииБазовые (требуется grep)Расширенные встроенные фильтры
Информация о процессахДоступна с -pДоступна с -p
Детализация выводаСтандартнаяБолее подробная информация о сокетах
Рекомендуется дляУстаревшие системы, знакомствоСовременные окружения Linux

Когда использовать netstat

  • На старых системах Linux, где ss недоступен
  • При работе со скриптами или документацией, написанной на основе синтаксиса netstat
  • Для быстрых проверок на системах, где net-tools уже установлен

Когда использовать ss

  • На любом современном дистрибутиве Linux (Ubuntu 20.04+, CentOS 8+, Debian 10+, и т.д.)
  • Когда вам нужен более быстрый вывод на высоконагруженных серверах
  • Для расширенной фильтрации и детального анализа сокетов

Дополнительные инструменты для аудита портов

Помимо netstat и ss, существует несколько других утилит, которые полезны для тщательного аудита портов.

Использование lsof

lsof (список открытых файлов) рассматривает сетевые сокеты как файлы, что делает его еще одним мощным способом определить, какой процесс использует данный порт.

Чтобы проверить, какой процесс привязан к порту 80:

sudo lsof -i :80

Чтобы проверить все прослушиваемые порты:

sudo lsof -i -P -n | grep LISTEN

Пример вывода:

COMMAND   PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
nginx    1234     root   6u  IPv4   23456      0t0  TCP *:80 (LISTEN)
sshd      987     root   3u  IPv4   12345      0t0  TCP *:22 (LISTEN)

Использование nmap

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

Установите nmap, если он еще не установлен:

sudo apt install nmap       # Debian/Ubuntu
sudo yum install nmap       # CentOS/RHEL

Сканируйте все TCP порты на локальной машине:

sudo nmap -sT localhost

Сканируйте открытые порты на конкретном IP-адресе:

sudo nmap -sV 192.168.1.100

Флаг -sV также пытается определить версию сервиса, работающего на каждом открытом порту, что неоценимо для выявления устаревшего или уязвимого программного обеспечения.

> Примечание безопасности: Запускайте сканирование nmap только на системах, которыми вы владеете или на которые у вас есть явное разрешение на сканирование.

Практический рабочий процесс безопасности: аудит портов сервера

Вот рекомендуемый пошаговый рабочий процесс для аудита открытых портов на сервере Linux:

  1. Список всех прослушиваемых портов с информацией о процессе:
   ss -tulnp
  1. Сопоставьте каждый порт с ожидаемыми сервисами. Если вы видите неизвестный процесс на неожиданном порту, немедленно проведите расследование.
  1. Проверьте сервисы, прослушивающие все интерфейсы (0.0.0.0), которые должны быть доступны только локально. Например, сервер базы данных (порт 3306) обычно должен привязываться к 127.0.0.1, а не к 0.0.0.0.
  1. Проверьте правила брандмауэра с помощью iptables -L -n или ufw status verbose чтобы убедиться, что только предполагаемые порты открыты снаружи.
  1. Используйте nmap с внешнего хоста чтобы подтвердить, какие порты действительно доступны из интернета, так как правила брандмауэра могут отличаться от того, что ss сообщает локально.
  1. Закройте или ограничьте любые порты, которые не требуются с помощью брандмауэра или остановив связанный сервис.

Краткий справочник: Наиболее полезные команды

# List all listening TCP and UDP ports (modern, recommended)
ss -tuln

# List listening ports with process names and PIDs
ss -tulnp

# List all listening ports using netstat (legacy)
sudo netstat -tulnp

# Check which process is using port 443
ss -tulnp | grep ":443"

# Check open ports with lsof
sudo lsof -i -P -n | grep LISTEN

# Scan local machine for open ports with nmap
sudo nmap -sT localhost

Заключение

Регулярный аудит открытых и прослушиваемых портов является неотъемлемой частью администрирования Linux-сервера. Такие инструменты, как netstat и ss, обеспечивают немедленную и детальную видимость того, какие сервисы работают, какие порты они занимают и присутствует ли что-то неожиданное в вашей системе.

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

Независимо от того, укрепляете ли вы новое развертывание VPS Hosting, управляете парком Dedicated Servers или защищаете окружение Email Hosting, овладение аудитом портов — это важный навык, который напрямую способствует безопасности и надежности вашей инфраструктуры.