В чем разница между активным и пассивным FTP?

312

Может кто-нибудь сказать мне, в чем разница между активным и пассивным FTP?
Какой из них предпочтительнее?

Картик
источник

Ответы:

474

Активный и пассивный - это два режима, в которых может работать FTP.

Для фона FTP фактически использует два канала между клиентом и сервером, каналы команд и данных, которые на самом деле являются отдельными TCP-соединениями.

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

Такое разделение информации о командах и данных на отдельные каналы является отличным способом отправки команд на сервер без ожидания завершения текущей передачи данных. Согласно RFC, это необходимо только для подмножества команд, таких как выход, прерывание текущей передачи и получение статуса.


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

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

Однако затем он запрашивает сервер (в командном канале) начать прослушивание порта (по усмотрению сервера), а не пытаться установить соединение с клиентом.

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

Как только клиент узнает об этом, он может успешно создать канал данных и продолжить.

Более подробная информация доступна в RFC: https://www.ietf.org/rfc/rfc959.txt

paxdiablo
источник
1
Я не думаю, что утверждение относительно порта Y является правильным, в активном режиме клиент не определяет порт Y, сервер пытается случайным образом выбрать порт # и пытается увидеть, разрешит ли клиент связь через этот выбранный порт. , Причина, по которой я это говорю, заключается в том, что если это не так (мой аргумент), то клиентская сторона, даже если она находится за брандмауэром, всегда может создать два правила межсетевого экрана: одно для исходящего соединения и одно для входящего соединения.
arun.raj.mony
1
@arun, клиент не обязательно контролирует брандмауэр. Пример: в корпоративных средах обычно существует межсетевой экран между сетью компании и внешним миром, по которому клиент, работающий с FTP, имеет нулевую мощность.
paxdiablo
В пассивном режиме, почему сервер отправляет клиенту случайный порт клиенту, а клиент напрямую подключается к порту 20 сервера?
Ченгбо
@paxdiablo Почему в пассивном режиме сервер назначает случайный порт no и отправляет его клиенту для подключения к данным? Почему клиент не может напрямую открыть канал данных от клиентского порта нет до порта № 20 на стороне сервера?
Зефир
1
Я задал вопрос здесь и сейчас networkengineering.stackexchange.com/q/43680/37406
Зефир
166

Я недавно столкнулся с этим вопросом на своем рабочем месте, поэтому я думаю, что я должен сказать кое-что больше здесь. Я буду использовать изображение, чтобы объяснить, как работает FTP в качестве дополнительного источника для предыдущего ответа.

Активный режим:

активный режим


Пассивный режим:

введите описание изображения здесь


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

введите описание изображения здесь


Пассивная конфигурация не будет иметь этой проблемы, так как клиент будет инициатором подключения. Конечно, на стороне сервера также может быть установлен межсетевой экран. Однако, поскольку ожидается, что сервер получит большее количество запросов на соединение по сравнению с клиентом, для администратора сервера было бы логично приспособиться к ситуации и открыть выбор портов для удовлетворения конфигураций пассивного режима.

Поэтому было бы лучше настроить сервер для поддержки пассивного режима FTP. Однако пассивный режим сделает вашу систему уязвимой для атак, поскольку клиенты должны подключаться к случайным портам сервера. Таким образом, для поддержки этого режима не только если на вашем сервере должно быть доступно несколько портов, ваш брандмауэр также должен позволять проходить соединения со всеми этими портами!

Чтобы снизить риски, хорошим решением будет указать диапазон портов на вашем сервере, а затем разрешить только этот диапазон портов на брандмауэре.

Для получения дополнительной информации, пожалуйста, прочитайте официальный документ .

Yuantao
источник
Я просто догадываюсь, что является проблемой безопасности. Если сервер прослушивает один и тот же порт (20), он не может понять, какой клиент говорит, поэтому он выбирает случайный порт и отправляет его клиенту, начиная прослушивать этот порт. Когда клиент подключается к этому порту, сервер знает, какому клиенту он принадлежит. Но для MITM достаточно подключиться к одному и тому же клиенту. (хорошо, митм атака здесь сложно в любом случае ...)
Даниэле Круциани
2
Отличный ответ, особенно информация о проблеме брандмауэра
Ань Туан
14

Отредактированная версия моей статьи Режимы FTP-соединения (Active vs. Passive) :

