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

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

Ответ

Для проверки открытых (слушающих) портов на сервере используются следующие команды и инструменты:

Основные команды в Linux:

  • ss (рекомендуется, современнее netstat):
    # Показать все слушающие TCP и UDP порты с именами процессов
    sudo ss -tulnp
  • netstat (устаревший, но широко используемый):
    sudo netstat -tulnp

Ключи команд:

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

Пример вывода ss -tulnp:

Netid  State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port Process
tcp    LISTEN  0       128     0.0.0.0:80          0.0.0.0:*         users:(("nginx",pid=1234,fd=6))

Это показывает, что процесс nginx (PID 1234) слушает на всех интерфейсах (0.0.0.0) на порту 80.

Дополнительные инструменты:

  • lsof: Универсальная утилита для списка открытых файлов (включая сетевые сокеты).
    sudo lsof -i -P -n | grep LISTEN
  • nmap: Для проверки с другого хоста (внешняя перспектива).
    nmap -sT -p 1-1000 <IP-адрес_сервера>

В контексте DevOps: Эта проверка — первый шаг при диагностике проблем с сетевым доступом к сервису (например, почему балансировщик не может достучаться до бэкенда).