Ответ
При работе с инфраструктурой я часто проверяю открытые порты на удалённых серверах. Вот мой стандартный набор команд и подходов:
1. Базовые утилиты командной строки:
# 1. Netcat — самый прямой способ
nc -zv <server_ip> <port_number>
# Вывод "succeeded" означает успех.
# 2. Telnet — есть почти везде
telnet <server_ip> <port_number>
# Если соединение устанавливается, порт открыт. Ctrl+] и 'quit' для выхода.
# 3. Nmap — для детальной информации
nmap -p <port_number> <server_ip>
# Покажет состояние (open/filtered/closed) и, возможно, сервис.
2. Проверка изнутри облачной сети (VPC): Часто порт открыт только внутри приватной сети. Подключаюсь к bastion-хосту или используею Systems Manager Session Manager (в AWS) и оттуда проверяю:
ssh bastion_host "nc -zv private_server_ip 5432" # Проверка порта БД
3. Проверка с помощью curl для HTTP/HTTPS сервисов:
curl -s -o /dev/null -w "%{http_code}n" --connect-timeout 5 http://<server_ip>:<port>
# Код 200-399 или 401/403 часто означают, что порт открыт и сервис отвечает.
4. Автоматизированная проверка в скриптах развёртывания (Ansible/Python):
В плейбуках Ansible использую модуль wait_for для проверки перед выполнением следующих задач:
- name: Wait for web server to become available
ansible.builtin.wait_for:
host: "{{ inventory_hostname }}"
port: 8080
delay: 5
timeout: 60
Ключевые моменты для диагностики:
Connection refused— порт закрыт или сервис не запущен на той стороне.- Таймаут — пакеты не доходят (скорее всего, блокировка фаерволом).
- Всегда проверяю Security Groups / Network ACLs в облаке и локальный firewall (
sudo ufw statusилиsudo firewall-cmd --list-all).