Что такое порт и почему это не физическая дыра

Что такое порт и почему это не физическая дыра

Порты часто путают с физическими разъёмами на компьютере или сетевом оборудовании, но на самом деле это чисто логическая сущность. Сетевой порт — абстракция операционной системы, номер, который позволяет отличать разные службы и процессы, использующие одну и ту же сетевую карту или IP-адрес. Можно сравнить сервер с почтовым отделением: адрес (IP) у них общий, а ячейки (порты) разные для каждой службы.

При каждом сетевом взаимодействии используются сразу две составные части: IP-адрес и порт. Протоколы типа HTTP (80), HTTPS (443), SSH (22), SMTP (25) закрепили за собой определённые номера портов. Если браузер обращается к сайту, он направляет запрос на IP с указанием нужного порта. Сервер слушает этот порт и возвращает данные тому, кто запросил.

У клиента также есть свой, временный порт — случайное число в диапазоне 1024–65535. Операционная система назначает такие порты для каждого нового обращения. Благодаря этому система различает одновременные запросы пользователя к разным удалённым адресам.

Зачем нужно знать, какие порты открыты

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

За открытым портом стоит процесс: он имеет свой код, конфигурацию и уязвимости. Многие автоматические сканеры ищут специфические версии сервисов на стандартных портах и эксплуатируют известные недочёты. К примеру, устаревший FTP, висящий «для теста», — уже дыра. Открытый RDP или SSH — открытая дверь, особенно если туда можно зайти без сложной аутентификации.

С позиции российского законодательства и требований ФСТЭК, в частности в рамках 152-ФЗ, отсутствие контроля над портами нарушает требования по защите от несанкционированного доступа. В регламенте прописана обязанность вести учёт всех сервисов, их портов и регулярно их проверять. Без инвентаризации защищать инфраструктуру невозможно.

Какие бывают порты: системные и пользовательские

Сетевой стек разделяет диапазоны портов на три логические группы:

  • Системные (well-known), 0–1023: Зарезервированы для базовых протоколов: SSH (22), HTTP (80), SMTP (25), DNS (53). В Linux и других Unix-подобных системах для их использования нужны административные права.
  • Пользовательские (registered), 1024–49151: Применяются прикладными сервисами, которым не требуются root-привилегии, но нужен «фирменный» порт. Например, MySQL (3306), PostgreSQL (5432).
  • Динамические/частные, 49152–65535: Используются автоматически для исходящих соединений клиентских приложений. Службы на них обычно не «слушают».

Некоторые порты по умолчанию остаются открытыми после установки популярных сервисов. Проверяйте прежде всего следующие:

Порт Протокол/Служба Зачем используется Почему часто не нужен в продакшене
21 FTP Передача файлов. Устаревший, данные передаются открыто, часто забывают закрывать.
22 SSH Удалённое управление. Необходим, но требует строгой настройки и мониторинга.
23 Telnet Удалённое управление. Устаревший, всё передаётся в открытом виде. Не должен быть доступен.
25 SMTP Почтовые серверы. Открыт только на почтовых серверах, на обычных — признак ошибки.
53 DNS Разрешение доменов. Должен быть открыт только на DNS-серверах.
80 HTTP Веб-трафик (без шифрования). Обычно используется только для редиректа на 443.
135, 137-139, 445 NetBIOS, SMB Файловый обмен Windows. Опасные в публичной сети; эксплуатируются вредоносами.
443 HTTPS Защищённый веб-трафик. Стандарт для веб-сервисов.
1433 MS SQL Server База данных. По умолчанию открыт, нужен только при межсерверных связях.
3306 MySQL База данных. Частая цель атак, не должен светиться наружу.
3389 RDP Удалённый рабочий стол Windows. Постоянная цель brute-force и эксплойтов, требует защиты.
5432 PostgreSQL База данных. Рискован без фильтрации и ограничения доступа.
8080, 8443 HTTP/HTTPS альтернативные Прокси, тестовые сервисы. Часто не закрывают после тестирования.
27017 MongoDB NoSQL-база данных. В старых версиях снято ограничение по доступу, реальная дыра.

Как проверить открытые порты: инструменты

Netstat: классика, которая есть везде

netstat — универсальная системная утилита для вывода сетевой статистики и списка слушающих портов. Для получения полного списка прослушивающих портов и имен процессов используется следующая команда:

netstat -tulpn
  • -t — выводить TCP-порты
  • -u — выводить UDP-порты
  • -l — только прослушивающие («listening») порты
  • -p — показывать PID и название процесса
  • -n — не преобразовывать адреса и порты в имена (отображать в числовом виде)

В выводе можно увидеть, на каких сетевых интерфейсах сервисы слушают порты. Например, 0.0.0.0:22 означает, что SSH открыт на всех интерфейсах, включая внешний интернет. Лучше ограничивать такой доступ внутренними адресами, если служба не должна быть доступна из вне.

ss: более современный инструмент

