← Назад к вопросам

Как узнать, какие порты слушает сервер

1.0 Junior🔥 222 комментариев
#Linux и администрирование#Сети и протоколы

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Определение открытых портов на сервере

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

Основные методы и инструменты

1. Команда netstat (классический универсальный инструмент)

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

# Показать все слушающие порты (LISTEN) с процессами и без имени хоста (для скорости)
netstat -tlnp

# Показать все слушающие порты TCP и UDP
netstat -tulnp

# Ключи:
# -t (TCP), -u (UDP)
# -l (только слушающие порты - LISTEN)
# -n (показывать порты числами, без преобразования в имена служб)
# -p (показывать PID и имя процесса, владеющего портом)

Однако в некоторых дистрибутивах (например, в новых версиях Ubuntu) netstat может быть частью пакета net-tools, который не устанавливается по умолчанию, а также может не поддерживать ключ -p без соответствующих прав.

2. Команда ss (современная альтернатива netstat)

ss (socket statistics) — часть пакета iproute2, более быстрая и информативная, чем netstat. Она сейчас является рекомендуемым инструментом.

# Показать все слушающие TCP порты с детализацией процессов
ss -tlnp

# Показать все слушающие UDP порты
ss -ulnp

# Показать все слушающие порты, включая IPv6
ss -tulnp

# Дополнительные полезные флаги:
# -a (все сокеты, не только слушающие)
# -s (статистика по сокетам)
# -4 (только IPv4), -6 (только IPv6)

3. Команда lsof (List Open Files)

В UNIX-системах сетевое соединение представлено как файл. lsof показывает все открытые файлы в системе, включая сетевые сокеты, что дает максимальную детализацию.

# Показать процессы, слушающие порты на всех интерфейсах
lsof -i -P -n

# Показать только слушающие порты (LISTEN)
lsof -iTCP -sTCP:LISTEN -P -n

# Показать процесс, слушающий на конкретном порту (например, 80)
lsof -i :80 -P -n

# Ключи:
# -i (сетевые сокеты), -iTCP/UDP (профиль по протоколу)
# -P (показывать порты числами, не преобразовывать в имена служб)
# -n (показывать IP-адреса числами, не разрешать в хосты)

lsof особенно полезен, когда нужно увидеть точное имя исполняемого файла процесса или пользователя, владеющего портом.

Порт внешней проверки и сканирование

Вышеперечисленные методы показывают порты с точки зрения самой системы. Для проверки того, какие порты действительно доступны снаружи (например, из-за правил firewall или NAT), необходимо выполнить сканирование с другого хоста.

4. nmap (Network Mapper) — сканирование с удаленного хоста

# Базовое сканирование всех портов на целевом хосте (например, 192.168.1.10)
nmap 192.168.1.10

# Сканирование только определенного диапазона портов
nmap -p 1-1000 192.168.1.10

# Быстрое сканирование только наиболее распространенных портов
nmap -F 192.168.1.10

# Детальное сканирование с определением версий служб
nmap -sV -p 22,80,443 192.168.1.10

Важно: Использование nmap на чужих системах без разрешения может быть нарушением закона и политик безопасности. Это инструмент для внутреннего аудита и диагностики.

Пример анализа вывода ss в инфраструктуре

В среде DevOps эти команды часто используются в скриптах для проверки состояния служб после их запуска или при устранении инцидентов.

#!/bin/bash
# Скрипт проверки, что необходимые порты (например, 80 и 443) слушаются
REQUIRED_PORTS=(80 443)

for port in "${REQUIRED_PORTS[@]}"; do
  if ss -tlnp | grep -q ":${port} "; then
    echo "Порт ${port} слушается."
  else
    echo "ВНИМАНИЕ: Порт ${port} НЕ слушается!"
  fi
done

Ключевые моменты для DevOps Engineer

  • Приоритет инструментов: В современных системах используйте ss вместо netstat для скорости и полноты информации.
  • Контекст безопасности: Команды netstat, ss, lsof показывают порты изнутри системы. Реальная доступность портов из внешней сети может отличаться из-за firewall (iptables/nftables, AWS Security Groups, etc.).
  • Автоматизация: Эти проверки часто интегрируются в Ansible playbooks, Terraform health-checks или скрипты мониторинга (например, в Prometheus через экспортеры).
  • Контейнеры: В контейнерах (Docker/Kubernetes) используйте docker ps с флагами портов или kubectl get pods с описанием, а также инструменты внутри контейнера (ss). Для сканирования служб в кластере Kubernetes применяются специализированные инструменты и подходы к сетевой политике.

Таким образом, выбор метода зависит от задачи: быстрая локальная проверка (ss/lsof), детальный анализ процессов (lsof) или проверка доступности с точки зрения сети (nmap).

Как узнать, какие порты слушает сервер | PrepBro