pasv ftp что это
ftp_pasv
(PHP 4, PHP 5, PHP 7, PHP 8)
ftp_pasv — Включает или выключает пассивный режим
Описание
ftp_pasv() включает или выключает пассивный режим. В пассивном режиме передача данных инициируется клиентом, а не сервером. Данный режим может понадобиться в случае, если клиент находится за брандмауэром.
Обратите внимание, что ftp_pasv() может быть вызвана только после успешной авторизации, иначе она завершится с ошибкой.
Список параметров
Возвращаемые значения
Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
8.1.0 | Параметр ftp теперь ожидает экземпляр FTP\Connection ; ранее ожидался ресурс (resource). |
Примеры
Пример #1 Пример использования ftp_pasv()
= ‘somefile.txt’ ;
$remote_file = ‘readme.txt’ ;
User Contributed Notes 8 notes
For some FTP servers, it seems the sequence of passive and other commands matters more than for other FTP servers. Sorry, I don’t know what vendor or version specifically.
If you are still having problems after choosing ftp_pasv() you should refresh the connection through ftp_close() / ftp_connect() after x files and/or y GB have been transfered.
It solved several (random) occurring problems like:
ftp_get(): Opening BINARY mode data connection
ftp_get(): Entering Passive Mode
Hint: fopen() created a file so don’t forget to delete it if an error occurred 😉
Directly from bsd FTP manual pages:
The PASV command requests that the remote server open a port for the data connection and return the address of that port. The remote server listens on that port and the client connects to it.
When using the more traditional PORT command, the client listens on a port and sends that address to the remote server, who connects back to it. Passive mode is useful when using ftp through a gateway router or host that controls the directionality of traffic. (Note that though ftp servers are required to support the PASV command by RFC 1123, some do not.)
I found one place that required passive mode to function properly, but the initial error manifested itself in an odd way:
PHP Warning: ftp_put(): TYPE is now ASCII in on line
PHP Warning: ftp_put(): TYPE is now 8 BIT BINARY in on line
The other symptom is that it was taking a long time, perhaps the 90 seconds that the timeout was set to. No errors occurred upon connect, just when I tried ftp_put().
Once I turned on ftp_pasv() it worked, both in the place where active mode worked, and on the server where active mode wouldn’t work.
PASV: For ftp users behind firewall, the server LISTEN for a connection.
Non-PASV: The client LISTEN for a connection from server.
🚼 Активный FTP и пассивный FTP сравнение и отличие
Вступление
Один из наиболее часто встречающихся вопросов при работе с брандмауэрами и другими проблемами подключения к Интернету – это различие между активным и пассивным FTP (протокол передачи файлов) и как лучше всего поддерживать один или оба из них.
Надеемся, что следующая статья поможет разобраться в путанице, связанной с поддержкой FTP в среде с межсетевым экраном.
Этот пост содержит примеры как активных, так и пассивных сеансов FTP из командной строки.
Эти примеры сессий должны помочь немного прояснить ситуацию.
Они также дают хорошую картину того, что происходит за кулисами во время сеанса FTP. Теперь перейдем к информации по теме…
Основы
FTP является исключительно службой на основе TCP.
Для FTP нет компонента UDP.
FTP является необычной службой, в которой используются два порта: порт данных и порт команды (также известный как порт управления).
Традиционно это порт 21 для командного порта и порт 20 для порта данных.
Однако возникает путаница, когда мы обнаруживаем, что в зависимости от режима порт данных не всегда находится на порте 20.
Активный FTP
В активном режиме FTP клиент подключается от случайного непривилегированного порта (N> 1024) к командному порту FTP-сервера, а именно 21.
Затем клиент начинает прослушивать порт N + 1 и отправляет команду FTP PORT N + 1 на FTP. сервер.
Затем сервер подключится к указанному клиенту порту данных через локальный порт данных, который является портом 20.
С точки зрения серверного брандмауэра, для поддержки активного режима FTP необходимо открыть следующие каналы связи:
При продолжительном соединение все выглядит следующим образом:
На шаге 1 командный порт клиента связывается с командным портом сервера и отправляет команду PORT 1027.
Затем сервер отправляет ACK обратно на командный порт клиента на шаге 2.
На шаге 3 сервер инициирует подключение через свой локальный порт данных к порту данных клиент указал ранее.
Наконец, клиент отправляет ACK обратно, как показано на шаге 4.
Основная проблема с активным режимом FTP на самом деле ложится на клиентскую сторону.
FTP-клиент не устанавливает фактическое соединение с портом данных сервера – он просто сообщает серверу, какой порт он прослушивает, и сервер снова подключается к указанному порту на клиенте.
Со стороны брандмауэра на стороне клиента это внешняя система, инициирующая соединение с внутренним клиентом, что обычно блокируется.
Пример активного FTP
Ниже приведен пример активного сеанса FTP.
Изменены только имена серверов, IP-адреса и имена пользователей.
В этом примере сеанс FTP инициируется от user01 (192.0.0.1), блока Solaris, на котором работает стандартный клиент командной строки FTP, к dest_serv (192.0.0.2), блока Solaris, на котором запущен solaris [TM] 9 ftpd.
Флаг отладки (-d) используется с клиентом FTP, чтобы показать, что происходит за кулисами.
Все, что выделено курсивом, является результатом отладки, который показывает фактические команды FTP, отправляемые на сервер, и ответы, генерируемые этими командами.
Есть несколько интересных вещей, чтобы рассмотреть об этом диалоге.
Обратите внимание, что при вводе команды PORT указывается порт в клиентской (192.0.0.1) системе, а не на сервере.
Мы увидим противоположное поведение, когда будем использовать пассивный FTP.
Пока мы находимся на этой теме, быстрое примечание о формате команды PORT.
Как видно из приведенного ниже примера, он отформатирован как последовательность из шести чисел, разделенных запятыми.
Первые четыре октета являются IP-адресом, а вторые два октета составляют порт, который будет использоваться для подключения к данным.
Чтобы найти действительный порт, умножьте пятый октет на 256, а затем добавьте шестой октет к сумме.
Таким образом, в приведенном ниже примере номер порта ((256 * 188) + 231) или 48359.
Быстрая проверка с помощью netstat должна подтвердить эту информацию.
Пассивный FTP
Чтобы решить проблему с сервером, инициирующим соединение с клиентом, был разработан другой метод для FTP-соединений.
Он известен как пассивный режим, или PASV, после команды, использованной клиентом, чтобы сообщить серверу, что он находится в пассивном режиме.
В пассивном режиме FTP клиент инициирует оба подключения к серверу, решая проблему межсетевых экранов, фильтрующих входящее соединение порта данных с клиентом с сервера.
При открытии FTP-соединения клиент открывает два случайных непривилегированных порта локально (N> 1024 и N + 1).
Первый порт связывается с сервером через порт 21, но вместо того, чтобы затем выполнять команду PORT и разрешить серверу подключиться к своему порту данных, клиент выдаст команду PASV.
В результате сервер открывает случайный непривилегированный порт (P> 1024) и отправляет команду PORT P обратно клиенту.
Затем клиент инициирует соединение от порта N + 1 к порту P на сервере для передачи данных.
С точки зрения брандмауэра на стороне сервера, для поддержки FTP в пассивном режиме необходимо открыть следующие каналы связи:
При подключении FTP-соединение в пассивном режиме выглядит следующим образом:
На шаге 1 клиент связывается с сервером через командный порт и выдает команду PASV.
Затем сервер отвечает на шаге 2 с помощью PORT 2024, сообщая клиенту, какой порт он прослушивает для подключения к данным.
На шаге 3 клиент затем инициирует соединение для передачи данных со своего порта данных на указанный порт данных сервера.
Наконец, сервер отправляет ACK на шаге 4 в порт данных клиента.
Хотя пассивный режим FTP решает многие проблемы на стороне клиента, он открывает целый ряд проблем на стороне сервера.
Самой большой проблемой является необходимость разрешить любое удаленное подключение к портам с высоким номером на сервере.
К счастью, многие FTP-демоны, включая демон Solaris in.ftpd, позволяют администратору указывать диапазон портов, которые будет использовать FTP-сервер. См. Приложение 1 для получения дополнительной информации.
Вторая проблема связана с поддержкой и устранением неполадок клиентов, которые поддерживают (или не поддерживают) пассивный режим.
С огромной популярностью Всемирной паутины, многие люди предпочитают использовать свой веб-браузер в качестве FTP-клиента.
Большинство браузеров поддерживают только пассивный режим при доступе к URL-адресам ftp://. Это может быть как хорошим, так и плохим фактов, в зависимости от того, какие серверы и брандмауэры настроены для поддержки.
Пример пассивного FTP
Ниже приведен пример пассивного сеанса FTP.
Изменены только имена серверов, IP-адреса и имена пользователей.
В этом примере сеанс FTP инициируется от user01 (192.0.0.1), окна Solaris, на котором работает стандартный клиент командной строки FTP, до dest_serv (192.0.0.2), Solaris, работающего под управлением Solaris 9 ftpd.
Флаг отладки (-d) используется с клиентом FTP, чтобы показать, что происходит за кулисами.
Все, что выделено курсивом, является результатом отладки, который показывает фактические команды FTP, отправляемые на сервер, и ответы, генерируемые этими командами.
Нормальный вывод на сервер показан черным, а ввод пользователя – жирным.
Обратите внимание на разницу в команде PORT в этом примере по сравнению с примером активного FTP.
Здесь мы видим, что порт открывается в системе сервера (192.0.0.2), а не на клиенте. См. Обсуждение формата команды PORT выше в разделе «Пример активного FTP».
Резюме
Следующая таблица должна помочь администраторам запомнить, как работает каждый режим FTP:
Краткий обзор плюсов и минусов активного и пассивного FTP также по порядку:
Активный FTP полезен для администратора сервера FTP, но вреден для администратора на стороне клиента.
FTP-сервер пытается подключиться к случайным высоким портам на клиенте, которые почти наверняка будут заблокированы брандмауэром на стороне клиента.
Пассивный FTP полезен для клиента, но вреден для администратора FTP-сервера.
Клиент установит оба соединения с сервером, но одно из них будет со случайным портом с высокой пропускной способностью, который почти наверняка будет заблокирован брандмауэром на стороне сервера.
К счастью, есть некоторый компромисс.
Поскольку администраторам, работающим с FTP-серверами, необходимо сделать свои серверы доступными для наибольшего числа клиентов, им почти наверняка потребуется поддержка пассивного FTP.
Доступность портов высокого уровня на сервере можно минимизировать, указав ограниченный диапазон портов для использования FTP-сервером.
Таким образом, все, кроме этого диапазона портов, может быть защищено на стороне сервера.
Хотя это не устраняет все риски для сервера, оно значительно снижает его. См. Приложение 1 для получения дополнительной информации.
Доступ к FTP-серверу за NAT
Протокол FTP является старейшим сетевым протоколом (создан в 1971 году), но, тем не менее, широко используется по сей день. Важной особенностью протокола является то, что он использует несколько соединений: одно для управляющих команд, остальные для данных. Причем соединений для передачи данных может открываться несколько.
В зависимости от способа установления соединения для передачи данных различают активный и пассивный режимы работы FTP. В активном режиме сервер сам устанавливает соединение передачи данных к клиенту, в пассивном наоборот.
Активный режим
Тут сразу виден недостаток данного метода: для работы в активном режиме клиенту требуется выделенный IP-адрес. Также определенные сложности будут возникать при нахождении клиента за брандмауэром или NAT-ом.
Пассивный режим
Как видим, в пассивном режиме все соединения инициирует клиент и поэтому к нему нет никаких требований, он может находиться за NAT и брандмауэром, а также не иметь выделенного IP-адреса. Поэтому на сегодняшний день основным режимом работы FTP является пассивный.
FTP сервер за NAT
Давайте установим на виртуальную машину ftp-server FTP-сервер vsftpd :
Про настройки подробно рассказывать не буду (подробнее можно прочитать здесь), упомяну только важные для нас:
Сохраняем новые правила, чтобы они применились после перезагрузки:
Активный режим
В реальной ситуации FTP-клиент и маршрутизатор должны иметь белые ip-адреса. Но мы здесь моделируем ситуацию, как будто бы у них белые ip-адреса. Просто потому, что у нас маршртузатор и FTP-клиент находятся в одной сети 192.168.110.0/24 и видят друг друга. Когда FTP-клиент устанавливает управляющее соединение с FTP-сервером — он отправляет пакеты на внешний интерфейс маршрутизатора, на порт 21. А маршрутизатор отправляет эти пакеты внутрь сети 192.168.30.0/24 — на ip-адрес 192.168.30.254 FTP-сервера (DNAT, первое правило).
Вроде все готово для испытаний, файл конфигурации FTP-сервера разрешает использовать только активный режим. Пробуем из сети 192.168.110.0/24 подключиться к FTP-серверу за NAT с виртуальной машины web-server (ip-адрес 192.168.110.12 ).
Пассивный режим
Теперь изменим настройки сервера, чтобы разрешить работу в пассивном режиме:
Пробуем подключиться к серверу
Активный и пассивный режимы FTP
Прежде чем разъяснить разницу между активным и пассивным режимами работы FTP, следует установить, что же такое сам FTP и как он работает. Англоязычная аббревиатура FTP расшифровывается как File Transfer Protocol, что в переводе на русский означает протокол передачи файлов. Он предназначен для установки соединения между клиентом, то есть пользователем, и удаленным сервером.
Протокол FTP устанавливает между клиентом и сервером два типа соединений. Одно из них называется управляющим соединением и предназначено для передачи команд, а второе называется соединением для передачи данных и предназначается для передачи различных файлов на сервер. К первому типу соединения, то есть к управляющему, активный или пассивный режимы работы FTP не имеют никакого отношения. Выбор между этими двумя режимами делается пользователем при установке соединения для передачи данных.
Итак, в чем же принципиальное отличие?
Главное отличие активного и пассивного режимов работы протокола FTP состоит в том, кто из связки клиент-сервер производит подключение для передачи данных, то есть, грубо говоря, кто к кому подключается. Также отличаются порты, на которые производится передача данных. При активном режиме работы, клиент производит управляющее соединение с сервером, а вот подключение для передачи данных производит уже сам сервер. При пассивном режиме работы подключение для передачи данных, равно как и управляющее соединение с сервером инициируется только клиентом. То есть, в активом режиме сервер подключается к клиенту для передачи данных, а в пассивном – клиент к серверу.
Рассмотрим эти режимы более наглядно.
Отличия активного и пассивного режимов FTP
Разберем в видео-формате чем отличаются друг от друга пассивный и активный режимы работы протокола FTP.
Активный режим FTP
Как в активном, так и в пассивном режиме, установка соединения начинается с отправки запроса клиентом на сервер. Сначала устанавливается управляющее соединение. Для этого на клиенте создается временный порт с номером в диапазоне от 1024 до 65535 для установки управляющего соединения, а также порт для передачи данных. В активном режиме все происходит в следующем порядке:
Схематически это можно выразить в следующем виде:
Пассивный режим FTP
В пассивном режиме процедура установки соединения для передачи данных несколько отличается. Действия происходят следующим образом:
Представим это в схеме:
Пассивный режим является более безопасным для клиента. Его рекомендуется использовать, если у вас настроен Firewall. Использование активного режима FTP через Firewall может привести к возникновению ошибок, так как Firewall не позволит серверу подключиться к клиенту. Поэтому рекомендуется пользоваться пассивным режимом FTP для передачи данных во избежание подобных ошибок.
Pasv ftp что это
В этой статье объясняется в чем разница между пассивным и активным режимами. Это показывается на примере vsftpd и ipfw. Даются рекомендации по их настройке и описываются необходимые правила фаервола.
На иностранном языке это называется PORT и PASV mode. FTP-соединение всегда начинается одинаково для пассивного и активного режимов. Клиент устанавливает соединение с произвольного порта на 21 порт сервера и передает логин/пароль.
Дальше, если используется активный режим, то клиент сообщает серверу произвольный порт из диапазона 1024-65535, по которому сервер может подключится и организовать канал передачи данных. Со стороны сервера используется порт 20.
Если выбран пассивный режим, то наоборот сервер сообщает номер произвольного порта, по которому клиент может подключиться для организации канала передачи данных.
# vsftpd работает самостоятельно, без помощи inetd/xinetd в «standalone mode»
listen=YES
# слушаем 21 порт
listen_port=21
# работа в фоновом режиме
background=YES
# приветствие при входе
ftpd_banner=Welcome you to Serra’s FTP Server! Here is allowed only 10 users with 10 connections at the same time. Have a pleasant pastime!
# включаем пассивный режим
pasv_enable=YES
# диапазон портов для пассивного режима
pasv_min_port=40000
pasv_max_port=40500
# максимальное количество клиентов, которые могут быть подключены
max_clients=10
# максимальное количество соединений с одного ip
max_per_ip=10
# запрет анонимных пользователей
anonymous_enable=NO
# Разрешить локальных пользователей из файла /etc/passwd
local_enable=YES
# запираем локальных пользователей в домашнем каталоге после входа
chroot_local_user=YES
# домашние директории, которые указаны в файле /etc/passwd
passwd_chroot_enable=YES
# пользователи указанные в vsftpd.chroot_list не запираются в тюрьму
chroot_list_enable=YES
# отключаем проверку которая вызывает ошибку «vsftpd: refusing to run with writable root inside chroot()»
allow_writeable_chroot=YES
# разрешаем запись
write_enable=YES
# задаём права для файлов, но не каталогов
file_open_mode=0777
# маска на создаваемые локальными пользователями файлы.
local_umask=002
# безопасный каталог, должен быть пустым и без прав записи пользователю ftp
secure_chroot_dir=/var/empty
# включаем запись логов
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
# пользователи из списка vsftpd.user_list блокируются перед запросом пароля
userlist_enable=YES
# разрешаем ативный режим
port_enable=YES
# исходяшие соединения идут с 20 порта
connect_from_port_20=YES
# входящие соединения на 20 порт
ftp_data_port=20
# поддержка древних FTP клиентов
async_abor_enable=YES
# скрываем настоящих владельцев файлов на ftp
hide_ids=YES
Он будет ротироваться при достижении 1 MB и сжиматься.
convert_charset_enable=YES
local_charset=UTF8
remote_charset=WIN1251
add 1050 allow tcp from any to me 20,21, 40000-50000 in via rl1
add 1060 allow tcp from me 20 to any out via rl1