Назад | Перейти на главную страницу

Проблема пассивного режима с vsftpd в Ubuntu (EC2)

Я следовал всем инструкциям, но просто не могу войти через ftp.

...
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
local: 21 remote: 21
229 Entering Extended Passive Mode (|||12028|)
550 Failed to open file.
221 Goodbye.

даже в iptables:

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpts:12000:12100

у меня есть min и max порт установлен в vsftpd.conf к 12000-12100 и те же порты, включенные через консоль AWS.

В вашем конкретном случае я вижу, что у вас есть ошибка 550, которая заставляет меня думать, что есть проблема с разрешением файла.

В общем, наиболее частая причина отказа режима PASV, когда vsftpd работает на EC2, заключается в том, что vsftpd сообщает клиенту подключиться к частный IP-адрес экземпляра EC2, и клиент не может подключиться к нему по очевидным причинам.

Одно из возможных решений - назначить этому экземпляру эластичный IP-адрес, а затем указать vsftpd объявить себя с помощью этого общедоступного IP-адреса (например, 1.2.3.4), добавив следующую строку в vsftpd.conf:

pasv_address=1.2.3.4

Сделаем шаг назад и посмотрим, как работает режим PASV:

  • Клиент открывает командный канал, подключившись к порту 21 общедоступного IP-адреса экземпляра EC2, который самим AWS сопоставляется с частным IP-адресом экземпляра.
  • Клиент отправляет команду PASV экземпляру EC2 на открытом канале
  • vsftpd знает, что он прослушивает частный IP-адрес экземпляра EC2 (общедоступный IP-адрес экземпляра управляется AWS, и он не виден изнутри экземпляра) и отправляет ответ клиенту, который содержит частный IP-адрес экземпляра и случайный порт между 12000 и 12100
  • Клиент пытается подключиться к IP-адресу и порту, предоставленным vsftpd, и терпит неудачу.

С участием pasv_address вы заставляете vsftpd возвращать указанный IP-адрес при получении команды PASV вместо попытки угадать IP-адрес.

как сказал @Luca Gibelli, это в основном проблема с правами доступа к файлам.

Может быть лучше, если вы разместите список файлов и проверите, какие разрешения есть.

Но я бы ответил на этот вопрос, чтобы немного рассказать об использовании pasv_address на EC2

Если вы используете эластичный IP

pasv_address={your public IP address}

в противном случае, может быть, лучше использовать

pasv_addr_resolve={your public domain or DNS}

посмотрите здесь: https://www.gosquared.com/blog/fix-ftp-passive-mode-problems-on-amazon-ec2-instances

Некоторые маршрутизаторы блокируют обычный ftp через стандартный порт. Переключение на нестандартный порт решило эту проблему для меня.