я установил vsftpd и все работает нормально при доступе к нему локально, но я не могу просматривать папки при доступе к нему удаленно.
используя filezilla на моем удаленном компьютере, я получаю следующее:
status: connecting to 192.x.x.x
status: connection established, waiting for welcome message
response: welcome
command: user admin
response: specify pass
command: pass ****
response: 230 login successful
command: opts utf8 on
response: 200 always in utf8 mode
status: connected
status: retrieving directory listing..
command: pwd
response: 257 "/var/ftp"
command: type I
response: 200 switching to binary mode
command: PASV
response: 227 entering passive mode (192.168.8.5,59,0).
command: list
и он останавливается прямо здесь, затем время ожидания соединения, я не могу просматривать папки или каталоги на ftp-сервере.
На моем iptables -L -n
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20
Мой /etc/vsftp/vsftp.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
#chown_uploads=YES
#chown_username=whoever
#xferlog_file=/var/log/xferlog
xferlog_std_format=YES
idle_session_timeout=120
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
ftpd_banner= Welcome
#deny_email_enable=YES
#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
#ls_recurse_enable=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
Проблема, скорее всего, в том, что вы запросили пассивный режим, когда клиенту требуется открыть новое соединение для передачи данных с сервером на указанном порту, но вы не разрешили эти порты через брандмауэр. Например, указанное выше соединение для передачи данных ожидается через порт TCP / 15104 (59 * 256 + 0), но вы разрешили только входящие TCP / 21 и TCP / 20 (или, по крайней мере, это все, о чем вы нам рассказали. ).
Мы не можем знать это наверняка, пока не увидим весь набор правил брандмауэра; не могли бы вы изменить вопрос, включив весь выход iptables -L -n -v
?
На этом этапе FTP-сервер ожидает, что клиент откроет новое соединение для передачи данных, подключившись через TCP на порт 15014 (59 * 256 + 0) - скорее всего, брандмауэр на сервере или клиент (или где-то между ними) отвергать эту связь.
IIRC wsftp имеет несколько параметров конфигурации, которые контролируют диапазон портов, на которых он может ожидать подключения для передачи данных. Проверьте, что они собой представляют (или установите их явно в диапазон по вашему выбору), а затем откройте эти порты в правилах брандмауэра, как вы уже сделали для управляющих соединений FTP.
Если бы вы не использовали пассивный режим, возникла бы аналогичная проблема в другом направлении: серверу необходимо было бы иметь возможность открывать соединение с клиентом через порт, указанный в предыдущих командах.
Такое разделение соединений управления и данных часто вызывает проблемы с брандмауэром. Если у вас нет особых требований для FTP (совместимость с существующей службой, которую вы не можете изменить, или пользователей, у которых есть доступ только к FTP-клиенту, или тому подобное), я настоятельно рекомендую использовать SFTP / SCP, как это предусмотрено большинством демонов SSH - это устраняет проблему множественных произвольных соединений (все выполняется через одно дуплексное TCP-соединение, обычно через порт 22), а также значительно более безопасно.
Обновить
Настройки для управления портами передачи данных: pasv_min_port
и pasv_max_port
, хотя это может и не понадобиться. Если вы загрузите модуль ip_conntrack_ftp, он может отслеживать управляющие соединения FTP и отмечать входящие соединения данных как «связанные» - так что вы можете добавить правило iptables, чтобы разрешать пакеты от «связанных» соединений на портах 1024 или выше, а также принимать их для «установленные» связи. Видеть http://www.cyberciti.biz/faq/iptables-passive-ftp-is-not-working/#comments для одного примера этого.
Я бы по-прежнему рекомендовал SFPT / SCP через OpenSSH или аналогичный - это более безопасно и проще в управлении.
Если локально все в порядке, значит сетевое соединение прервано. Попробуйте использовать сниффер пакетов на обеих сторонах соединения, чтобы проверить, получает ли каждая сторона все отправленные ей пакеты.
Также попробуйте включить подробное ведение журнала на сервере и проверьте, что происходит.
Это немного похоже на то, как если бы ваш сервер выставлял IP-адрес LAN (в отличие от IP-адреса WAN).
Вы можете попытаться подтвердить это, используя активный клиент режима (помните об этом требует ваш клиент должен быть доступен для всего мира, чтобы вас нельзя было спрятать за брандмауэром).
попробуйте добавить строку pasv_address=<external ip address>
в ваш vsftpd.conf. Проверьте руководство Больше подробностей.
Перейдите в конфигурацию брандмауэра вашего сервера и установите TCP / 15104 как разрешенный порт TCP_IN и TCP_OUT.