← Назад к вопросам

Как просмотреть открытые порты на машине

1.0 Junior🔥 251 комментариев
#Linux и администрирование#Сети и протоколы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Просмотр открытых портов на Linux и Windows

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

Основные инструменты в Linux

В Linux экосистеме есть несколько утилит, которые предоставляют информацию о сетевых соединениях и прослушивающих портах.

1. netstat (устаревший, но широко используемый) Утилита netstat показывает сетевые соединения, таблицы маршрутизации и статистику интерфейсов. Для просмотра прослушивающих портов:

# Показать все прослушивающие порты с именами служб
netstat -tuln

# Расширенный вывод с PID процессов
netstat -tulnp

# Комбинация флагов:
# -t — TCP порты
# -u — UDP порты
# -l — только прослушивающие (listening)
# -n — показывать числовые адреса (без DNS-разрешения)
# -p — отображать PID и имя процесса

2. ss (современная замена netstat) Утилита ss (socket statistics) быстрее и предоставляет более детальную информацию:

# Базовый просмотр всех прослушивающих портов
ss -tuln

# Фильтрация по конкретному порту
ss -tuln sport = :443

# Показать соединения в конкретном состоянии
ss -tuln state listening

3. lsof (List Open Files) Поскольку в Linux всё является файлом, включая сетевые сокеты, lsof показывает все открытые файлы, включая сетевые соединения:

# Показать все прослушивающие порты
lsof -i -P -n | grep LISTEN

# Показать порты конкретного процесса
lsof -i -P -n -p <PID>

# Только TCP порты
lsof -i TCP -P -n

4. nmap (сетевой сканер) Nmap используется для активного сканирования портов, в том числе на удалённых машинах:

# Сканирование локального интерфейса
nmap -sT -p- 127.0.0.1

# Быстрое сканирование наиболее распространённых портов
nmap -F localhost

# Сканирование с определением версий служб
nmap -sV localhost

Основные инструменты в Windows

В Windows также есть набор встроенных и сторонних инструментов для анализа портов.

1. netstat (встроенная утилита) Синтаксис похож на Linux, но есть некоторые различия:

# Показать прослушивающие порты
netstat -aon | findstr LISTENING

# С подробной информацией
netstat -abno

# Флаги:
# -a — все соединения и прослушивающие порты
# -b — показывать исполняемый файл
# -n — числовые адреса
# -o — идентификатор процесса (PID)

2. Get-NetTCPConnection (PowerShell) Современный PowerShell-способ получения информации о TCP соединениях:

# Все прослушивающие TCP порты
Get-NetTCPConnection -State Listen | Format-Table -AutoSize

# С фильтрацией по локальному порту
Get-NetTCPConnection -LocalPort 80 -State Listen

3. TCPView (SysInternals) Графическая утилита из набора SysInternals, которая показывает все TCP и UDP endpoints в реальном времени.

Практические сценарии использования

Сценарий 1: Быстрая проверка безопасности

# Какие службы прослушивают порты извне (не localhost)?
ss -tuln | grep -v 127.0.0.1 | grep -v ::1

Сценарий 2: Поиск конфликтов портов

# Проверяем, занят ли порт 8080
sudo lsof -i :8080
# Или альтернатива
sudo ss -tuln | grep :8080

Сценарий 3: Мониторинг в реальном времени

# Отслеживание изменений в сетевых соединениях
watch -n 1 'ss -tuln'

Критические моменты для DevOps-инженера

  • Контекст безопасности: Всегда анализируйте, какие порты действительно должны быть открыты. Лишние открытые порты увеличивают attack surface.
  • Контейнерные среды: В Docker/Kubernetes порты могут быть проброшены на хост или открыты только внутри сетей pod'ов. Используйте docker ps для просмотра портов контейнеров и kubectl get svc,ep для сервисов Kubernetes.
  • Файрволы: Учитывайте, что iptables, nftables, firewalld или облачные security groups могут блокировать порты, даже если служба их прослушивает.
  • Автоматизация: В скриптах автоматизации предпочитайте ss вместо netstat, так как он быстрее и его вывод проще парсить.

Пример скрипта для регулярного аудита

#!/bin/bash
# Скрипт аудита открытых портов
DATE=$(date +%Y-%m-%d_%H-%M-%S)
OUTPUT_FILE="/var/log/port-audit/audit_$DATE.log"

echo "=== Аудит открытых портов от $DATE ===" > $OUTPUT_FILE
echo "" >> $OUTPUT_FILE

echo "1. TCP порты (ss):" >> $OUTPUT_FILE
ss -tuln >> $OUTPUT_FILE 2>&1

echo "" >> $OUTPUT_FILE
echo "2. Процессы, слушающие порты (lsof):" >> $OUTPUT_FILE
lsof -i -P -n | grep LISTEN >> $OUTPUT_FILE 2>&1

echo "" >> $OUTPUT_FILE
echo "3. Проверка iptables правил:" >> $OUTPUT_FILE
iptables -L -n -v >> $OUTPUT_FILE 2>&1

# Отправка отчёта
mail -s "Port Audit $DATE" admin@example.com < $OUTPUT_FILE

Правильный мониторинг открытых портов помогает не только в диагностике сетевых проблем, но и является важной частью security hardening инфраструктуры. В продакшен-средах я рекомендую интегрировать такие проверки в системы мониторинга (Prometheus с node_exporter, Zabbix) и SIEM для централизованного отслеживания изменений.

Как просмотреть открытые порты на машине | PrepBro