FTP Proxy

Случается так, что за одним внешним IP адресом необходимо разместить несколько Web-серверов. Эта задача без проблем решается средствами nginx. Наш фронтэнд получает HTTP запрос, в котором есть поле Host. В нем содержится домен типа www.example.com. На основании этого поля выбирается uplink для проксирования на бэкэнд, который часто просто виртуальная машина с каким-то веб-приложением.
Часть приложений ты обслуживаешь самостоятельно, другую часть кто-то еще. И часто кто-то еще предпочитает использовать FTP для доступа к файлам сайта. Но что делать если за одним IP нужно разместить несколько FTP-серверов?
Главная проблема в том, что протокол FTP знать не знает о домене, который клиент запрашивает. Но наша задача не анонимный доступ, а по логину и паролю. Следовательно можно выбирать аплинк по логину.

В этом нам поможет FTP-Proxy из SuSE Proxy Suite. Готовый пакет имеется в репозиториях Debian, так что можно установить без лишних хлопот:
apt-get install ftp-proxy
Если на целевой системе нет готового пакета, то можно скачать исходники здесь: ftp://ftp.suse.com/pub/projects/proxy-suite/src

После установки редактируем файл /etc/proxy-suite/ftp-proxy.conf
В нем есть секция [-Global-] с общими настройками и секции вида [username] с настройками для разных логинов.
В простейшем случае наш конфиг будет таким:
[-Global-]
# аплинк по умолчанию
DestinationAddress 192.168.0.2
# порт, который слушает прокси
Port ftp
User nobody
Group nogroup

[user10]
# аплинк для пользователя user10
DestinationAddress 192.168.0.10

[user20]
# аплинк для пользователя user20
DestinationAddress 192.168.0.20

После того, как мы все настроили, необходимо включить автозапуск прокси в файле /etc/default/ftp-proxy:
RUN_DAEMON=yes
И запускаем:
service ftp-proxy restart

Теперь, если клиент обратится к нашему прокси серверу, то его трафик будет перенаправлен на необходимый FTP сервер на основании логина, который он указал при авторизации. Таким образом, за одним IP-адресом спряталось несколько FTP серверов.

FTP Proxy: 1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *