У меня есть сервер centos, на котором запущен чистый ftp через aws. Я настроил PureDB и добавил пользователя с правильными разрешениями. Я открыл входящие порты 20/21 и 49152-65534 в группе безопасности aws, а затем сопоставил эти порты с pure-ftpd, используя Passive Port Range
настройка в файле конфигурации pure-ftpd. На данном этапе тестирование на машине с использованием ftp localhost
работает как положено; Я могу связаться со своим пользователем и перечислить файлы.
Теперь, пытаясь подключиться к серверу с моей машины, я добавил ForcePassiveIP
настройка на сервере и установка публичного ip для экземпляра aws, затем попытка подключения; ftp <public-ip>
. Соединение работает, я могу войти в систему, но в 90% случаев пассивное соединение зависает и просто отображается 227 Entering Passive Mode (<public-ip>,<ports>)
когда я пытаюсь перечислить файлы. Точно так же попытка загрузить новый файл с помощью ftp-клиента будет зависать, а затем завершаться ошибкой:
Response: 227 Entering Passive Mode (<public-ip>,<ports>)
Command: MLSD
Error: Connection timed out
Error: Failed to retrieve directory listing
Кто-нибудь знает, почему это происходит? Любая помощь приветствуется.
ПРИМЕЧАНИЕ: у меня была аналогичная проблема на машине Vagrant с той же ОС / настройками (без ForcePassiveIP
настройка), и это работало нормально после запуска modprobe ip_conntrack_ftp
, однако это не относится к серверу aws.
Хорошо ли вы настроили конфигурационный файл pure-ftpd со следующими параметрами:
PassivePortRange 49152 65534
ForcePassiveIP AWS_SERVER_PUBLIC_IP
Вы можете проверить, какой диапазон портов разрешен в ОС, с помощью:
cat /proc/sys/net/ipv4/ip_local_port_range