FTP (File Transfer Protocol) работает в двух режимах передачи данных: активном (Active Mode, PORT) и пассивном (Passive Mode, PASV). Различие — в том, кто инициирует соединение для передачи данных. FTP использует два TCP-соединения: командный канал (порт 21) и канал данных (переменный порт). Понимание разницы между режимами критично для корректной настройки файрволов и NAT на серверах.
Как работает активный режим FTP
В активном режиме (Active Mode, команда PORT):
- Клиент подключается к серверу на порт 21 (командный канал)
- Клиент отправляет команду PORT с указанием своего IP и порта для данных:
PORT 192,168,1,100,12,34(IP 192.168.1.100, порт 12*256+34=3106) - Сервер устанавливает соединение с клиентом на указанный порт
- Через это соединение передаются данные (LIST, RETR, STOR)
Проблема активного режима: при клиенте за NAT или файрволом сервер пытается подключиться к внутреннему IP (например, 192.168.1.100), который недоступен из интернета. Файрвол блокирует входящее соединение от сервера — передача данных не работает.
Пассивный режим (PASV) — решение
В пассивном режиме (Passive Mode, команда PASV):
- Клиент подключается к командному каналу (порт 21)
- Клиент отправляет команду PASV
- Сервер возвращает свой IP и порт для данных:
227 Entering Passive Mode (1,2,3,4,100,20) - Клиент подключается к серверу на указанный порт — нет входящих соединений
Пассивный режим — стандарт для большинства современных FTP-клиентов и браузеров. Конфигурация PASV на сервере (vsftpd):
pasv_enable=YES
pasv_min_port=10090
pasv_max_port=10100
pasv_address=203.0.113.1 # внешний IP сервера
История
FTP стандартизирован в RFC 959 (1985). Активный режим был первоначальным стандартом — в 1985 году NAT и персональные файрволы отсутствовали. С ростом интернета и повсеместным внедрением NAT в 1990-х активный режим стал создавать проблемы. Пассивный режим PASV добавлен в RFC 1123 (1989). В 2000-х SFTP (SSH File Transfer Protocol) начал вытеснять FTP как более безопасная альтернатива — один порт вместо двух и шифрование. RFC 2428 (1998) добавил EPSV для IPv6.
FTP vs SFTP vs FTPS
| Протокол | Шифрование | Порты | Через NAT |
|---|---|---|---|
| FTP Active | Нет | 21 + динамический | Проблемы |
| FTP Passive | Нет | 21 + диапазон | Работает |
| FTPS (явный) | TLS | 21 + PASV | Работает |
| SFTP | SSH | 22 (только один) | Работает |
На что обращать внимание
Для VPS-серверов в 2024 году FTP рекомендуется заменять на SFTP или rsync по SSH — шифрование трафика и единственный порт без дополнительных настроек файрвола. Если FTP обязателен (legacy-системы, хостинг-панели), используйте только FTPS или SFTP, закройте порт 21 от публичного интернета через iptables/nftables, ограничив доступ IP-адресами клиентов. FTP в открытом виде передаёт пароль открытым текстом — прослушивание сети компрометирует учётные данные мгновенно.
FTPS vs SFTP: что выбрать
SFTP через SSH (порт 22) — предпочтительный выбор для большинства задач: один порт, шифрование по умолчанию, работает через NAT без дополнительных настроек. FTPS — для совместимости со старыми системами, требующими именно FTP-протокол с шифрованием. FTP без шифрования (порт 21) — использовать только в изолированных внутренних сетях, никогда через интернет.
FTPS vs SFTP — детали отличий
Несмотря на похожие названия, FTPS и SFTP — принципиально разные протоколы:
- FTPS (FTP over TLS) — расширение FTP с TLS-шифрованием. Сохраняет двухканальную архитектуру FTP (порт 21 + PASV-диапазон), добавляя шифрование командного и data-каналов. Бывает явным (STARTTLS на порту 21) и неявным (порт 990).
- SFTP (SSH File Transfer Protocol) — отдельный протокол поверх SSH (порт 22). Один канал, полное шифрование, никаких проблем с NAT. Поддерживается WinSCP, FileZilla, rsync.
Выбор: SFTP предпочтительнее в 99% случаев. FTPS используется только при интеграции с legacy-системами, требующими именно FTP-совместимого протокола.