🚼 Активный FTP и пассивный FTP сравнение и отличие |

🚼 Активный 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 необходимо открыть следующие каналы связи:

  • Порт FTP-сервера 21 отовсюду (Клиент инициирует соединение)
    Порт 21 сервера FTP для портов> 1024 (сервер отвечает на порт управления клиента)
  • Порт 20 сервера FTP для портов> 1024 (сервер инициирует подключение данных к порту данных клиента)
  • Порт 20 сервера FTP от портов> 1024 (Клиент отправляет ACK на порт данных сервера)

При продолжительном соединение все выглядит следующим образом:

  • С клиентского порта 1026 (Cmd) на серверный порт 21 (Cmd)
  • С порта сервера 21 (Cmd) на порт клиента 1026 (Cmd)
  • С порта сервера 20 (данные) на порт клиента 1027 (данные)
  • С клиентского порта 1027 (данные) на серверный порт 20 (данные)

На шаге 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 -d dest_serv
Connected to dest_serv.
220 dest_serv FTP server ready.
Name (dest_serv:boqueron): root
---> USER root
331 Password required for root.
Password:
---> PASS XXXX
230 User root logged in.
---> SYST
215 UNIX Type: L8 Version: SUNOS
Remote system type is UNIX.
---> TYPE I
200 Type set to I.
Using binary mode to transfer files.
ftp> ls
---> PORT 192,0,0,1,188,231
200 PORT command successful.
---> TYPE A
200 Type set to A.
---> NLST
150 Opening ASCII mode data connection for file list.
TT_DB
bin
(...)
var
vol
xfn
226 Transfer complete.
191 bytes received in 0.03 seconds (6.16 Kbytes/s)
---> TYPE I
200 Type set to I.
ftp> quit
---> QUIT
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 599 bytes in 1 transfers.
221-Thank you for using the FTP service on dest_serv.
221 Goodbye.
# netstat -a | grep 48359
dest_serv.ftp-data       user01.48359 33580      0 49640      0 TIME_WAIT

Пассивный FTP

Чтобы решить проблему с сервером, инициирующим соединение с клиентом, был разработан другой метод для FTP-соединений.

Он известен как пассивный режим, или PASV, после команды, использованной клиентом, чтобы сообщить серверу, что он находится в пассивном режиме.

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

При открытии FTP-соединения клиент открывает два случайных непривилегированных порта локально (N> 1024 и N + 1).

Первый порт связывается с сервером через порт 21, но вместо того, чтобы затем выполнять команду PORT и разрешить серверу подключиться к своему порту данных, клиент выдаст команду PASV.

В результате сервер открывает случайный непривилегированный порт (P> 1024) и отправляет команду PORT P обратно клиенту.

Затем клиент инициирует соединение от порта N + 1 к порту P на сервере для передачи данных.

С точки зрения брандмауэра на стороне сервера, для поддержки FTP в пассивном режиме необходимо открыть следующие каналы связи:

  • Порт FTP-сервера 21 отовсюду (Клиент инициирует соединение)
  • Порт 21 сервера FTP для портов> 1024 (сервер отвечает на порт управления клиента)
  • Порты FTP-сервера> 1024 отовсюду (Клиент инициирует подключение данных к произвольному порту, указанному сервером)
  • Порты FTP-сервера> 1024 для удаленных портов> 1024 (Сервер отправляет ACK (и данные) на порт данных клиента)

При подключении FTP-соединение в пассивном режиме выглядит следующим образом:

  • С клиентского порта 1026 (Cmd) на серверный порт 21 (Cmd)
  • С порта сервера 21 (Cmd) на порт клиента 1026 (Cmd)
  • С клиентского порта 1027 (данные) на серверный порт 2024
  • С порта сервера 2024 (Cmd) на порт клиента 1027 (данные)

На шаге 1 клиент связывается с сервером через командный порт и выдает команду PASV.

Затем сервер отвечает на шаге 2 с помощью PORT 2024, сообщая клиенту, какой порт он прослушивает для подключения к данным.

На шаге 3 клиент затем инициирует соединение для передачи данных со своего порта данных на указанный порт данных сервера.

Наконец, сервер отправляет ACK на шаге 4 в порт данных клиента.

Хотя пассивный режим FTP решает многие проблемы на стороне клиента, он открывает целый ряд проблем на стороне сервера.

Самой большой проблемой является необходимость разрешить любое удаленное подключение к портам с высоким номером на сервере.

К счастью, многие FTP-демоны, включая демон Solaris in.ftpd, позволяют администратору указывать диапазон портов, которые будет использовать FTP-сервер. См. Приложение 1 для получения дополнительной информации.

Вторая проблема связана с поддержкой и устранением неполадок клиентов, которые поддерживают (или не поддерживают) пассивный режим.

Например, утилита FTP командной строки, поставляемая с демоном Solaris ftp, поддерживает пассивный режим начиная с Solaris 9 (начиная с sccs v1.20). Посмотрите справочные страницы (in.ftpd), опция -p.

С огромной популярностью Всемирной паутины, многие люди предпочитают использовать свой веб-браузер в качестве 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 -d dest_serv
Connected to dest_serv.
220 dest_serv FTP server ready.
Name (dest_serv:boqueron): root
---> USER root
331 Password required for root.
Password:
---> PASS XXXX
230 User root logged in.
---> SYST
215 UNIX Type: L8 Version: SUNOS
Remote system type is UNIX.
---> TYPE I
200 Type set to I.
Using binary mode to transfer files.
ftp> passive
Passive mode on.
ftp> ls
---> PASV
227 Entering Passive Mode (192,0,0,2,7,176)
---> TYPE A
200 Type set to A.
---> NLST
150 Opening ASCII mode data connection for file list.
TT_DB
bin
cdrom
(...)
vol
xfn
226 Transfer complete.
191 bytes received in 0.027 seconds (7.04 Kbytes/s)
---> TYPE I
200 Type set to I.
ftp> quit
---> QUIT
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 599 bytes in 1 transfers.
221-Thank you for using the FTP service on dest_serv.
221 Goodbye.

Резюме

Следующая таблица должна помочь администраторам запомнить, как работает каждый режим FTP:

Активный FTP : 
команда : client >1024 -> server 21 
данные :    client >1024 <- server 20 
Пассивный FTP : 
команда : client >1024 -> server 21 
данные :    client >1024 -> server >1024

Краткий обзор плюсов и минусов активного и пассивного FTP также по порядку:

Активный FTP полезен для администратора сервера FTP, но вреден для администратора на стороне клиента.

FTP-сервер пытается подключиться к случайным высоким портам на клиенте, которые почти наверняка будут заблокированы брандмауэром на стороне клиента.

Пассивный FTP полезен для клиента, но вреден для администратора FTP-сервера.

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

К счастью, есть некоторый компромисс.

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

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

Таким образом, все, кроме этого диапазона портов, может быть защищено на стороне сервера.

Хотя это не устраняет все риски для сервера, оно значительно снижает его. См. Приложение 1 для получения дополнительной информации.

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий