SSD Nodes Learn
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-07-24

Что такое порты и как работают службы Linux

Узнайте принцип работы TCP и UDP портов. Инструкция по использованию команды ss для проверки активных соединений и отличия локальных портов от публичных.

Что такое порт на самом деле

Порт — это число, которое позволяет одному серверу одновременно запускать множество служб без смешивания их трафика. Ваш VPS имеет один IP-адрес, но на нем могут одновременно работать веб-сервер, SSH-сервер и база данных. Когда приходит пакет, операционная система должна определить, для какой именно службы он предназначен. Номер порта является ответом. Веб-трафик идет на порт 443, SSH — на порт 22. IP-адрес доставляет пакет на ваш сервер; порт доставляет его нужной программе на этом сервере.

Порт — это 16-битное число: 16 бит дают диапазон от 0 до 65535. Число 0 зарезервировано, поэтому на практике порты работают в диапазоне от 1 до 65535. Порты ниже 1024 являются «известными» (well-known) портами, и для их открытия требуются права root. Именно поэтому стандартные службы работают именно там: 22 для SSH, 80 для HTTP, 443 для HTTPS, 53 для DNS. Любой номер выше 1024 доступен для обычных программ.

Существует два типа протоколов: TCP и UDP. Номер порта в одном протоколе отделен от такого же номера в другом. TCP — это протокол с установлением соединения, который используют большинство служб, таких как SSH, HTTP и базы данных. UDP не устанавливает соединение и используется для таких задач, как DNS и некоторые VPN. При настройке брандмауэра (firewall) вы обычно указываете протокол, например 22/tcp.

Режим прослушивания (Listening) означает, что программа ожидает подключения на порту

Программа, которая хочет принимать соединения, просит ядро «слушать» (listen) определенный порт. С этого момента порт на машине открыт, и программа отвечает на всё, что на него поступает, при условии, что это разрешено брандмауэром. Порт, на котором ничего не прослушивается, просто отклоняет соединения. Поэтому первый вопрос при любой проверке безопасности: что именно прослушивается и где.

Команда для получения этого ответа — ss:

sudo ss -tlnp

Флаги означают: TCP (t), только прослушиваемые сокеты (l), числовые порты (n, чтобы вы видели 22 вместо ssh) и процесс-владелец (p). Типичный результат:

State   Recv-Q  Local Address:Port   Process
LISTEN  0       0.0.0.0:22           sshd
LISTEN  0       127.0.0.1:5432       postgres
LISTEN  0       [::]:80              nginx

Столбец Process показывает, какая программа владеет каждым портом. С помощью этого можно отследить процессы, которые вы не планировали запускать.

Столбец Local Address — это самая важная часть

Внимательно читайте адрес перед каждым портом, так как он определяет, кто может получить доступ к службе. Вы будете постоянно встречать три случая.

0.0.0.0:22 означает «слушать на всех IPv4-адресах, которые есть у этой машины», включая публичный. Служба доступна из интернета по IPv4, если это разрешено брандмауэром.

[::]:80 означает то же самое для IPv6: слушать на всех IPv6-адресах, включая публичные. Многие программы по умолчанию привязываются к этому адресу, а в Linux сокет :: часто принимает также и IPv4.

127.0.0.1:5432 означает «слушать только на loopback». 127.0.0.1 — это адрес, который машина использует для общения с самой собой; он не маршрутизируется извне. Служба, привязанная к этому адресу, доступна только с того же сервера и никогда — из интернета, независимо от настроек вашего брандмауэра. Строка с Postgres выше безопасна по определению.

Из этого следует практическое правило: база данных, кэш или панель администратора, которые используют только ваши собственные приложения, должны быть привязаны к 127.0.0.1, а не к 0.0.0.0. Если служба никогда не слушает публичный адрес, злоумышленник не сможет до нее добраться.

«Слушать» не означает «доступен извне»

Еще одно различие поможет избежать путаницы. То, что порт открыт на машине (программа слушает его), отличается от того, что порт доступен извне (брандмауэр разрешает доступ). Для подключения удаленного клиента должны выполняться оба условия.

Таким образом, существует два уровня контроля. Вы решаете, что именно будет слушать порт, устанавливая адрес привязки (bind address) для каждой службы. И вы решаете, что может достичь внешний мир, с помощью брандмауэра. На правильно настроенном сервере используются оба метода: службы привязываются только там, где это необходимо, а брандмауэр запрещает всё, что вы не разрешили явно. Чтение списка прослушиваемых портов с помощью ss — это первый шаг; решение о том, что разрешает брандмауэр — второй шаг, который описан в основы брандмауэров с UFW.

Здесь есть нюанс, на котором многие обжигаются. IPv4 и IPv6 разделены, и брандмауэр, настроенный только для IPv4, оставляет службы [::] открытыми в IPv6. У этой конкретной ловушки есть отдельный материал: ловушка брандмауэра IPv6.

FAQ

Как увидеть, какие порты открыты на моем Linux-сервере?

Запустите sudo ss -tlnp для TCP или sudo ss -ulnp для UDP. Это выведет список всех прослушиваемых сокетов, их портов, локальных адресов привязки и процессов-владельцев. Читайте столбец Local Address: 0.0.0.0 или [::] означает, что служба доступна в сети, а 127.0.0.1 означает, что она слушает только на самой машине.

В чем разница между 0.0.0.0 и 127.0.0.1?

0.0.0.0 означает «слушать на всех IPv4-адресах», включая публичный, поэтому служба доступна из сети. 127.0.0.1 — это loopback, адрес, который машина использует для общения с самой собой; он не маршрутизируется извне, поэтому служба, привязанная к нему, доступна только локально. Привязывайте внутренние службы к 127.0.0.1, чтобы они никогда не были открыты для сети.

Нужно ли открывать порт в брандмауэре, чтобы служба работала?

Только для тех служб, к которым должен иметь доступ кто-то другой. Службе, привязанной к 127.0.0.1, не нужно правило брандмауэра, так как внешние соединения к ней всё равно не дойдут. Службе на 0.0.0.0 или [::] требуется правило брандмауэра для разрешения трафика; по умолчанию доступ должен быть запрещен, пока вы не добавите разрешающее правило.

В чем разница между TCP-портом и UDP-портом?

TCP — это протокол с установлением соединения, который используется большинством служб, таких как SSH, веб-серверы и базы данных. UDP — это протокол без установления соединения, который используется DNS и некоторыми VPN. Одинаковые числа в TCP и UDP — это разные порты, поэтому 53/tcp и 53/udp — это разные порты. При написании правил брандмауэра вы указываете протокол, например 22/tcp.