У меня есть экземпляр виртуальной машины Windows 2016 в облаке Google. Я добавил правило брандмауэра Windows для входящего трафика, чтобы разрешить порт 21. Я настроил облако Google с как входящими правилами брандмауэра для порта 21, так и исходящими для всех портов в качестве пассивного.
Я могу подключиться к своему FTP-серверу, но получаю эту ошибку.
Response: 425 Can't open data connection for transfer of "/"
Error: Failed to retrieve directory listing
Обратите внимание, что я также включил TLS в filezilla, но с включенным TLS или без него я получил ту же ошибку.
Я безуспешно пытался полностью отключить брандмауэр Windows, поэтому либо мои настройки брандмауэра gcloud неверны, либо конфигурация filezilla неверна.
Любая помощь будет оценена по достоинству!
Если вы хотите работать с TLS, вам может потребоваться открыть порт 990 и даже порт 989. Другой вариант шифрования ваших данных - использовать SFTP. Есть хорошее руководство по настройке Filezilla на GCE с использованием SFTP. Вот
БЫТЬ КОРОТКИМ
Вам не нужно настраивать outbound rules
в Google Cloud
. В вашем случае кроме port 21
вам нужно добавить дополнительные порты, например 50000-50500
к Google Cloud Firewall
(чтобы добавить к тому же правилу, где указан порт 21), затем вWindows Firewall
(чтобы добавить к тому же правилу, где указан порт 21) и добавить 50000-50500
к FileZilla Settings
на странице Passive mode settings
ПРИНАДЛЕЖАТЬ
Ниже полная инструкция (на случай, если кому-то понадобится) на основе Sever 2008
, потому что я не использую Server 2016
(все должно быть очень похоже). Также я не использовал TLS
как мне это не нужно. Настройки ниже позволяютFTP clients
работать через Passive mode
.
Настройки Google Cloud
VPC network -> Firewall rules
;Create firewall rule
на вершине; default-allow-ftp
(не важно);default
(или тот, который вам нужен);1000
(не важно);Ingress
;0.0.0.0/0
(или тот, который вам нужен);None
(или тот, который вам нужен);tcp:21,50000-50500
.Параметры брандмауэра Windows (взято из Вот. В источнике также показано, как настроить Firewall
с помощью Command Line
и PowerShell
):
Inbound Rules
, а затем нажмите New Rule
;Rule Type
раздел, выберите Port
и нажмите Next
:Protocol and Ports
раздел, выберите TCP
как тип протокола и тип 21, 50000-50500
в Specific local ports
поле ввода;Action
раздел, выберите Allow the Connection
и нажмите Next
;Profile
раздел, выберите все три варианта и нажмите Next
. Если вы хотите ограничить подключение к определенному профилю, вы можете сделать это, выбрав только те профили, которые, по вашему мнению, подходят для вашей настройки. В этом примере мы откроем порт для всех профилей;Name
в разделе введите описательное имя для этого правила. Рекомендуется указывать номер порта в имени, чтобы правило было легко узнать. Нажмите Finish
когда готов.Настройки FileZilla
General setting
; Listen on these ports:
к 21
;В дереве выберите Passive mode settings
;
Use custom port range:
, войти 5000
и 50500
;Use the following IP
и введите IP своего сервера (если он статический) или выберите Retrieve external IP address from:
;Правка -> Пользователи;
General
; Add
и предоставить username
который вы собираетесь использовать для подключения. В username
не имеет никакого отношения к учетным записям пользователей Windows, поскольку FileZilla использует собственную систему учетных записей пользователей;Enable account
, и при необходимости Password
;Shared folder
; НОТЫ:
Разрешения FileZilla не имеют никакого отношения к настройкам разрешений Windows для вашей папки «домашний каталог». Это означает, что если настройки FileZilla позволяют пользователю создавать папку \ файл, но разрешения настроены через Windows File Explorer
не позволяет это сделать, то пользователь не может записывать какие-либо файлы \ папки в "домашний каталог".
Для Windows пользователи, которые добавлены в FileZilla, являются чем-то вроде «неизвестного», поэтому Windows вообще не разрешает доступ к папке «домашний каталог». Чтобы исправить это, я просто добавил All
профиль в настройках безопасности папки «домашний каталог».
Бонус # 1
Если при каждой загрузке FileZilla interface
появляется, вы можете отключить такое поведение с помощью msconfig
:
msconfig
;Startup
вкладка -> Снять FileZilla Server
-> Хорошо;Бонус # 2
Если пользователи Linux хотят загрузить файл с ftp-сервера, используя command line
:
wget ftp://username:password@server_ip_address/home_dir/file_name
Если отключение TLS сработало, это явный признак того, что брандмауэр не настроен или неправильно настроен. Даже если вы утверждаете, что отключили все брандмауэры, на самом деле это не так.
Некоторые межсетевые экраны достаточно умны, чтобы проверять FTP-трафик, открывая порты FTP-подключения для передачи данных по мере необходимости. Но если управляющее соединение зашифровано, брандмауэр не сможет его проверить и не сможет открыть для вас порты подключения к данным. Итак, с TLS вы должны сами настраивать правила.
Например, в брандмауэре Windows эта функция называется «FTP-фильтрация с отслеживанием состояния» и настраивается с помощью netsh advfirewall set global StatefulFtp ...
команда.