Какой режим более безопасен: активный или пассивный?

Какой режим более безопасен: активный или пассивный?

Я исследовал типы FTP-режимов: активный и пассивный, и меня немного смущают некоторые вопросы, связанные с моим текущим сценарием.

Сценарий: У меня есть устройства Android в качестве клиентов, которые будут использоваться организацией, и эта организация очень обеспокоена безопасностью своих серверов, данных на них или чего-либо еще. Хорошим примером является банковский сервер.

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

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

Активный режим: Насколько я понимаю, я думаю, что мне следует использовать активный режим, так как он решает организационные проблемы, связанные с открытием нескольких портов на сервере, поскольку клиентское устройство Android будет инициировать как командное, так и соединение с данными. Но с другой стороны, сможет ли сервер отправить или открыть канал данных для отправки 1000-1500 устройств с одного порта в активном режиме? Не выйдет ли это из строя?

Пассивный режим: Если я думаю о пассивном режиме, то нам следует рассмотреть вопрос об открытии нескольких портов в организации с высокими требованиями к безопасности. И в худшем случае, сколько портов нам следует открыть для пассивного режима для 1000-1500 устройств Android. Сценарий загрузки файлов упомянут выше.

решение1

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

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

Поскольку ваш вопрос связан с безопасностью, я копну немного глубже: TCP-соединение «открывается» клиентом, отправляющим TCP SYN на сервер. Эти SYN обычно являются предметом правил брандмауэра. Пример: разрешить <ALL_IPS_IN_THE_INTERNET> подключаться к <MY_FTP_SERVER> на порту 21.

Активный режим FTP — это когда клиент открывает управляющее соединение и сообщает серверу, к какому IP-адресу и ПОРТУ сервер должен открыть соединение для передачи данных.

Пассивный режим FTP — это когда клиент открывает управляющее соединение, а сервер сообщает клиенту, к какому IP-адресу и ПОРТУ клиент должен открыть соединение для передачи данных.

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

Решение этой проблемы — Deep Packet Inspection. Маршрутизатор распознает, что контрольное соединение идет на порт 21, поэтому он проверит соединение, и когда клиент сообщит серверу, на каком порту он должен открыть соединение данных, маршрутизатор добавит временную переадресацию порта для этого порта для пакетов с ftp-сервера. Маршрутизатор отключит переадресацию порта, когда контрольное соединение будет закрыто.

Это здорово и хорошо, пока вас не волнует безопасность - то есть: ЭТО ПЛОХО. Всегда используйте шифрование при аутентификации или передаче конфиденциальных данных.

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

Эту проблему решает пассивный режим FTP, поскольку оба соединения открываются клиентом.

Но это создает другую проблему — не для клиента, а для бедного администратора брандмауэра сервера. Поскольку порт, к которому клиент подключается в пассивном режиме, является несколько случайным, результирующее правило брандмауэра выглядит так: Разрешить <ALL_IPS_IN_THE_INTERNET> подключаться к <MY_FTP_SERVER> на порту 21 и портах 1024-65535. Если у вас есть приличный демон сервера ftp, вы можете настроить диапазон портов, используемых для подключений к данным, что сделает брандмауэр немного лучше: Разрешить <ALL_IPS_IN_THE_INTERNET> подключаться к <MY_FTP_SERVER> на порту 21 и портах 20000-21500 — это даст вам 1500 одновременных подключений к данным.

Вы можете это сделать, но я бы не рекомендовал этого делать. Есть лучшая альтернатива FTP: HTTP.

  • HTTP не использует соединения управления и передачи данных, что является благом, не имеющим реальных недостатков.
  • HTTP хорошо поддерживается устройствами безопасности / брандмауэрами / брандмауэрами веб-приложений / ... - эти продукты могут даже использовать посредника для SSL-подключений своих клиентов и выполнять фильтрацию контента по HTTPS.
  • Большинство HTTP-серверов можно настроить для просмотра списков каталогов сервера.
  • Все HTTP-серверы поддерживают загрузку, большинство из них даже возобновляют ее.
  • Библиотека HTTP-клиента уже доступна на устройствах Android и iPhone.

Поэтому я бы реализовал клиент следующим образом:

  1. Получить список каталогов URL-адресов, настроенных для отображения списка всех файлов, доступных для загрузки
  2. Загрузить файлы

HTTP даже поддерживает загрузку и возобновление неудачной загрузки.

Надеюсь, мне удалось успешно представить здесь HTTP, потому что FTP — это зло!

EDIT: Я добавляю ссылку на хороший пост, отображающий максимальное количество подключений в режиме PASV для vsftpd:https://serverfault.com/questions/563582/connections-number-of-vsftp-in-passive-mode

Связанный контент