Как проверить, открыт ли порт на Linux-сервере?

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

Ответ

В работе с Linux-серверами я проверяю состояние портов несколькими способами, в зависимости от того, нужно ли проверить слушающий порт локально или доступность порта извне.

A. Проверка, слушает ли сервер локально на порту:

# Предпочитаю ss — он быстрее и информативнее netstat
sudo ss -tlnp | grep :80

# Ключи:
# -t — TCP
# -l — listening ports
# -n — numeric (не резолвить имена)
# -p — показать процесс

Если порт слушается, в выводе будет строка с процессом (например, nginx или Apache).

B. Проверка доступности порта с другой машины (из сети):

# Быстрая проверка TCP-соединения
nc -zv <server_ip> 80

# Или с таймаутом
timeout 2 bash -c "</dev/tcp/<server_ip>/80" && echo "Port is open" || echo "Port is closed"

C. Комплексная проверка (если утилиты недоступны): Часто в минимальных контейнерах нет nc или telnet. Тогда использую встроенные возможности:

# Использование /dev/tcp (работает в Bash)
if echo > /dev/tcp/localhost/80; then echo "Open"; fi

Критически важный момент: Если порт должен быть открыт, но соединение не устанавливается, первым делом проверяю iptables/firewalld и host-based firewall в облаке (AWS Security Groups, GCP Firewall Rules). Команда sudo iptables -L -n -v помогает увидеть действующие правила.