На сетевом сервере возможно одновременное функционирование множества программ, отвечающих за прием и обработку данных, таких как запросы к web-сервису или электронная почта. Эти программы известны как сетевые сервисы.

Каждый пакет данных, поступающий на сервер, должен быть обработан конкретным сетевым сервисом.

Чтобы серверная сетевая подсистема могла правильно направлять данные к соответствующим службам, в TCP/IP-протоколе введена концепция номера порта, позволяющая идентифицировать адресата.


Пакеты данных и их заголовки


TCP/IP-протокол осуществляет передачу информации посредством отдельных блоков, именуемых "пакетами данных".

Каждый пакет содержит заголовок с технической информацией, необходимой для обработки.

Номер порта расположен в заголовке пакета данных, поступающего на сервер, и играет ключевую роль в распределении данных.

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

Любая программа-сервис, принимающая данные, уведомляет операционную систему о своей готовности выполнять обработку данных, направленных к определённому порту.

Говорят, что программа "прослушивает" конкретный порт. Например, пакеты с номером порта 80 передаются веб-серверу, 25 — почтовому серверу, а 22 — для SSH.

Проиллюстрируем распределение IP-пакетов по сервисам в зависимости от номера порта:

Распределение пакета данных


TCP- и UDP-порты


Для взаимодействия с сервером возможно использование портов как протокола TCP, так и UDP.

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

Протокол UDP, напротив, позволяет быстро передавать данные без надёжной доставки и необходимости в предварительном соединении.

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


Диапазоны портов


Номер порта может варьироваться от 0 до 65535. Эти номера стандартно распределены как и многие другие ресурсы в Интернете. Порты от 1 до 1023, называемые “системными”, уже распределены согласно коррдинационным центром IANA.

Пользовательские порты располагаются в диапазоне 1024-49151 и могут быть настроены по усмотрению пользователя для новых сервисов.

Порты от 49152 до 65535 именуются “динамическими” и используются системой для соединений в рамках TCP/IP.

В Linux динамические порты находятся между 32768 и 60999.


Список портов и протоколов


Издавна для передачи данных в интернете используются конкретные порты. Например, HTTP работает на порте 80, HTTPS — на 443, FTP — на 21 и т.д.

Возможности настройки портов серверных сервисов достаточно гибкие. Например, администратор может сменить порт веб-сервера с 80 на 8080, но пользователи должны об этом знать, иначе доступ к серверу будет усложнён.

Зная стандартные номера портов, работа с интернет-сервисами будет проще и эффективней. Стоит учить порты основных сервисов напамять, таких как HTTP, HTTPS, FTP и другие.

Таблица, включающая многие критически важные номера портов, выглядит следующим образом:

Номер порта Протокол Название сервиса
20 TCP FTP - данные
21 TCP FTP - контрольное соединение
22 TCP SSH-сервер
23 TCP Telnet-сервер
25 TCP SMTP - отправка почты
53 TCP, UDP DNS - сервер доменных имен
69 UDP TFTP-сервер
80 TCP HTTP - web-сервер
110 TCP POP3 - прием почты
145 TCP IMAP - прием почты
161 UDP SNMP - протокол управления сетевыми устройствами
443 TCP HTTPS - защищенный шифрованием протокол HTTP
587 TCP Защищенный шифрованием протокол SMTP
993 TCP Защищенный шифрованием протокол IMAP
995 TCP Защищенный шифрованием протокол POP3
1500 TCP Панель ISPManager
2083 TCP Панель cPanel
3306 TCP Сервер базы данных MySQL
8083 TCP Панель Vesta

Порты и URL


В URL (Universal Resource Locator) может указываться номер порта, следуя за двоеточием. Это позволяет определить целевой порт для веб-ресурса.

Стандартные порты HTTP (80) и HTTPS (443) обычно не указываются в ссылках.

Пример URL с отмеченным портом: HTTP://www.myserver.ru:1500/manager


Как просмотреть список используемых портов на сервере?


Пользователи виртуальных или выделенных серверов могут нуждаться в проверке используемых портов TCP и UDP. В Linux для этого предназначена утилита Netstat.

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

netstat -n -l -4 -p

Netstat отображает информацию в таблице с несколькими колонками. Номер порта для соединений отображается в колонке “Local address”, в то время как “PID/Program name” укажет, какая программа слушает порт.

Вывод утилиты Netstat


Порты и безопасность сервера


Различные порты, TCP и UDP, участвуют в соединении с сервером и могут стать целями для атак. Например, порт 22 по умолчанию используется для SSH, и часто подвергается атакам для подбора пароля.

Во избежание подобных проблем рекомендуется изменить порт для SSH, например, с 22 на 2222. Это затруднит злоумышленникам проникновение, так как не появится окно ввода пароля, а соединение прервется.

  1. Откорректируйте файл /etc/ssh/sshd_config на сервере.

    Редактирование файла sshd_config

  2. Измените строку “Port 22” на “Port 2222” в файле.

    Изменение порта

  3. Перезапустите службу sshd используя команду:

    service sshd restart

    Перезагрузка утилиты

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

В остальных случаях изменение портов не рекомендовано, поскольку многие программы по умолчанию используют стандартные номера.


Выводы


  1. Протоколы транспортного уровня TCP и UDP:
    • обеспечивают передачу данных между адресатами;
    • также гарантируют правильную последовательность передачи.
  2. Для проверки использующихся на сервере портов TCP и UDP в Linux необходима утилита Netstat.
  3. Изучение наизусть стандартных номеров портов таких сервисов, как HTTP, HTTPS, FTP, SSH и почтовых протоколов, упростит работу.

Вопросы для самопроверки:

  1. Что такое сетевые сервисы и какую роль они играют на сетевом сервере?
  2. Как работает механизм перенаправления пакетов на сетевом сервере?
  3. Назовите стандартные диапазоны портов и их предназначение.
  4. Какие номера портов используют стандартные интернет-сервисы, такие как HTTP, HTTPS и FTP?
  5. Почему изменение стандартного порта SSH может повысить безопасность сервера?