Как просмотреть открытые порты на Linux-сервере

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

Ответ

Для инвентаризации открытых портов и диагностики сетевых проблем я использую несколько инструментов, в зависимости от задачи.

1. ss (Socket Statistics) — основной современный инструмент:

ss — прямая замена устаревшему netstat, работает быстрее и показывает больше информации из ядра.

# Показать все слушающие TCP-порты с процессами
ss -tlnp

# Показать все слушающие UDP-порты
ss -ulnp

# Показать все установленные соединения
ss -tnp

# Показать соединения к конкретному порту (например, 443)
ss -tnp sport = :443

# Расшифровка флагов:
# -t / -u : TCP / UDP
# -l : только слушающие сокеты (LISTEN)
# -n : не резолвить имена (показывать IP и порты)
# -p : показать процесс, владеющий сокетом

2. netstat — устаревший, но знакомый всем инструмент:

netstat -tulnp

3. lsof — для глубокого анализа процессов:

Полезен, когда нужно узнать, какой конкретный процесс открыл файл или сетевой порт.

# Показать все процессы, слушающие сетевые порты
lsof -i

# Показать процессы, использующие конкретный порт (например, 80)
lsof -i :80

# Показать TCP-порты в состоянии LISTEN
lsof -i TCP -s TCP:LISTEN

4. Проверка доступности порта извне:

Иногда нужно убедиться, что порт не только открыт, но и доступен через firewall.

# Использование netcat (nc)
nc -zv 192.168.1.10 22  # Проверить SSH порт

# Использование telnet
telnet 192.168.1.10 80

# Использование nmap (для сканирования диапазона)
nmap -sT -p 22,80,443 192.168.1.10

Практический пример диагностики: Допустим, веб-сервер не отвечает на порту 8080.

# 1. Проверяем, слушает ли какой-то процесс порт 8080
ss -tlnp | grep :8080

# 2. Если процесс есть, проверяем его конфигурацию и логи
sudo lsof -p <PID> | grep LISTEN

# 3. Проверяем firewall
sudo iptables -L -n -v | grep 8080  # или `sudo firewall-cmd --list-all`

# 4. Проверяем доступность с локального интерфейса
curl -I http://localhost:8080/health