ss предоставляет более быстрый и полный вывод по сравнению с netstat, синтаксис аналогичен:

ss -tulpn

Вывод структурирован, удобнее анализировать и фильтровать результаты.

[ИЗОБРАЖЕНИЕ: Скриншот терминала с выводом команды ss -tulpn на Linux-сервере]

Nmap: взгляд злоумышленника

Если netstat и ss показывают все локальные прослушивающие порты, nmap позволяет посмотреть, какие из них доступны реально — после всех настроек фаервола.

nmap -sT -p- localhost
  • -sT — обычное TCP-сканирование
  • -p- — сканировать все порты (0-65535)

Расхождение между выводом netstat и nmap — показатель того, насколько корректно работает сетевой экран (firewall).

[ИЗОБРАЖЕНИЕ: Схематическое изображение работы Nmap: один хост сканирует другой по множеству портов, некоторые доступны, некоторые закрыты]

Windows: средства системы и PowerShell

В Windows посмотреть открытые порты можно через «Монитор ресурсов»: вкладка «Сеть» — раздел «Процессы с сетевой активностью», а также «Прослушивающие порты».

В PowerShell для поиска слушающих TCP-портов выполняется команда:

Get-NetTCPConnection | Where-Object {$_.State -eq 'Listen'}

Она выводит список прослушивающих портов, их адресов и состояний.

Как и почему порты закрывают

Открытый порт существует, пока жив сервис, который его слушает. Закрыть порт можно двумя способами: завершить процесс или заблокировать его на уровне фаервола.

Остановка ненужной службы

Если служба не нужна, проще всего завершить её работу. Например, в Linux:

systemctl stop nginx
systemctl disable nginx

В Windows администрирование осуществляется через «Службы» (services.msc). Многие устаревшие сервисы, такие как Telnet или SMB, надо явно отключать, чтобы не оставлять лишних «окон» в систему.

Настройка конфигурации приложения

Иногда нужно ограничить видимость сервиса, а не отключать его совсем. Например, чтобы база данных была доступна только локально, нужно изменить параметр listen_addresses в конфиге PostgreSQL:

listen_addresses = '127.0.0.1'

После этого можно перезапустить службу, и порт будет слушаться только с localhost.

Блокировка через фаервол

Сетевой экран (firewall) закрывает порты независимо от процессов. В Linux используют iptables:

iptables -A INPUT -p tcp --dport 21 -j DROP

Или удобный firewalld:

firewall-cmd --permanent --remove-service=ftp
firewall-cmd --reload

В Windows правила для портов настраиваются через «Брандмауэр Защитника Windows в режиме повышенной безопасности». Гибкость позволяет блочить подключения по адресу, порту или протоколу.

Что такое сканирование портов и как от него защититься

Сканирование портов — метод разведки: злоумышленник перебирает порты на хосте и фиксирует, какие из них открыты, закрыты или фильтруются фаерволом. По открытым портам определяется тип сервисов, их версии и потенциальные уязвимости.

[ИЗОБРАЖЕНИЕ: Схема, как сканер перебирает порты IP-адреса, отправляет пакеты и получает разные ответы (SYN-ACK, RST, отсутствие ответа)]

Полностью защититься от сканирования невозможно, но можно усложнить задачу атакующим:

  • Изменить номера портов по умолчанию. Например, перенести SSH c 22 на 22222 — это отсечёт часть автоматических сканеров, но не остановит целенаправленное исследование.
  • Порт-нокдаун (port-knocking) — открывать скрытый порт только после правильной последовательности попыток соединения.
  • Адаптивные правила firewall. Автоматические системы (например, fail2ban) могут временно блокировать адреса, с которых идут подозрительно частые попытки соединения.

Главное — не замыливать глаза мерами по маскировке, а держать открытыми только жизненно необходимые порты и следить за актуальностью ПО на этих портах.

Регуляторный контекст: ФСТЭК и 152-ФЗ

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

  • Минимализм. Открыты только те порты, которые действительно нужны для бизнес-процессов; остальные закрыты или защищены.
  • Инвентаризация. Оформление реестра информационных ресурсов, служб и сопоставленных им портов, указание ответственных лиц.
  • Разграничение доступа. Внутренние сервисы (например, базы данных) не должны быть видимы в публичных сетях. Реализуют через сетевую сегментацию и фаерволы.
  • Контроль изменений. Любое изменение в конфигурации сетевых служб — только по регламенту и с обязательной фиксацией.

Рутинная проверка netstat -tulpn или его аналогов — первый шаг любого аудита ИБ. Если по итогам аудит находит порты, о которых нет ни слова в документации, это явный недостаток управления безопасностью.

Список открытых портов — точный индикатор уязвимости IT-инфраструктуры. Его важно знать, регулярно пересматривать и не допускать появления «тёмных зон». Контроль портов — это не паранойя, а обязательное условие устойчивой защиты.

Оставьте комментарий