Сейчас разложу вам эту вечную тему FTP, активный против пассивного, какой режим лучше/хуже и чем они отличаются.
FTP в двух словах
FTP (File Transfer Protocol) — это динозавр среди протоколов, но до сих пор живёт. Работает он на двух каналах:
- Один для команд — типа "покажи список файлов", "скачай", "загрузи"
- Второй для данных — чтобы реально пересылать файлы
И вот тут начинается веселье: как именно установить второй канал — и есть отличие между активным и пассивным режимом.
Активный режим (Active FTP)
Тут инициатива на стороне сервера. Клиент говорит:
"Привет, я на IP такой-то, порт такой-то, звони туда!"
И сервер такой:
"Окей, ща позвоню" — и делает входящее соединение на указанный клиентом порт.
FTP-сервер подключается к заданному номеру порта клиента используя со своей стороны TCP20, который используется для передачи данных. Проблема: клиент за NAT-ом или в офисе с фаерволом — и серверу туда нельзя позвонить!
Это как если бы ты дал номер телефона, но был в тоннеле без сигнала.
"Ну а как же, я же указал порт?!"
Да, только у NAT'а свои планы. Он не пускает левых гостей. Потому FTP в активном режиме часто обламывается в обычных домашних/корпоративных сетях.
Пассивный режим (Passive FTP)
Тут клиент говорит:
"Слушай, дорогой сервер, давай ты просто откроешь порт, скажешь мне какой — а я сам к тебе подключусь, ладно?"
Сервер отвечает:
"Конечно, вот тебе IP и порт, заходи как домой!"
Клиент подключается сам — и всё хорошо. Никаких входящих соединений на клиент, только исходящие. А NAT и фаерволы такое любят.
Плюс: работает почти везде. Особенно когда клиент за роутером, в корпоративной сети, на ноуте в кафе, в Макдональдсе или на борту МКС.
Простое сравнение на примере
Активный режим — это как если курьер (сервер) хочет вручить тебе посылку и звонит к тебе домой.
Если у тебя консьерж или домофон без кнопки "открыть" — посылка зависнет в лифте.
Пассивный режим — это ты сам едешь на склад (сервер открыл ворота), берёшь коробку и уезжаешь. Никто не ломится к тебе домой — идеально.
Когда и какой режим использовать?
🎯 Используй пассивный, если:
- ты клиент и сидишь за NAT, Wi-Fi, роутером, офисной сетью
- ты не хочешь настраивать фаерволы вручную
- ты хочешь, чтобы "просто работало"
🛡️ Используй активный, если:
- ты сервер в датацентре и клиент — другой сервер (тоже в открытой сети)
- тебе нужно максимально строгий контроль над исходящими соединениями (редко)
- ты любишь боль, конфиги iptables и встречаешь новый день с tcpdump
💡 А если ты админ FTP-сервера?
Тогда:
- Разреши пассивный режим, прописав диапазон портов в конфиге (например, 50000–51000)
- Открой эти порты на фаерволе
Укажи явный внешний IP (если сервер за NAT’ом)
Например, в vsftpd.conf:
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=51000
pasv_address=123.45.67.89
FTP сам по себе — дедушка с палочкой, но ему всё ещё доверяют передачу файлов.
Пассивный режим — почти всегда твой выбор.
Он как бесконтактная доставка: безопасно, удобно, никто не ломится в гости.
НО!
FTP — старый, голый и небезопасный
Простой FTP — это как курьер без удостоверения, который кричит на весь подъезд:
"Здравствуйте, пароль от сервера: admin123, я тут закинул пару файлов!"
Передача идёт в открытом виде. Никакого шифрования. Весь трафик можно подсмотреть с помощью Wireshark.
Вывод: не используем FTP без шифрования в 2025-м, ок?
А что меняется при передаче по FTP, если мы добавим чутка секурности?
FTPS — тот же FTP, но в шубе
Что это:
FTPS = FTP + SSL/TLS.
Он работает точно как обычный FTP, но всё шифруется (как HTTPS).
Как устроен:
- Использует те же команды, что и FTP
- Также использует два канала: командный и для данных
- Просто добавляет TLS-сертификат (например, от Let's Encrypt)
🛠 Работает на тех же портах, плюс добавляет TLS-рукопожатие. Есть два режима:
- Explicit FTPS — клиент говорит "давай по TLS", сервер соглашается.
- Implicit FTPS — TLS сразу, без разговоров. (реже используется)
Важно: FTPS всё ещё использует паспортный контроль с NAT и фаерволами — так же как FTP. Иногда очень капризен, особенно с пассивным режимом, но разница в режимах по сути та же, что и в обычном ftp.
SFTP — вообще не FTP
Вот тут начинается прикол.
SFTP ≠ FTPS
SFTP ≠ FTP с S
SFTP = SSH File Transfer Protocol — вообще другой протокол!
Как устроен:
- Работает через SSH (порт 22)
- Один безопасный зашифрованный канал
- Работает как SCP, но с плюшками: продолжение загрузки, списки файлов, права доступа
Если ты подключаешься к серверу по sftp user@host — ты не используешь FTP вообще. Это чисто SSH-технология.
📦 Отличия по сути:
Что использовать и когда?
✅ SFTP — это твой выбор в 90% случаев:
- Без заморочек с фаерволами
- Только один порт
- Уже работает на всех серверах с SSH (то есть почти везде)
- Прост в автоматизации и скриптах
✅ FTPS — если у тебя FTP-сервер, но нужна безопасность:
- Клиенты на Windows без SSH (всякие старые бухгалтерии, да)
- Интеграция с промышленными штуками, которые понимают только FTP
❌ FTP без шифрования — можно использовать только в музее и в локалке дома на даче.
Если вы дочитали до сюда, а я что-то забыл, пишите в комментах ниже!