Как просмотреть открытые порты на машине
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Просмотр открытых портов на 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 для централизованного отслеживания изменений.