Proftpd en Debian: problemas con la transferencia de archivos

Proftpd en Debian: problemas con la transferencia de archivos

Tengo un VPS alquilado con Debian instalado. Recientemente instalé proftpd para permitir acceso de solo lectura a todos y acceso completo para usuarios particulares.

Configuré proftpd (con TLS) según varias guías. Desbloqueé puertos pasivos (aquellos y el puerto 21 a través de iptables) y configuré el inicio de sesión anónimo.

Cuando inicio sesión, todo está bien: inicio de sesión rápido, recorrido rápido por los directorios... el problema ocurre cuando intento descargar un archivo: winscp/filezilla/python, todos se atascan al descargar un archivo y luego pierden la conexión (los archivos son ~ 1kB, muy pequeño). Cuando me conecto a través de SFTP al servidor, no tengo problemas y estoy a toda velocidad.

¿Algunas ideas? ¿Necesitas mi proftpd.confarchivo?

Actualizar:

Veo que necesito agregar alguna información, gracias al primer comentario (sobre SCP):

  • Me gustaría poder ver archivos de forma anónima; lo mejor sería a través del navegador web, pero no es obligatorio.
  • Necesito configurar una aplicación que sincronice toda la carpeta del VPS con la carpeta de mi disco duro (planeo hacer esto a través de Python, pero shell/bash también es bueno)
  • Me gustaría poder descargar/cargar el catálogo completo o solo los archivos que han cambiado
  • Necesito que esto sea factible sin programas de terceros. Ya sea a través de cmdline/bash o bibliotecas oficiales de Python. Necesita funcionar tanto en Windows como en Fedora.

Mi configuración de 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

Desactivé TLS, me conecté a través de una cuenta de invitado, activé el modo binario e inicié tcpdump en el puerto 21 (oficina del lado del servidor). Luego hice un 'obtener' en un solo archivo y después de un tiempo apareció "Conexión cerrada por host remoto". Aquí está la entrada 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.

y aquí puedes ver get y connect_closed separados por una nueva línea:

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

Respuesta1

Por favor publique su iptablesconfiguración. Tenga en cuenta que lograr que funcione con FTP puede ser complicado ya que FTP utiliza asignaciones de puertos dinámicas (en el modo pasivo, cuando el cliente desea descargar o cargar un archivo, el servidor asigna un puerto dinámico para el flujo de transferencia de datos y se lo indica al cliente). y espera que el cliente se conecte a él).

Esto significa:

  1. Si desea utilizar algún enfoque "con estado" en Netfilter para detectar flujos de datos FTP, necesita tener cargado un módulo de kernel especial para decodificar flujos FTP de control;
  2. Esto no funcionará con TLS porque el kernel no podrá decodificar dichos flujos de control FTP.

SCP (y SFTP) funcionan bien porque multiplexan flujos de datos y control en un único flujo TCP.

En cuanto a la sincronización… Primero, olvídelo, scpya que se trata de un protocolo heredado; utilice SFTP en su lugar. EsteParece ser una implementación SFTP de Python multiplataforma, por lo que podría funcionar para usted. Por cierto, Windows tiene un buen soporte para el software front-end SFTP (google para WinSCP).

Y también podría considerar otros medios de sincronización. Por ejemplo, rsynctiene versiones de Windows y es posiblemente la mejor herramienta de sincronización de sistemas de archivos que existe. También podrías considerar WebDAV o incluso implementar algo RESTful.

información relacionada