Как узнать, какие порты слушает сервер
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Определение открытых портов на сервере
Для определения активных портов, на которых сервер принимает соединения, используются различные инструменты и методы, зависящие от операционной системы и контекста задачи. Это одна из базовых операций при диагностике сетевых служб и аудите безопасности.
Основные методы и инструменты
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).