Зачем понадобились номера
На одном сервере обычно живёт не одна служба: веб-сервер, почта, SSH, база данных. IP-адрес у них общий — он принадлежит машине, а не программе. Порт и есть тот номер, который говорит, какой именно программе предназначены данные.
Под номер порта отведено 16 бит, отсюда диапазон от 0 до 65535. Номер есть и у отправителя, и у получателя: браузер, открывая сайт, обращается на порт 443 сервера, а себе берёт случайный высокий номер, чтобы понимать, какой вкладке отдать ответ.
Важно, что наборы портов у TCP и UDP независимы. Порт 53 TCP и порт 53 UDP — это два разных порта, и занять их могут разные программы. Именно поэтому в правилах фаервола протокол указывается всегда.
Три диапазона
Диапазон | Название | Кто использует |
|---|---|---|
0–1023 | Системные | Общеизвестные службы; в Linux занять такой порт может только привилегированный процесс |
1024–49151 | Зарегистрированные | Прикладные сервисы — базы данных, панели управления, ваши приложения |
49152–65535 | Динамические | Временные порты клиентских соединений |
Ограничение на первый диапазон в Linux — не формальность, а мера безопасности: обычный пользователь не может поднять что-то своё на 80-м порту и притвориться веб-сервером системы. Побочный эффект знаком всем, кто запускал приложение и получал отказ в доступе на порту 443. Обходится это либо запуском через systemd с нужными правами, либо обратным прокси, либо разрешением конкретному исполняемому файлу занимать низкие порты.
Откуда берутся временные порты
Когда программа открывает исходящее соединение, система сама выбирает ей свободный номер из динамического диапазона. Закрытое соединение ещё некоторое время держит свой порт в состоянии TIME_WAIT — на случай опоздавших пакетов. На нагруженном сервере, который сам инициирует тысячи соединений в секунду, свободные номера могут кончиться, и это одна из причин загадочных отказов под нагрузкой при полном порядке с процессором и памятью.
Номера, которые стоит помнить
Порт | Служба | Замечание |
|---|---|---|
22 | SSH | Удалённый доступ к серверу |
53 | DNS | Обычно UDP, но для больших ответов и переноса зоны — TCP |
67 и 68 | DHCP | Сервер и клиент соответственно |
80 и 443 | HTTP и HTTPS | Сегодня почти всё — 443 |
123 | NTP | Синхронизация времени, важнее, чем кажется |
161 | SNMP | Мониторинг сетевого оборудования |
3389 | RDP | Удалённый рабочий стол Windows |
3306 / 5432 | MySQL / PostgreSQL | Наружу такое не открывают |
25, 465, 587 | SMTP | Отправка почты; 25-й у домашних провайдеров обычно закрыт |
Стоит помнить, что соответствие «номер — служба» это договорённость, а не закон. Никто не мешает повесить веб-сервер на 8080 или SSH на 2222; просто клиенты по умолчанию стучатся в стандартные номера, и нестандартный придётся указывать явно.
Кто занял порт и слушает ли служба вообще
Ситуация «адрес уже используется» при запуске службы — дело житейское. В Linux смотрим ss -tulpn, в Windows — netstat -an и затем по номеру процесса находим виновника в диспетчере задач. Чаще всего это предыдущая копия той же программы, которую забыли остановить.
Самая частая находка
Служба слушает 127.0.0.1 вместо 0.0.0.0. Локально всё работает, снаружи ничего не доступно, и ошибка выглядит как проблема сети, хотя сеть тут ни при чём. Смотреть нужно на левую колонку вывода: там либо конкретный адрес, либо звёздочка — «на всех интерфейсах».
Проверка снаружи
Проверить доступность порта с другой машины проще всего подключением: telnet host 443, nc -zv host 443 или в PowerShell Test-NetConnection host -Port 443. Ответ разделяет три случая: соединение установлено — всё хорошо; мгновенный отказ — порт закрыт, но узел отвечает; долгое молчание до таймаута — пакеты отбрасывает фаервол.
Стоит ли переносить SSH на нестандартный порт
Совет перевесить SSH с 22-го порта на какой-нибудь 2222 встречается постоянно, и спорят о нём столько же. От целевой атаки это не спасает — сканирование найдёт службу за считаные секунды, а баннер честно расскажет, что это SSH.
Зато заметно уменьшается объём фонового мусора в логах: боты, перебирающие пароли по всему интернету, в массе своей стучатся только в стандартный порт. Разница бывает в сотни записей за сутки, и в этом есть практический смысл: в чистом журнале проще заметить настоящую аномалию.
То есть смысл в переносе есть, но в тишине логов, а не в безопасности. Реальная защита — ключи вместо паролей, запрет входа под root и ограничение доступа по адресам; об этом подробно в чек-листе по серверу. Если же переносите порт, не забудьте про два практических момента: открыть новый порт в фаерволе до перезапуска службы и проверить, что вы не заняли номер, который уже использует что-то другое.
Как выглядит сканирование портов
Посмотреть на свой сервер глазами постороннего полезнее, чем кажется: список открытых наружу портов почти всегда оказывается длиннее ожидаемого. Делается это сканером, самый известный из которых — nmap.
Базовая проверка выглядит как nmap -Pn адрес — она пройдётся по тысяче популярных портов. Ключ -Pn говорит не полагаться на ping: узел может не отвечать на эхо-запросы, но прекрасно работать.
Три возможных состояния
open — порт принимает подключения, за ним живая служба.
closed — узел ответил отказом: порт свободен, но сам хост доступен.
filtered — ответа нет вообще, пакеты кто-то молча отбрасывает. Обычно это фаервол.
Разница между closed и filtered практическая: в первом случае фаервол до порта не добрался, во втором работает как надо. Сервер, у которого всё закрытое показывается как filtered, а открытым остаётся только нужное, настроен правильно.
И одно предупреждение: сканировать можно свои узлы и те, на которые есть явное разрешение. Массовое сканирование чужих адресов провайдеры вполне обоснованно считают недружелюбной активностью, а во многих странах это ещё и повод для разговора с юристами.


