Попытка подключиться к vsftpd, не удалось получить список каталогов

Что-то здесь действительно не работает. У меня есть следующая ошибка при использовании FileZilla для подключения к удаленной машине, работающей vsftpd:

Command:    LIST
Error:  Connection timed out
Error:  Failed to retrieve directory listing

Я пытаюсь настроить службы FTP на 3 компьютерах за домашним брандмауэром интернет-провайдера. Все они являются Ubuntu 12.04 Server LTS, и я не могу использовать порт 21 извне на удаленном сайте.

Ну, ладно, признаюсь, это ограничение накладывает я сам. Я просто хотел звучать так, будто я работаю в настоящей компании. В любом случае, только 1 из 3 систем могла быть назначена 21, так что это все равно будет проблемой.

Я пробовал решения для добавления строк "pasv _...", но я все еще не могу пройти этап подключения LIST.

Итак, если это не удалось, в чем может быть проблема?

На этом сайте я прочитал, что мне нужно переадресовать порты 20 и 21. Сейчас у удаленных сайтов есть порты, такие как 10000, 11000, 12000, которые перенаправляются на внутренний порт 21 в каждой из систем. Должен ли я переслать несколько дополнительных портов на 20? это не имеет смысла, потому что этот порт даже не открыт, vsftpd только слушает 21.

Все, что я хочу, это для успешного соединения ftp через эти перенаправленные порты, я расстроен, потому что я успешно переадресован для таких служб, как SSH, apache2 и т. Д., И я не понимаю, что здесь сломано.

спасибо Джорен за исправление моего форматирования!


РЕДАКТИРОВАТЬ: я возился с моим тестированием VPS, который напрямую подключен к Интернету, я установил vsftpd, просто чтобы посмотреть, что происходит, и вывод 'netstat -tuna' показывает, что успешное соединение с моим клиентом filezilla выглядит так:

tcp        0      0 vps.vps.vps.vps:21       fi.le.zil.la:54288      ESTABLISHED
tcp        0      0 vps.vps.vps.vps:46403    fi.le.zil.la:54289      TIME_WAIT

Примечание: FTP-сервер на моем VPS также сначала не работал из-за совершенно не связанной проблемы, связанной с виртуализированными средами ("500 OOPS: priv_sock_get_cmd"). Читайте: я начинаю видеть, что vsftpd в Ubuntu не работает "из коробки", как apache2 и sshd, для любых разочарованных начинающих системных администраторов, не думайте, что вы глупы, если это не так работает первым делом...

У моего тестируемого VPS нет брандмауэра, поэтому все порты напрямую доступны для доступа демону FTP. После выполнения этого теста я вижу, что возможно, что это вторичное соединение блокируется на удаленном сайте, где у меня возникают проблемы (случайные порты, такие как 46403).

По крайней мере, теперь я подтвердил, что с моим Filezilla нет проблем с NAT, потому что filezilla явно открывает случайные порты и общается с моим VPS.

Единственное, что не имеет смысла, это то, что config 'connect_from_port_20=YES' установлен в моей конфигурации VPS FTP, но я не вижу никаких соединений, используя порт 20!!! Вот почему я даже не знаю, нужно ли перенаправлять этот порт за брандмауэр.

Один из моих недостатков в знаниях - я даже не знаю, что делает порт 20, и я не могу учиться на опыте, потому что я никогда не видел признаков того, что порт когда-либо использовался из-за подключения, загрузки или выгрузки.


Хорошо, я обнаружил некоторые проблемы (явно больше, чем одна вещь не так) - Это связано с переадресацией портов.

Подозреваю оригинальную проблему (перед настройкой vsftpd.conf)

  1. Filezilla изначально подключается к удаленному порту 10000, ==> идет на 21 на внутреннем FTP-сервере (хорошо)
  2. FTP-сервер открывает случайный порт (НЕ 20), как 45678, но у маршрутизатора, очевидно, нет правила для этого случайно назначенного порта. Он отправляет сообщение о том, что filezilla также подключается к 45678.
  3. Клиент Filezilla открывает собственный порт на моем конце за NAT(хорошо)
  4. Filezilla отправляет запрос на соединение 45678, но удаленный маршрутизатор не принимает соединение, поскольку для этого порта нет правила переадресации.

