Как проверить, открыт ли порт на удаленном и локальном хосте?

«Как проверить, открыт ли порт на удаленном и локальном хосте?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps-практике проверка доступности портов — рутина для диагностики сетевых сервисов и фаерволов.

Для локального хоста (проверка, какие порты слушает система):

# Используем ss (современная замена netstat)
ss -tuln | grep LISTEN

# Или для детального вывода по процессам
sudo lsof -i -P -n | grep LISTEN

Для удаленного хоста (проверка доступности сервиса извне):

# Быстрая проверка TCP-порта с помощью netcat (nc)
nc -zv example.com 443

# Проверка с таймаутом (5 секунд)
timeout 5 bash -c '</dev/tcp/example.com/443 && echo Open || echo Closed'

# Полноценное сканирование с Nmap (устанавливается отдельно)
nmap -p 22,80,443 --open example.com

Автоматизация в скриптах (например, для health-check в CI/CD):

#!/bin/bash
HOST="api.service.internal"
PORT=8080

if nc -z -w 2 "$HOST" "$PORT"; then
    echo "SUCCESS: Port $PORT on $HOST is reachable"
    exit 0
else
    echo "ERROR: Cannot connect to $HOST:$PORT"
    exit 1
fi

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

  • Проверяйте не только доступность порта, но и ответ сервиса (например, curl -I для HTTP).
  • Учитывайте сетевые политики Kubernetes/облачных провайдеров и настройки Security Groups.
  • Для UDP-сервисов используйте специализированные инструменты вроде nmap -sU.