LINUX.ORG.RU
решено ФорумAdmin

Доступ к FTP-серверу, расположенному во внутренней сети

 


0

1

Тестирую сервис Infra.mail.ru, это типа отечественный аналог Amazon Web Services, даже виртуальные машины как в Amazon инстансами называются. IP-адрес машины внутренний, можно настраивать проброс портов.
И вот какая задача возникла. Пытаюсь поднять на инстансе сайт на UMI-CMS, возникла проблема. Техподдержка UMI просит предоставить им FTP-доступ, и вот с этим как раз проблема, с vsftpd у меня ничего не получилось, попробовал поднять proftpd, подключаюсь с клиента, клиент выдаёт это:

Connected to ????.??????????.??? (???.???.???.???).
220 FTP Server ready.
331 Password required for umisupport
230 User umisupport logged in
Remote system type is UNIX.
Using binary mode to transfer files.
227 Entering Passive Mode (192,168,18,84,247,38).
192.168.18.84 - это как раз внутренний адрес сервера. Читал, что у FTP-протокола есть какие-то особенности, из-за которых простой проброс 21 порта не прокатит, нужно ещё какой-то трафик разрешать, а где-то пишут, что FTP-сервер из внутренней сети вообще работать не будет. Что мне делать?

★★★★★

При работе по протоколу FTP между клиентом и сервером устанавливается два соединения – управляющее (по нему идут команды) и соединение передачи данных (по нему передаются файлы). Управляющее соединение одинаково для Активного и Пассивного режима. Клиент инициирует TCP-соединение с динамического порта (1024-65535) к порту номер 21 на FTP-сервере и говорит «Привет! Я хочу подключиться к тебе. Вот мое имя и мой пароль». Дальнейшие действия зависят от того, какой режим FTP (Активный или Пассивный) выбран.

В активном режиме, когда клиент говорит «Привет!» он так же сообщает серверу номер порта (из динамического диапазона 1024-65535) для того, чтобы сервер мог подключиться к клиенту для установки соединения для передачи данных. FTP-сервер подключается к заданному номеру порта клиента используя со своей стороны номер TCP-порта 20 для передачи данных.

В пассивном режиме, после того как клиент сказал «Привет!», сервер сообщает клиенту номер TCP-порта (из динамического диапазона 1024-65535), к которому можно подключиться для установки соединения передачи данных.

Главное отличие между активным режимом FTP и пассивным режимом FTP – это сторона, которая открывает соединение для передачи данных. В активном режиме, клиент должен принять соединение от FTP-сервера. В пассивном режиме, клиент всегда инициирует соединение.

Silerus ★★★★
()

По идее нужно загрузить модуль «nf_conntrack_ftp» и разрешить Related-соединения.

Radjah ★★★★★
()
Ответ на: комментарий от Silerus

Silerus, а какой вывод из этого следует? Это можно вылечить? Если что, порт 20 тоже проброшен, но эффекта никакого. Порт из динамического диапазона каждый раз рандомный, принудительно его задать. чтобы тоже пробросить на роутере никак нельзя?

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

Вариант А - пробросить все скопом, как Radjah - написал, вариант б - поднять впн соединение между сервером и клиентом - там вы уже будите в одной локальной сети

Silerus ★★★★
()
Ответ на: комментарий от sunny1983

тогда открывай для них полный доступ извне (ты же сервер?) Хотя если ты сервер, то поднять у себя openvpn и отдать им настройку клиента - тоже не должно быть проблем

# NAT for active/passive FTP. 192.168.178.21 would be your internal ftp server iptables -t nat -A PREROUTING -p tcp --dport 20 -j DNAT --to 192.168.178.21:20 iptables -t nat -A PREROUTING -p tcp --dport 21 -j DNAT --to 192.168.178.21:21 iptables -t nat -A PREROUTING -p tcp --dport 1024:65535 -j DNAT --to 192.168.178.21:1024-65535 iptables -A FORWARD -s 192.168.178.21 -p tcp --sport 20 -j ACCEPT iptables -A FORWARD -s 192.168.178.21 -p tcp --sport 21 -j ACCEPT iptables -A FORWARD -s 192.168.178.21 -p tcp --sport 1024:65535 -j ACCEPT

# allowing active/passive FTP iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT

примерчик после гугления по первому варианту

Silerus ★★★★
()
Последнее исправление: Silerus (всего исправлений: 1)
Ответ на: комментарий от Silerus

У меня нет доступа к маршрутизатору в обычном понимании этого, потому что маршрутизатор виртуальный, в его настройках есть только проброс tcp, udp, icmp, никаких дополнительных настроек.
Короче, кто имел дело с облачными виртуальными машинами, скажите просто поднять FTP без извратов возможно или нет?

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

ftp без изврата - нет.

Если уж ты поднял proftpd в passive, то ему нужно указать диапазон портов для этого режима и их пробросить как 21-й порт. (это если nf_nat_ftp не работает)

sftp - в данном вопросе решает проблему.

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)

Так, как я вижу, на ЛОРе компетентных людей в вопросе настройки FTP-серверов нет. Но я смог решить проблему без извратов. И сейчас расскажу как:

1. Я снёс proftpd и снова установил vsftpd. Как выяснилось эта программа вполне себе рабочая, только нужно умолчальный конфиг редактировать, главное что нужно сделать, так это добавить в vsftpd.conf директивы userlist_deny=NO и listen=YES, кроме того юзер для ftp-входа должен присутствовать в /etc/vsftpd/user_list и отсутствовать в /etc/vsftpd/ftpusers

2. В настройках виртуального маршрутизатора разрешил все соединения

3. После выполнения пунктов 1 и 2 сервер будет принимать соединения в активном режиме и сбрасывать в пассивном режиме. В результате с ним будут работать клиенты, которые умеют автоматом выбирать активный или пассивном режим и не будут работать те, которые этого не умеют. Но и эту проблему удалось победить с помощью техподдержки Infra.mail.ru, в /etc/vsftpd/vsftpd.conf мне посоветовали добавить директивы:

pasv_enable=YES
pasv_min_port=13000
pasv_max_port=13100
port_enable=YES
pasv_address=<внешний_IP>
И всё заработало.

sunny1983 ★★★★★
() автор топика
Последнее исправление: sunny1983 (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.