Proftpd no Debian - problemas com a transferência de arquivos

1

Eu tenho um VPS wieh debian alugado instalado. Recentemente eu instalei proftpd para permitir acesso somente leitura a todos & acesso total para os usuários específicos.

Eu configurei o proftpd (com TLS) de acordo com vários guias. Eu tenho portas passivas desbloqueadas (as e porta 21 via iptables) e configurar login anônimo.

Quando eu entro, tudo está bem - login rápido, caminhada rápida através dirs ... problema ocorre quando tento baixar um arquivo - winscp / filezilla / python, todos ficam presos ao baixar um arquivo e depois conexão solta (arquivos são ~ 1kB, muito pequenos). Quando estou conectado através do SFTP para o servidor, não tenho problemas e velocidade total.

Alguma ideia? Você precisa do meu arquivo proftpd.conf ?

Atualização:

Eu vejo que preciso adicionar algumas informações, graças ao primeiro comentário (sobre SCP):

  • Eu gostaria de poder ver os arquivos anonimamente, o melhor seria via navegador web, mas é n ot a must.
  • Eu preciso configurar um aplicativo que sincronize toda a pasta do VPS com a pasta do meu disco rígido (planejo fazer isso via python, mas o shell / bash também é bom)
  • Gostaria de poder fazer o download / upload de todo o catálogo ou apenas desses arquivos que foram alterados
  • Preciso que isso seja possível sem programas de terceiros. Por meio de bibliotecas cmdline / bash ou python oficiais. Precisa de trabalhar tanto no Windows como no Fedora

Minha configuração do 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

Eu desliguei o TLS, conectado via conta de convidado, ativei o modo binário e iniciei o tcpdump na porta 21 (serverside ofc). Então eu fiz um 'get' em um único arquivo e depois de um tempo eu tenho "Conexão fechada por host remoto". Aqui está a entrada do 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.

e aqui Você pode ver get e connection_closed separados por uma nova linha:

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
    
por MKK 29.09.2015 / 13:52

1 resposta

0

Por favor, poste sua iptables setup. Observe que fazer isso funcionar com o FTP pode ser complicado, pois o FTP usa alocações de porta dinâmicas (no modo passivo, quando o cliente deseja fazer o download ou upload de um arquivo, o servidor aloca uma porta dinâmica para o fluxo de transferência de dados, informa ao cliente e espera que o cliente se conecte a ele).

Isso significa:

  1. Se você quiser usar uma abordagem "stateful" no Netfilter para detectar o fluxo de dados FTP, você precisa ter um módulo especial carregado para fluxos de FTP de controle de decodificação;
  2. Isso não funcionará com o TLS porque o kernel não poderá decodificar os fluxos de controle de FTP mencionados.

O SCP (e o SFTP) funciona bem porque multiplexam o controle e os fluxos de dados em um único fluxo TCP.

Quanto à sincronização… Primeiro, esqueça scp , pois este é um protocolo legado; use SFTP em vez disso. Este parece ser uma implementação SFTP em Python de plataforma cruzada, por isso pode funcionar apenas para você. By the way, o Windows tem um bom suporte para o software front-end SFTP (google for WinSCP).

E você pode considerar outros meios de sincronização também. Por exemplo, rsync tem o Windows compilado e é, sem dúvida, a melhor ferramenta de sincronização do sistema de arquivos existente. Você também pode considerar o WebDAV ou mesmo implementar algo RESTful.

    
por 29.09.2015 / 14:36