Теперь проблема (ы), которые я создал:

pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10000
  1. Filezilla подключается к удаленному порту 10000, ==> идет на 21 на внутреннем FTP-сервере (хорошо)
  2. FTP-сервер открывает единственный порт, который он может, 10000, [глупый момент], потому что у меня в голове этот порт связан с этой системой. Но 10000 - это фактически аналог стороны WAN для 21 в этой системе. Сервер отправляет сообщение для FileZilla для подключения к 10000 и прослушивает внутренне на 10000
  3. Клиент Filezilla открывает свой собственный случайный порт на моем конце (хорошо)
  4. Filezilla пробует вторичное соединение на порту 10000, удаленный маршрутизатор снова отклоняет его на порт 21, где его следует игнорировать или потерять, в то время как FTP-сервер ожидает подключения к внутреннему порту 10000, которое никогда не приходит. (потерпеть поражение)

Вторая проблема, которую я создал: я пытался связать порт 21 на этот раз, но я думаю, что испортил filezilla.

pasv_enable=YES
pasv_min_port=21
pasv_max_port=21
  1. Filezilla подключается к удаленному порту 10000, ==> идет на 21 на внутреннем FTP-сервере (хорошо)
  2. FTP-сервер открывает порт 21 (или, может быть, отказывает, потому что 21 уже используется), если это удалось, он отправил сообщение для filezilla для подключения к порту 21.
  3. Клиент Filezilla открывает свой собственный случайный порт на моем конце (хорошо)
  4. Filezilla отправляет запрос на LIST на 21, который маршрутизатор не собирается принимать...(ошибка)

Вывод: до тех пор, пока порт изменяется маршрутизатором, FTP-сервер никогда не сможет сообщить клиенту о подключении к нужному порту. Если вы попытаетесь использовать внутренний порт, клиент будет работать против маршрутизатора. Если вы попытаетесь указать внешний порт, маршрутизатор отклонит входящее соединение на другой номер, который сервер не ожидал.


Я опробую решение и сообщу здесь результаты.

Я думаю, поскольку протокол FTP-сервера сообщает клиенту, к какому порту подключаться, это вторичное соединение ДОЛЖНО иметь тот же номер внешнего порта, что и внутренний.

Я назову это "вторичным соединением", и я думаю, что оно как-то связано с портом 20, что я не понимаю.

Итак, я свяжусь с удаленным сайтом и получу дополнительный порт, переадресованный напрямую, чтобы FTP-сервер мог открыть соединение внутри себя, и клиент сможет отправить запрос соединения на этот точный номер порта.

Новый план:

(примечание: "%" означает, что порт был изменен удаленным маршрутизатором.)

 

сервер № 1
    первичное соединение: 21 <-% -> 10000 
    вторичное соединение 10001 <-----> 10001
    vsftp.conf:
        pasv_min_port = 10001
        pasv_max_port = 10001

сервер № 2
    первичное соединение 21 <-% -> 11000
    вторичное соединение 11001 <-----> 11001
    vsftp.conf:
        pasv_min_port = 11001
        pasv_max_port = 11001

сервер № 3
    первичное соединение 21 <-% -> 12000
    вторичное соединение 12001 <-----> 12001
    vsftp.conf:
        pasv_min_port = 12001
        pasv_max_port = 12001

5 ответов

В моем случае наш брандмауэр заблокировал все пассивные порты FTP, когда мы пробовали FTP в активном режиме, это работало. Мы только открыли порт 21 на нашем брандмауэре.

Проверьте, так ли это для вас, измените настройку FTP-клиента на transfer mode в active и попробуйте подключиться.

Когда наш FTP-клиент был включен automatic или же passive режим будет меняться на passive режим после отправки LIST запрос и это привело к разрыву соединения.

Мой маршрутизатор (fritz.box, Германия) должен был быть настроен для разблокировки портов более высокого уровня в том же исходящем состоянии, что и входящий! (выше: это "pasv_min.. and ...max" здесь вставлено / предписано debian-vsftpd):

Добавление диапазона разблокированных портов в Fritz!Box-Router с помощью соответствующей кнопки:
"Другие приложения" -> "Portokoll": TCP, von Port: 13450, bis Port: 13500 (или высокие порты в диапазоне ~50), "Компьютер": RasPi, "IP_Adresse": (устаревший, внутренний LAN-IP-адрес для моего "RasPi", заданного fritz.box-router) -> и вот оно: "порт" (= тот же диапазон!): 13450, "бис-порт": 13450, и это отлично работает с vsftpd и FTPS (AUTH TLS / SSL-Tranfer с OpenSSL + надежный шифр DES-CBC3-SHA)...

Это перенаправит нужные порты и соединит запросы от моего маленького RasPi-"сервера" (за FB-NAT) к не входящему / исходящему внешнему IP-запросу на одном и том же диапазоне высоких (ER)-портов, как справа подключил "кабели" к тем же портам на внутренней части...

Возможный vsftp-config-файл "/etc/vsftpd.conf":

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
force_dot_files=YES

ssl_enable=YES
force_local_data_ssl=NO
force_local_logins_ssl=NO
allow_anon_ssl=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
# rsa_cert_file=/etc/ssl/private/vsftpd.pem   # not working alright, so single-lined:
rsa_cert_file=/etc/ssl/private/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key

pasv_enable=YES
# pasv_promiscuous=YES
# port_promiscuous=YES
pasv_addr_resolve=YES
pasv_address=[yourDNSadress.no-ip.com] # for Dynamic-DNS the routers daily changing IP.
# port_enable=YES
pasv_min_port=13450
pasv_max_port=13500
file_open_mode=0755

В /etc/vsftpd.conf вы должны предоставить диапазон портов, по крайней мере, 2 или 3, с настройками pasv_min_port и pasv_max_port.

Когда вы подключаетесь к vsftpd в пассивном режиме с клиентом FileZilla, vsftpd ответит подключением к данным на другом случайно выбранном порту в диапазоне, заданном pasv_min_port и pasv_max_port. Если вы пытаетесь сделать все на одном порту, это, вероятно, вызовет проблемы.

Если вы работаете с портом 12001, попробуйте:
pasv_min_port = 12001
pasv_max_port = 12005

Для меня проблема заключалась не в файле конфигурации "vsftpd.conf" на FTP-(мини) сервере Raspberry-Pi (с его программным обеспечением: vsftpd), а в ПО МОЕМ Доме-МАРШРУТНИКЕ с его брандмауэром, который не пропускает " сигналы ", что говорит мне о моей программе Windows FTPS (я не использую Filezilla, но CoreFTP) -> "192,168,178,21,71,27 -> 500 Команда недопустимого порта ". Таким образом, освобождая вручную на МОЕМ МАРШРУТИЗАТОРЕ не только "Порт 21", но и относительно более высокий диапазон разблокировки порта (здесь только для примера, цифры могут быть также намного выше диапазона, например 35000, 40000 или даже больше)..) чтобы пропустить входящие / исходящие сигналы через один из этих портов, выбранных случайным образом из программного обеспечения, через внутренний брандмауэр маршрутизатора(мой RasPi "отстает" от них в моей локальной сети!), как показано ниже (на маршрутизаторе):

Active  Description  Protocol  Port          an Computer(RasPi)  an Port
(OK)    FTPS-Server  TCP       13450-13500   192.168.178.120     13450-13500

Таким образом, оба порта: Nonigig и Outbound-порты на маршрутизаторе - это ОДНОВРЕМЕННЫЕ (высокочастотные) кабели, соединяющие ROUTER внутри с "одинаковыми номерами разъемов"(= порты).

Шаг 1 - выключите брандмауэр Windows (необходимо перезагрузить)

Setp 2 - Открыть Filezilla Clent и изменить тип шифрования File -> Site Manager ->Encryption -> Использовать только обычный FTP

Другие вопросы по тегам