← Cloudflare Spectrum / spectrum / about
FTP
Включение Spectrum для FTP не так просто из-за особенностей реализации протокола. В этом руководстве рассматриваются тонкости работы FTP и условия, при которых можно включить Spectrum для вашего FTP-сервиса.
Как работает FTP
FTP использует два разных сокета: один для передачи команд, другой для передачи данных. Управляющий сокет отвечает за вход пользователей в систему и отправку команд, а сокет данных используется для передачи списков каталогов и файлов.
Клиент и сервер могут установить сокет для передачи данных двумя способами: активным и пассивным. В активном режиме сервер подключается back клиенту на указанный им порт, что может создавать проблемы, если клиент находится за NAT. Альтернативой служит пассивный режим, при котором сервер открывает дополнительный порт, к которому затем подключается клиент. Обзор активного и пассивного режимов FTP см. в Active FTP vs. Passive FTP, a Definitive Explanation ↗.
В пассивном режиме сервер FTP сообщает клиенту порт, к которому нужно подключиться: это происходит через управляющий сокет с помощью команды PASV. По умолчанию сервер FTP отвечает IP-адресом, на котором он ожидает подключения. Такой сценарий нормально работает для серверов, находящихся непосредственно на публичном IP-адресе, но создает проблемы, если сервер находится за NAT, брандмауэром или Cloudflare Spectrum.
Как вариант, более современное серверное ПО FTP поддерживает Расширения FTP ↗, которое вводит команду EPSV, не содержащую IP адрес, на который должен подключаться клиент. Вместо этого клиент подключается к тому же IP адресу, к которому он подключался для канала управления.
Что работает, а что нет
Spectrum может защищать серверы, обслуживающие FTP-трафик, в только в пассивном режиме. Активный режим не поддерживается, поскольку сервер источника видит в качестве клиента IP адрес Spectrum, а не настоящий IP адрес клиента. Когда клиент отправляет команду PORT со своим IP адресом, сервер FTP отклоняет соединение, так как эти два адреса не совпадают.
Пассивный режим в сочетании с EPSV работает без дополнительной настройки на стороне источника. Учтите, что для этого клиент также должен поддерживать EPSV. Традиционный пассивный режим с PASV возможен при минимальной настройке на стороне источника (см. ниже раздел «Защита FTP-сервера с помощью Spectrum»)
Защита FTP-сервера с помощью Spectrum
Чтобы защитить FTP-сервер с помощью Spectrum, необходимо создать набор приложений Spectrum, указывающих на источник, а также выполнить определённую настройку на самом FTP-сервере.
Защита управляющего порта
Управляющий канал по умолчанию работает на порту 21, и для защиты этой части FTP-сервера не требуется ничего особенного. В примере ниже замените 198.51.100.1 на IP-адрес исходного сервера.
Эта конфигурация проксирует входящие соединения на источник. Однако если клиенты отправляют команду PASV, для соединения передачи данных они всё равно получат настоящий IP-адрес источника. Это нежелательно, поскольку в этом случае IP-адрес источника раскрывается клиенту вместо того, чтобы оставаться скрытым за Spectrum. Как этого избежать, описано в разделах ниже.
Защита портов данных
Большинство серверов FTP позволяют настроить диапазон портов, которые сервер будет использовать для открытия соединений передачи данных. Рекомендуется указывать диапазон портов, чтобы случайно не открыть доступ к другим портам сервера. Для каждого порта в этом диапазоне создайте соответствующее приложение Spectrum, сопоставленное с этим портом.
Кроме того, FTP-сервер необходимо настроить так, чтобы он предоставлял правильный IP-адрес при получении от клиента команды PASV. Этот IP-адрес должен совпадать с IP-адресом приложения Spectrum.
Некоторые FTP-серверы также поддерживают динамическое разрешение имен хостов. В этом случае рекомендуется использовать URL-адрес приложения Spectrum вместо IP-адреса.
Пример конфигурации для vsftpd ↗:
pasv_min_port=20000 pasv_max_port=20020 pasv_enable=YES pasv_address=ftp.example.com pasv_addr_resolve=YES pasv_promiscuous=YES
Инструкции по Spectrum FTPS (ProFTPD)
Чтобы использовать Spectrum TCP для проксирования и защиты FTPS, в частности ProFTPD, рекомендуется следующая примерная конфигурация:
- Control Port: порт 21
- Data Ports: диапазоны портов 50000-50500
На стороне сервера ProFTPD используйте следующий пример конфигурации:
MasqueradeAddress:www.example.comAllowForeignAddress: вы можете использовать опциюonчтобы разрешить все IP адреса, но рекомендуется разрешать только IP-адрес Cloudflare.PassivePorts:50000-50500
Подробнее см. в Документация ProFTPD ↗.
SFTP
В отличие от FTP и FTPS, для включения Spectrum в SFTP дополнительная настройка не требуется. При настройке приложения Spectrum для SSH выберите порт 22 и протокол TCP.
Microsoft Windows IIS FTP
См. Документация Microsoft Windows IIS ↗ чтобы настроить статический диапазон портов данных и внешний IP адрес, соответствующий вашему приложению Spectrum.
Кроме того, IIS требует, чтобы исходный IP-адрес совпадал и для FTP-соединения управления, и для соединения передачи данных. Однако при использовании Spectrum это условие может не соблюдаться, поскольку оба соединения часто завершаются на разных серверах с собственными уникальными исходящими IP-адресами. Чтобы обеспечить корректную работу, также настройте dataChannelSecurity/matchClientAddressForPasv = false. См. Microsoft Windows IIS FTP Official Guide ↗ для получения дополнительных сведений.