У меня есть несколько основных вопросов о FTP с межсетевыми экранами и NAT, надеюсь, кто-нибудь мне поможет :)
Я разделил их по разным сценариям:
Активный FTP без NAT
Настроить:
Сервер 1.2.3.4, порты по умолчанию; Клиент 1.2.3.5, порты: 3141 (cmd), 3142 (данные)
Клиент: 3141 подключается к серверу: 20
Сервер: 20 ответов на Клиент: 3141
Сервер: 21 подключается к клиенту: 3142
Как это обычно решается на практике? Я могу думать о следующих возможностях:
Во всех этих решениях я предполагал, что клиент всегда будет использовать два последовательных порта - правда ли это?
Активный FTP с NAT
Настроить:
Сервер 1.2.3.4 порты по умолчанию; Клиент 192.168.0.2, порты 3141, 3142; Маршрутизатор, 1.2.3.5 и 192.168.0.1
Клиент: 3141 подключается к 1.2.3.4:20 через 192.168.0.1
Сервер: 20 ответов на 1.2.3.5:ARBITRARY - доставляется на 192.168.0.2:3141, так как есть SNAT
Сервер: 21 подключается к 1.2.3.5:(ARBITRARY+1) - откуда роутер знает, кому принадлежит этот пакет?
Пассивный FTP с NAT
Сервер находится за маршрутизатором - откуда маршрутизатор знает, что пакет, полученный на произвольный порт, предназначен для FTP-сервера? (и, следовательно, как маршрутизатор знает, что этот пакет не следует отбрасывать)
И почему пассивный FTP использует произвольный порт на сайте сервера для передачи данных? Почему не 21 порт?
Надеюсь, вы понимаете мои вопросы и мне кто-нибудь поможет :)
Спасибо
В абсолютно лучший совет, который я могу вам дать про FTP и NAT на практике есть Просто не сделай это.
Используйте современную альтернативу, например SFTP что повышает безопасность соединения (отправка вашего пароля в виде открытого текста в наши дни обычно считается плохой вещью), а также не вызывает беспорядочный танец портов, как это делает FTP. Таким образом, вам не придется беспокоиться о тайнах работы FTP.
Чтобы ответить на ваши конкретные вопросы, вам нужно будет прочитать FTP RFC.
Вы, вероятно, также захотите прочитать FTP с поддержкой межсетевого экрана, и Большой список соображений безопасности, если вы собираетесь использовать FTP.
Если вы спрашиваете из интеллектуального любопытства, этих ссылок должно хватить.
Если после прочтения RFC у вас все еще есть конкретные вопросы по реализации, связанные с решением актуальной практической проблемы, пожалуйста, задавайте новые вопросы с конкретными подробностями.