Открыть сервис

Команда PASV

Команда PASV — это функциональная команда протокола передачи файлов (FTP), используемая для установления соединения в пассивном режиме передачи данных. Она относится к группе команд управления протоколом и служит для инициирования процесса, при котором сервер открывает порт для ожидания входящего подключения от клиента, в отличие от активного режима, где инициатором открытия порта выступает клиент. Команда определена в стандарте RFC 959 (1985 год) и является обязательной для реализации в современных FTP-серверах.

История и стандартизация

Протокол FTP был разработан в начале 1970-х годов для передачи файлов между компьютерами в сети ARPANET. Первоначальная спецификация (RFC 114) не предусматривала пассивного режима, и все соединения устанавливались в активном режиме: клиент открывал порт и ожидал подключения от сервера. Однако с развитием сетей и появлением межсетевых экранов (firewalls) и технологий трансляции сетевых адресов (NAT) активный режим стал проблематичным — клиент не мог принимать входящие соединения из-за блокировки портов.

В 1985 году в стандарте RFC 959 была введена команда PASV (от англ. passive — «пассивный»). Она позволяла серверу самостоятельно открывать порт для передачи данных, а клиенту — подключаться к нему. Это решение обходило ограничения межсетевых экранов, так как инициировало соединение со стороны клиента, что обычно разрешено политиками безопасности. Команда PASV стала стандартом де-факто для FTP-клиентов, работающих через NAT или защищённые сети.

Принцип работы

В протоколе FTP используются два канала: управляющий (порт 21 по умолчанию) и канал данных (динамические порты). Команда PASV применяется на этапе установки канала данных.

Порядок выполнения

  1. Клиент отправляет команду PASV на управляющий порт сервера (21).
  2. Сервер в ответе (код 227) передаёт IP-адрес и номер порта, на котором он будет ожидать подключения. Формат ответа: 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2), где h1-h4 — IP-адрес, а p1,p2 — номер порта, вычисляемый как p1*256 + p2.
  3. Клиент устанавливает TCP-соединение с указанным адресом и портом.
  4. После установки соединения начинается передача данных (загрузка, скачивание, список файлов).
  5. По завершении передачи канал данных закрывается, но управляющий канал остаётся активным для последующих команд.

Отличие от активного режима

В активном режиме (команда PORT) клиент сам открывает порт и сообщает серверу свой адрес и порт, после чего сервер подключается к клиенту. В пассивном режиме инициатива полностью принадлежит клиенту, что делает его более совместимым с межсетевыми экранами и NAT.

Ответы сервера

Сервер может вернуть следующие коды ответа на команду PASV:

  • 227 — успешный ответ, содержит IP-адрес и порт в формате (h1,h2,h3,h4,p1,p2). Пример: 227 Entering Passive Mode (192,168,1,1,10,245) (порт 10*256+245 = 2805).
  • 421 — сервис недоступен, закрывается управляющее соединение.
  • 500 — синтаксическая ошибка команды.
  • 502 — команда не реализована (устаревшие серверы могут не поддерживать PASV).
  • 530 — пользователь не авторизован.

Применение

Команда PASV используется в большинстве современных FTP-клиентов и серверов. Она особенно важна в следующих сценариях:

  • Работа за NAT: клиент находится за маршрутизатором, который не позволяет входящие соединения. В пассивном режиме клиент сам инициирует подключение, что обходит ограничения.
  • Межсетевые экраны: многие корпоративные сети блокируют входящие соединения на нестандартные порты. PASV позволяет клиенту подключаться к серверу, который открывает порт по своему усмотрению.
  • FTP через прокси-серверы: пассивный режим упрощает настройку прокси, так как не требует перенаправления входящих соединений.
  • Облачные и хостинговые сервисы: большинство публичных FTP-серверов (например, для загрузки файлов) работают исключительно в пассивном режиме.

Ограничения и проблемы

Несмотря на широкое распространение, команда PASV имеет ряд недостатков:

  • Необходимость открытия портов на сервере: сервер должен иметь возможность открывать динамические порты (обычно в диапазоне 1024–65535), что может быть проблемой при строгих политиках безопасности.
  • Проблемы с NAT на стороне сервера: если сервер также находится за NAT, он может сообщить клиенту свой внутренний IP-адрес, который недоступен извне. Для решения этой проблемы используется команда EPSV (Extended Passive Mode, RFC 2428), которая позволяет передавать адрес в более гибком формате.
  • Уязвимости безопасности: пассивный режим не шифрует данные, что делает их уязвимыми для перехвата. Для защиты применяются расширения FTPS (FTP over SSL/TLS) или SFTP (SSH File Transfer Protocol), которые не используют команду PASV в классическом виде.

Альтернативы

Современные реализации FTP часто используют расширенные версии пассивного режима:

  • EPSV (Extended Passive Mode) — команда, определённая в RFC 2428, которая передаёт порт в виде числа, а не четырёх октетов, и поддерживает IPv6. Ответ имеет формат 229 Entering Extended Passive Mode (|||port|).
  • PASV с IPv6 — в стандарте RFC 2428 также определён вариант для IPv6, но на практике чаще используется EPSV.

Интересные факты

  • Команда PASV является одной из немногих команд FTP, которая не требует предварительной аутентификации — её можно выполнить сразу после установки управляющего соединения.
  • В некоторых реализациях FTP-серверов (например, vsftpd) пассивный режим может быть включён или отключён администратором через конфигурационные файлы.
  • Протокол FTP, включая команду PASV, был разработан в эпоху, когда безопасность не была приоритетом, поэтому передача данных в открытом виде остаётся его ключевым недостатком.

Источники

  • RFC 959 — File Transfer Protocol (1985)
  • RFC 2428 — FTP Extensions for IPv6 and NATs (1998)
  • Стивенс, У. Р. «TCP/IP. Протоколы, реализация, программирование» (2003)
  • Документация FTP-сервера vsftpd (версия 3.0.5)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →