Как использовать определенный IP с vsftpd?

Вот сценарий:

  • У нас есть один сервер AWS Ubuntu Server
  • Этот сервер работает как клиент ftp
  • Теперь, когда мы пытаемся подключиться к Ftp-сервер XYZ использует этот сервер AWS в качестве клиента, он отправляет свой локальный IP-адрес при подключении к ftp-серверу, из-за чего не работает список каталогов.
  • Журнал показывает, что мы подключены к FTP-серверу + мы аутентифицированы правильно ... список портов проходит успешно + ошибка только в каталоге.
  • мы можем предоставить конкретный IP в FTP, используя filezilla, который он будет использовать при выходе из шлюза.
  • здесь мы не можем использовать это, потому что у него нет GUI & amp; он будет использоваться php-скриптом.
  • Эта проблема также существовала в Windows в то время, когда мы решили ее, присвоив FileZilla эластичный IP-адрес. до решения, которое мы использовали, чтобы получить ошибку & amp; журнал показал как это. этот пункт добавлен только для того, чтобы дать вам больше деталей. & Амп; та же проблема с Ubuntu & amp; мы хотим дать эластичный IP где-нибудь в ftp, чтобы он начал работать ... мы надеемся, что по крайней мере. ;)

Последние обновления

  • , пожалуйста, нажмите здесь для файла vsftpd.conf.
  • немного больше пояснений:

    В этом случае машина «A» является нашим FTP-сервером (который является сервером AWS Ubuntu) для внутреннего использования, из-за большого количества других процессов и данных, которые регулярно загружены на этот FTP-сервер (компьютер "A") & amp; Машина "B" - это FTP-сервер нашего клиента, который они используют для своих внутренних целей. Теперь нам нужно извлечь некоторые данные с нашего клиентского FTP-сервера (то есть компьютера «B») на наш сервер (то есть компьютера «A») и затем обработать его. после этого нам нужно поместить обработанные данные обратно на FTP-сервер клиента (т.е. на компьютер "B"). это то, что не работает

  • Журналы межсетевого экрана клиентов, когда мы пытались соединиться с машиной «B», как показано на рисунке ниже.

Firewall Log 1

Firewall Log 2

1
задан 14.04.2020, 12:30

2 ответа

Это мое понимание вашего сценария:

  • У вас есть машина A в вашей сети с FTP-сервером и FTP-клиент ;
  • Вы хотите получить файлы с компьютера B , который находится в клиентской сети ;
  • Существует брандмауэр в вашей сети и, возможно, в клиентской сети ;
  • Вы будете использовать FTP-клиент для загрузки и извлечения файлов с компьютера B . [ 1112]

Network

FTP работает в двух режимах:

- Активный режим -

В активном режиме FTP клиент подключает из случайного непривилегированного порта (N> 1023) к командному порту FTP-сервера, порт 21. Затем клиент начинает прослушивать порт N + 1 и отправляет команду FTP PORT N + 1 на FTP сервер. Затем сервер подключится к указанному клиенту порту данных (...)

Пример:

  1. FTP-клиент на машине «A» подключается к FTP-серверу на машине «B» на порту 21;
  2. машине «A» отправляет «ls» на машину «B» , но поскольку это активный режим, результат «ls» будет доставлен на порт N + 1 (N> 1023) машины «A» ;
  3. [1115 ] Это не удается, потому что FTP-клиент на машине «A» просит машины «B» подключиться к частному IP. Даже если IP является общедоступным, порты N + 1 должны быть открыты в брандмауэре.

- Пассивный режим -

В пассивном режиме FTP клиент инициирует оба соединения с сервером, решая проблему межсетевых экранов, фильтрующих входящее соединение порта данных с клиентом с сервера , При открытии FTP-соединения клиент открывает два случайных непривилегированных порта локально (N> 1023 и N + 1). Первый порт связывается с сервером через порт 21, но вместо того, чтобы затем выполнить команду PORT и разрешить серверу подключиться к своему порту данных, клиент выдаст команду PASV. В результате сервер открывает случайный непривилегированный порт (P> 1023) и отправляет P обратно клиенту в ответ на команду PASV. Затем клиент инициирует соединение от порта N + 1 к порту P на сервере для передачи данных. (...)

Пример:

  1. FTP-клиент на машине «A» подключается к FTP-серверу в [ 1155] машина "B" на порту 21;
  2. машина "A" отправляет "ls" на машина "B" ;
  3. [1118 ] На этот раз результат не будет доставлен в порт N + 1 машины «A» . Вместо этого машина "B" информирует машину "A" , что результат ожидает извлечения в данный IP и порт машины "B" . [ 1118]
  4. Это происходит сбой, когда этот IP является частным, и порт не открыт в брандмауэре клиента. Вот почему клиент должен настроить свой FTP-сервер на использование общедоступного IP-адреса и известного порта ( см. Ответ Cubiq ).

У вас есть следующие решения:

  1. Использование активного режима (учитывая, что аппарат "A" имеет IP 175.41.135.142) : Сразу после подключения и аутентификации введите следующую команду: ПОРТ 175,41,135,142,14,178 Вам потребуется открыть порт 3762 в брандмауэре. , 14,178 происходит от преобразования октетов в десятичное число ((14 * 256) + 178).
  2. Использование пассивного режима: Чтобы этот метод работал, клиент должен иметь конфигурацию, подобную ответу Cubiq. Сразу после подключения и аутентификации введите следующую команду: passive

Теперь вы должны быть в состоянии «ls».

Вы можете узнать больше о том, как работает FTP, здесь: http://slacksite.com/other/ftp.html

Эта страница также полезна для понимания режимов FTP: [ 111] http://www.deskshare.com/resources/articles/ftp-how-to.aspx

2
ответ дан 14.04.2020, 12:31

Добавьте в свой конфигурационный файл vsftpd (/etc/vsftpd.conf):

pasv_enable=YES
port_enable=YES
pasv_min_port=<port-start>
pasv_max_port=<port-end>
pasv_address=<your-machine-ip>
pasv_addr_resolve=NO

. В конфигурации безопасности вашего экземпляра откройте порт 20-21 для FTP, также включите пассивные порты в указанном вами диапазоне. выше (pasv_min / max_port, например: 64000-64100).

Перезапустите vsftpd.

если это не сработает, вы можете попробовать заменить две последние строки на:

pasv_address=<public-address>
pasv_addr_resolve=YES
3
ответ дан 14.04.2020, 12:30
  • 1
    Я попробовал то, что Вы предложили все еще it' s встреча с локальным IP а не Лобковым IP, который я дал в conf файле как Вас вышеизложенный...: (любые другие предложения! – David Mann 14.04.2020, 12:31
  • 2
    действительно ли Вы уверены, что используете корректный pasv_address? каждый - IP машины другой общедоступный – Magicode 14.04.2020, 12:31
  • 3
    Да я не использую Частный IP сервера, который обнаруживается в результате команды ifconfig. Я использую Общедоступный IP, который используется для NATing нашего Ubuntu AWS Server' s Частный IP. – Steve Konves 14.04.2020, 12:32