Что такое порт и почему это не физическая дыра
Порты часто путают с физическими разъёмами на компьютере или сетевом оборудовании, но на самом деле это чисто логическая сущность. Сетевой порт — абстракция операционной системы, номер, который позволяет отличать разные службы и процессы, использующие одну и ту же сетевую карту или 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-инфраструктуры. Его важно знать, регулярно пересматривать и не допускать появления «тёмных зон». Контроль портов — это не паранойя, а обязательное условие устойчивой защиты.