Proftpd на Debian — проблемы с передачей файлов

Proftpd на Debian — проблемы с передачей файлов

У меня есть арендованный VPS с установленным Debian. Недавно я установил proftpd, чтобы разрешить всем доступ только для чтения и полный доступ для определенных пользователей.

Я настроил proftpd (с TLS) согласно нескольким руководствам. Я разблокировал пассивные порты (те и порт 21 через iptables) и настроил анонимный вход.

Когда я вхожу в систему, все в порядке - быстрый вход, быстрое прохождение по каталогам... проблема возникает, когда я пытаюсь загрузить файл - winscp/filezilla/python, все зависает на загрузке файла, а затем теряется соединение (файлы ~1kB, очень маленькие). Когда я подключаюсь к серверу через SFTP, у меня нет проблем и полная скорость.

Есть идеи? Вам нужен мой proftpd.confфайл?

Обновлять:

Я вижу, что мне нужно добавить некоторую информацию, благодаря первому комментарию (о SCP):

  • Я хотел бы иметь возможность просматривать файлы анонимно, лучше всего через веб-браузер, но это не обязательно.
  • Мне нужно настроить приложение, которое синхронизирует всю папку на VPS с папкой на моем жестком диске (я планирую сделать это через Python, но shell/bash тоже подойдет)
  • Я хотел бы иметь возможность скачивать/загружать либо весь каталог, либо только те файлы, которые были изменены.
  • Мне нужно, чтобы это было возможно без сторонних программ. Либо через cmdline/bash, либо через официальные библиотеки python. Должно работать как на Windows, так и на Fedora

Моя конфигурация iptables:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
fail2ban-ssh-ddos  tcp  --  anywhere             anywhere             multiport dports ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpts:60000:65535
fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Chain fail2ban-ssh-ddos (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Я отключил TLS, подключился через гостевую учетную запись, включил двоичный режим и запустил tcpdump на порту 21 (серверная часть, конечно). Затем я сделал 'get' для одного файла и через некоторое время получил "Connection closed by remote host". Вот ввод ftp:

ftp> get light.cfg
200 PORT command successful
150 Opening BINARY mode data connection for light.cfg (94 bytes)
Connection closed by remote host.

и здесь вы можете увидеть get и connection_closed, разделенные новой строкой:

15:12:15.836468 IP (tos 0x0, ttl 119, id 30359, offset 0, flags [DF], proto TCP (6), length 67)
    83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [P.], cksum 0x5526 (correct), seq 139:166, ack 575, win 7618, length 27
15:12:15.836636 IP (tos 0x0, ttl 64, id 50952, offset 0, flags [DF], proto TCP (6), length 69)
    vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [P.], cksum 0x7049 (correct), seq 575:604, ack 166, win 115, length 29
15:12:15.856530 IP (tos 0x0, ttl 119, id 30360, offset 0, flags [DF], proto TCP (6), length 56)
    83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [P.], cksum 0xd20f (correct), seq 166:182, ack 604, win 7589, length 16
15:12:15.868348 IP (tos 0x0, ttl 64, id 50953, offset 0, flags [DF], proto TCP (6), length 106)
    vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [P.], cksum 0xba9a (correct), seq 604:670, ack 182, win 115, length 66
15:12:15.934002 IP (tos 0x0, ttl 119, id 30365, offset 0, flags [DF], proto TCP (6), length 40)
    83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [.], cksum 0x0ccc (correct), ack 670, win 7523, length 0


15:13:15.909873 IP (tos 0x0, ttl 119, id 30372, offset 0, flags [DF], proto TCP (6), length 40)
    83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [F.], cksum 0x0ccb (correct), seq 182, ack 670, win 7523, length 0
15:13:15.910056 IP (tos 0x0, ttl 64, id 50954, offset 0, flags [DF], proto TCP (6), length 40)
    vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [F.], cksum 0x29ba (correct), seq 670, ack 183, win 115, length 0
15:13:15.922725 IP (tos 0x0, ttl 119, id 30373, offset 0, flags [DF], proto TCP (6), length 40)
    83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [.], cksum 0x0cca (correct), ack 671, win 7523, length 0

решение1

Пожалуйста, опубликуйте ваши iptablesнастройки. Обратите внимание, что заставить его работать с FTP может быть сложно, поскольку FTP использует динамическое распределение портов (в пассивном режиме, когда клиент хочет загрузить или выгрузить файл, сервер выделяет динамический порт для потока передачи данных, сообщает его клиенту и ожидает, что клиент подключится к нему).

Это означает:

  1. Если вы хотите использовать некий «stateful» подход в Netfilter для обнаружения потока данных FTP, вам необходимо загрузить специальный модуль ядра для управления декодированием потоков FTP;
  2. Это не будет работать с TLS, поскольку ядро ​​не сможет декодировать указанные потоки управления FTP.

SCP (и SFTP) работают нормально, поскольку они мультиплексируют потоки управления и данных в один поток TCP.

Что касается синхронизации... Во-первых, забудьте о нем, scpтак как это устаревший протокол; вместо него используйте SFTP. ЭтотПохоже, это кроссплатформенная реализация Python SFTP, так что она может подойти вам. Кстати, Windows имеет хорошую поддержку программного обеспечения SFTP front-end (погуглите WinSCP).

И вы можете рассмотреть другие способы синхронизации. Например, rsyncесть сборки Windows, и это, пожалуй, лучший инструмент синхронизации файловых систем из существующих. Вы также можете рассмотреть WebDAV или даже реализацию чего-то RESTful.

Связанный контент