Команда 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 применяется на этапе установки канала данных.
Порядок выполнения
- Клиент отправляет команду
PASVна управляющий порт сервера (21). - Сервер в ответе (код 227) передаёт IP-адрес и номер порта, на котором он будет ожидать подключения. Формат ответа:
227 Entering Passive Mode (h1,h2,h3,h4,p1,p2), гдеh1-h4— IP-адрес, аp1,p2— номер порта, вычисляемый какp1*256 + p2. - Клиент устанавливает TCP-соединение с указанным адресом и портом.
- После установки соединения начинается передача данных (загрузка, скачивание, список файлов).
- По завершении передачи канал данных закрывается, но управляющий канал остаётся активным для последующих команд.
Отличие от активного режима
В активном режиме (команда 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 →