На сетевом сервере возможно одновременное функционирование множества программ, отвечающих за прием и обработку данных, таких как запросы к 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” укажет, какая программа слушает порт.
Порты и безопасность сервера
Различные порты, TCP и UDP, участвуют в соединении с сервером и могут стать целями для атак. Например, порт 22 по умолчанию используется для SSH, и часто подвергается атакам для подбора пароля.
Во избежание подобных проблем рекомендуется изменить порт для SSH, например, с 22 на 2222. Это затруднит злоумышленникам проникновение, так как не появится окно ввода пароля, а соединение прервется.
-
Откорректируйте файл /etc/ssh/sshd_config на сервере.
-
Измените строку “Port 22” на “Port 2222” в файле.
-
Перезапустите службу sshd используя команду:
service sshd restart
В результате сервер будет принимать SSH-соединения через нестандартный порт 2222, неизвестный злоумышленникам.
В остальных случаях изменение портов не рекомендовано, поскольку многие программы по умолчанию используют стандартные номера.
Выводы
-
Протоколы транспортного уровня TCP и UDP:
- обеспечивают передачу данных между адресатами;
- также гарантируют правильную последовательность передачи.
- Для проверки использующихся на сервере портов TCP и UDP в Linux необходима утилита Netstat.
- Изучение наизусть стандартных номеров портов таких сервисов, как HTTP, HTTPS, FTP, SSH и почтовых протоколов, упростит работу.