Networking

Сетевые порты

Порт — число от 0 до 65535, по которому операционная система определяет, какому приложению отдать пришедший пакет.

Что такое Сетевые порты

Порт — 16-битное число (0–65535), которое адресует не машину, а конкретное приложение на ней. IP-адрес доводит пакет до сервера, порт — до нужной программы.

Аналогия: IP-адрес — дом, порт — номер квартиры. Без него почтальон знает здание, но не знает, кому отдать письмо.

Именно порты позволяют одному серверу одновременно держать сайт, базу и SSH: у каждого сервиса свой номер. Соединение однозначно определяется четвёркой «IP источника, порт источника, IP назначения, порт назначения» — поэтому тысячи клиентов подключаются к порту 443 одновременно и не путаются: у каждого свой порт на своей стороне.

Пространства портов у TCP и UDP независимы: TCP/53 и UDP/53 — разные сокеты, которые могут занимать разные программы.

Три диапазона

Диапазон Название Кто занимает
0–1023 системные, well-known стандартные сервисы; в Linux нужны права root
1024–49151 зарегистрированные БД, приложения, всё прикладное
49152–65535 динамические, эфемерные исходящие соединения клиентов

Порог 1024 — причина, по которой веб-приложение обычно слушает 8080, а наружу его выставляет nginx. Запускать сервис от root ради порта 80 не нужно.

Эфемерные порты система выдаёт сама при исходящем соединении. В Linux диапазон по умолчанию — 32768–60999 (net.ipv4.ip_local_port_range); на очень нагруженном прокси он способен закончиться, и это одна из причин ошибок вида «cannot assign requested address».

Порты, которые надо знать наизусть

Порт Сервис Комментарий
22 SSH удалённый доступ и SFTP
25 SMTP между серверами, у провайдеров обычно закрыт
53 DNS UDP, при больших ответах TCP
80 HTTP обычно только редирект на 443
443 HTTPS он же QUIC/HTTP-3 по UDP
123 NTP UDP
161 SNMP UDP, наружу не выставлять
587 SMTP submission отправка почты клиентом
993 IMAPS приём почты
3306 MySQL только внутренняя сеть
5432 PostgreSQL только внутренняя сеть
6379 Redis без пароля — мгновенный взлом

22 портSSH, главная дверь в сервер. Его сканируют непрерывно, и в логах свежей машины перебор паролей появляется в первые же часы. Защита — не перенос на нестандартный номер (это лишь снижает шум в логах), а вход по ключу с PasswordAuthentication no.

25 порт — SMTP между почтовыми серверами. Хостеры и домашние провайдеры блокируют его исходящим по умолчанию для борьбы со спамом. Именно поэтому «почта не отправляется с нового VPS» — чаще всего не ошибка конфига, а закрытый 25-й, и открывают его по заявке.

Как посмотреть, что открыто

$ ss -tlnp
State   Recv-Q  Send-Q  Local Address:Port   Process
LISTEN  0       128         0.0.0.0:22        users:(("sshd",pid=812,fd=3))
LISTEN  0       511         0.0.0.0:80        users:(("nginx",pid=1104,fd=6))
LISTEN  0       244       127.0.0.1:5432      users:(("postgres",pid=980,fd=5))

Самое важное в выводе — адрес слева от порта. 127.0.0.1:5432 означает, что PostgreSQL доступен только с самой машины: это правильно. 0.0.0.0:5432 — база слушает все интерфейсы, и если файрвол её не закрывает, она открыта интернету. Проверка «что у меня торчит наружу» начинается именно с этой колонки.

$ ss -tn state established | wc -l     # сколько активных соединений
$ nc -zv example.com 443               # доступен ли порт снаружи
$ sudo lsof -i :80                     # кто занял порт

Ошибка Address already in use при старте сервиса означает, что порт занят — последняя команда покажет, кем.

Правила гигиены

  • Наружу — только то, что обязано быть снаружи. Обычно это 22, 80 и 443. Базы, кеши и мониторинг слушают внутренний интерфейс или закрыты правилами iptables/UFW.
  • Открытый порт без пароля находят за часы. Redis, Elasticsearch и MongoDB, выставленные в интернет с настройками по умолчанию, — классический сценарий утечки.
  • Проверяйте снаружи, а не изнутри. ss показывает, что слушает сервис, но не что пропускает файрвол и security group облака.

Связанные термины

  • TCP и UDP — у каждого протокола своё пространство портов
  • IP-адрес — адресует машину, порт адресует приложение
  • Адрес сервера — хост вместе с портом
  • NAT — различает клиентов по портам и пробрасывает их внутрь
  • iptables / UFW — чем порты закрывают
  • Сетевая диагностика — ss, nc и проверка доступности

Готовы запустить GPU-задачу?

Запустить GPU-сервер