Существуют ли рабочие ftp прокси сервера?

Я хочу между ftp сервером и клиентом разместить proxy хост, чтобы клиент не знал реальный адрес ftp сервера.

Протокол ftp с его пассивным режимом не дает просто так проксировать трафик. Нужен какой-то специальный ftp-прокси сервер, который будет перехватывать пакеты ftp-сервера и подменять в них адрес и порты для пассивного соединения.

Есть ли такой ftp прокси сервер?

У меня система debian, я пробовал установить и запустить ftp-proxy, но он не работает вообще. Всегда пишет:

Dec 22 04:32:42 host.local systemd[1]: Starting LSB: Launch ftp-proxy...
Dec 22 04:32:42 host.local ftp-proxy[6930]: Starting FTP-Proxy: ftp-proxydisabled. ... (warning).
Dec 22 04:32:42 host.local systemd[1]: Started LSB: Launch ftp-proxy.

Ответы (3 шт):

Автор решения: Алексей Ковальчук

Я для себя решил проблему так: проксирование трафика сделал через nat, а, чтобы пассивные соединения работали нормально, в конфиге ftp сервера proftpd указал параметр MasqueradeAddress.

Полная инструкция:

Подключаемся на хост, где будет расположен ftp сервер, устанавливаем ftp сервер proftpd:

apt install -y proftpd

Создаем конфиг /etc/proftpd/conf.d/local.conf с таким содержимым:

PassivePorts                  7010 7019
MasqueradeAddress             айпи_прокси_хоста

Где 7010 7019 - диапазон портов для пассивного режима, а айпи_прокси_хоста нужно заменить на айпи прокси хоста, можно использовать доменное имя.

Перезагружаем сервис proftpd:

service proftpd restart

Подключаемся на прокси хост и создаем правила для проксирования:

iptables -t nat -A PREROUTING -p tcp --dport 2121 -j DNAT --to-destination айпи_ftp_сервера:21
iptables -t nat -A PREROUTING -p tcp --dport 7010:7019 -j DNAT --to-destination айпи_ftp_сервера:7010-7019
iptables -t nat -A POSTROUTING -p tcp --dport 7010:7019 -j SNAT --to-source айпи_прокси_хоста
iptables -t nat -A POSTROUTING -p tcp --dport 21 -j SNAT --to-source айпи_прокси_хоста

Где айпи_ftp_сервера нужно заменить на айпи хоста с ftp сервером, а айпи_прокси_хоста нужно заменить на айпи прокси хоста.

Готово, так проксирование будет работать. Можно будет подключиться через прокси хост по айпи_прокси_хоста:2121 и соединение будет перенаправлено на айпи_ftp_сервера:21. Порты пассивного режима так же будут корректно проксироваться.

Адрес прокси хоста из параметра MasqueradeAddress будет отправляться ftp сервером для установки соединений пассивного режима, что полностью скроет реальный айпи ftp сервера от клиента.

Но у этого способа есть 2 минуса:

  1. С такой конфигурацией будет невозможно подключиться к ftp серверу напрямую. Подключение возможно будет только через прокси хост.
  2. Если прокси хост хочется использовать для проксирования для нескольких ftp серверов, придется для каждого из ftp серверов создавать уникальный диапазон портов для пассивного режима, чтобы они не пересекались в iptables nat правилах.

С ftp сервером vsftp тоже можно сделать так, там имеется настройка pasv_address, которая является альтернативой настройки MasqueradeAddress из proftpd.

→ Ссылка
Автор решения: Slavick Werewolf

Не хочешь попробовать Squid? Цитирую Вики программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP, FTP, Gopher и (в случае соответствующих настроек) HTTPS. В настройках прописываешь что то вроде: acl Safe_ports port 21 # ftp acl CONNECT method CONNECT http_access deny !Safe_ports acl ftp proto FTP http_access allow ftp

Я хочу между ftp сервером и клиентом разместить proxy хост, чтобы клиент не знал реальный адрес ftp сервера.

Смотри справку по настройке Squid

→ Ссылка
Автор решения: none_nfg

Модуль для proftpd, позволяющий ему работать в proxy mode.

→ Ссылка