Режим FTP-соединения (активный или пассивный), определяет, как устанавливается соединение для передачи данных. В обоих случаях клиент создает управляющее TCP-соединение с командным портом FTP-сервера 21. Это стандартное исходящее соединение, как и любой другой протокол передачи файлов (SFTP, SCP, WebDAV) или любое другое клиентское TCP-приложение (например, веб-браузер). ). Так что обычно при открытии контрольного соединения проблем не возникает.

Там, где протокол FTP более сложен по сравнению с другими протоколами передачи файлов, это передача файлов. В то время как другие протоколы используют одно и то же соединение как для управления сеансом, так и для передачи файлов (данных), протокол FTP использует отдельное соединение для передачи файлов и списков каталогов.

В активном режиме клиент начинает прослушивать случайный порт для входящих соединений с сервером (клиент отправляет команду FTPPORT чтобы сообщить серверу, на каком порту он прослушивает). В настоящее время типично, что клиент находится за брандмауэром (например, встроенным брандмауэром Windows) или NAT-маршрутизатором (например, модемом ADSL), неспособным принимать входящие TCP-соединения.

По этой причине был введен пассивный режим, который используется в настоящее время. Использование пассива режима является предпочтительным, поскольку большая часть сложной конфигурации выполняется только один раз на стороне сервера опытным администратором, а не индивидуально на стороне клиента (возможно) неопытными пользователями.

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

Конфигурация сети для пассивного режима

В пассивном режиме большая часть нагрузки на конфигурацию лежит на стороне сервера. Администратор сервера должен настроить сервер, как описано ниже.

Брандмауэр и NAT на стороне FTP-сервера должны быть настроены не только для разрешения / маршрутизации входящих соединений на FTP-порт 21, но и для диапазона портов для входящих соединений для передачи данных. Как правило, программное обеспечение сервера FTP имеет параметр конфигурации для настройки диапазона портов, которые будет использовать сервер. И тот же диапазон должен быть открыт / маршрутизирован на брандмауэре / NAT.

Когда FTP-сервер находится за NAT, ему необходимо знать его внешний IP-адрес, чтобы он мог предоставить его клиенту в ответ на PASVкоманду.

Конфигурация сети для активного режима

В активном режиме большая часть нагрузки на конфигурацию лежит на стороне клиента.

Брандмауэр (например, брандмауэр Windows) и NAT (например, правила маршрутизации модема ADSL) на стороне клиента должны быть настроены для разрешения / маршрутизации диапазона портов для входящих подключений к данным. Чтобы открыть порты в Windows, перейдите на выберите «Панель управления»> «Система и безопасность»> «Брандмауэр Windows»> «Дополнительные параметры»> «Входящие правила»> «Новое правило» . Для маршрутизации портов на NAT (если есть), обратитесь к его документации.

Когда в вашей сети есть NAT, FTP-клиент должен знать свой внешний IP-адрес, который WinSCP должен предоставить FTP-серверу, используя PORT команды. Так что сервер может правильно подключиться обратно к клиенту, чтобы открыть подключение для передачи данных. Некоторые FTP-клиенты могут автоматически определять внешний IP-адрес, некоторые настраиваются вручную.

Smart Firewalls / NATs

Некоторые брандмауэры / NAT пытаются автоматически открывать / закрывать порты данных, проверяя управляющее соединение FTP и / или переводя IP-адреса соединения данных в трафик управляющего соединения.

При использовании такого брандмауэра / NAT указанная выше конфигурация не требуется для обычного незашифрованного FTP. Но это не может работать с FTPS, поскольку трафик управляющего соединения зашифрован, а межсетевой экран / NAT не может ни проверять, ни изменять его.

Мартин Прикрыл
источник
11

Активный режим: -сервер инициирует соединение.

Пассивный режим: -клиент инициирует соединение.

Саид Алиакбари
источник
1

Активный режим - клиент выдает серверу команду PORT, сигнализируя, что он будет «активно» предоставлять IP и номер порта, чтобы открыть соединение для передачи данных обратно клиенту.

Пассивный режим - клиент выполняет команду PASV, чтобы указать, что он будет «пассивно» ждать, пока сервер предоставит IP и номер порта, после чего клиент создаст соединение данных с сервером.

Выше приведено много хороших ответов, но этот пост содержит полезную графику и дает довольно четкое объяснение: https://titanftp.com/2018/08/23/what-is-the-difference-between-active-and -passive-FTP /

DaveW2122
источник