A transferência de arquivos por FTP trava e expira

1

Eu tenho um problema com o upload de arquivos via FTP. Eu posso listar com sucesso os diretórios, mas quando eu tento fazer upload de um arquivo, digamos ".htaccess", ele fica pendurado por cerca de 20 segundos em STOR .htacess e, em seguida, lança um tempo limite. Ele tenta novamente várias vezes, mas sempre falha.

É assim que uma saída completa do cliente FTP se parece com a transferência de arquivos:

Status: Connecting to 88.150.168.207:21...
Status: Connection established, waiting for welcome message...
Response:   220 Welcome to CodeBuster FTP service.
Command:    USER codebuster
Response:   331 Please specify the password.
Command:    PASS ********
Response:   230 Login successful.
Command:    OPTS UTF8 ON
Response:   200 Always in UTF8 mode.
Status: Connected
Status: Starting upload of D:\Projects\codebuster\.htacess
Command:    CWD /public_html
Response:   250 Directory successfully changed.
Command:    PWD
Response:   257 "/public_html"
Command:    TYPE A
Response:   200 Switching to ASCII mode.
Command:    PASV
Response:   227 Entering Passive Mode (88,150,168,207,155,25).
Command:    STOR .htacess
Error:  Connection timed out
Error:  File transfer failed
Status: Connecting to 88.150.168.207:21...
Status: Connection established, waiting for welcome message...
Response:   220 Welcome to CodeBuster FTP service.
Command:    USER codebuster
Response:   331 Please specify the password.
Command:    PASS ********
Response:   230 Login successful.
Command:    OPTS UTF8 ON
Response:   200 Always in UTF8 mode.
Status: Connected
Status: Starting upload of D:\Projects\codebuster\.htacess
Command:    CWD /public_html
Response:   250 Directory successfully changed.
Status: Retrieving directory listing...
Command:    TYPE I
Response:   200 Switching to Binary mode.
Command:    PASV
Response:   227 Entering Passive Mode (88,150,168,207,73,43).
Command:    LIST
Response:   150 Here comes the directory listing.
Response:   226 Directory send OK.
Command:    TYPE A
Response:   200 Switching to ASCII mode.
Command:    PASV
Response:   227 Entering Passive Mode (88,150,168,207,222,74).
Command:    STOR .htacess
Error:  Connection timed out
Error:  File transfer failed
Status: Connecting to 88.150.168.207:21...
Status: Connection established, waiting for welcome message...
Response:   220 Welcome to CodeBuster FTP service.
Command:    USER codebuster
Response:   331 Please specify the password.
Command:    PASS ********
Response:   230 Login successful.
Command:    OPTS UTF8 ON
Response:   200 Always in UTF8 mode.
Status: Connected
Status: Starting upload of D:\Projects\codebuster\.htacess
Command:    CWD /public_html
Response:   250 Directory successfully changed.
Status: Retrieving directory listing...
Command:    TYPE I
Response:   200 Switching to Binary mode.
Command:    PASV
Response:   227 Entering Passive Mode (88,150,168,207,35,185).
Command:    LIST
Response:   150 Here comes the directory listing.
Response:   226 Directory send OK.
Command:    TYPE A
Response:   200 Switching to ASCII mode.
Command:    PASV
Response:   227 Entering Passive Mode (88,150,168,207,109,53).
Command:    STOR .htacess
Error:  Connection timed out
Error:  File transfer failed

Isso é com o iptbles desligado, então não é um problema de firewall. O tamanho do arquivo certamente não é um problema, já que é apenas uma linha com a configuração do índice de diretório.

Como nota adicional, este é um diretório chro, pertencente ao codebuster: codebuster e as permissões são drwxrw-rw- .

Aqui estão algumas notas adicionais:

uma linha do log vsftpd mostra:

Sat Jan 10 14:46:23 2015 240 ::ffff:89.72.176.192 35 /public_html/.htacess a _ i r codebuster ftp 0 * c

, por isso, afirma que a transferência foi concluída, mas não foi.

A exclusão de arquivos funciona corretamente

Resumo de tcpdump port ftp mostra:

100 packets captured
101 packets received by filter
0 packets dropped by kernel

Usar o modo ativo no cliente ftp não altera a situação.

    
por Nicolas 10.01.2015 / 12:34

3 respostas

2

Em primeiro lugar, você pode querer testar não usando o modo passivo, apenas no caso de toda a sua configuração funcionar com ele.

Em segundo lugar, dê uma olhada nesta linha:

Resposta: 227 Entrando no modo passivo (88,150,168,207,155,25).

Esse é o endereço IP do VPS e mais dois números, vamos chamá-los de p1 e p2. Esses números informam a porta à qual você deve se conectar, seguindo a fórmula "port = (p1 * 256) + p2". Com base nisso, recomendo que você obtenha capturas de rede simultâneas no seu computador e no VPS para ver onde está o problema. Se você vir a conexão na porta passiva iniciada a partir do seu computador, mas não atingindo o VPS, o problema pode estar na sua rede local (como você disse, não há firewall na frente do seu VPS). Se os pacotes chegarem ao servidor, mas ele não responder, o problema pode estar na sua configuração de FTP no servidor.

Por favor, lembre-se que responder a este tipo de perguntas é difícil sem todas as informações, mas espero que isso lhe dê alguma orientação.

    
por 10.01.2015 / 13:22
2

I can successfuly list the directories, but when I try to upload a file ... it hangs for about 20 seconds ... and then throws a timeout.

A listagem de diretórios e a transferência de arquivos usam o mesmo mecanismo básico, que é abrir uma conexão de dados e transferir dados. No seu caso, os clientes abrem uma conexão para o endereço especificado pelo servidor na resposta ao comando PASV.

Como o trabalho de listagem de diretórios, isso exclui o caso comum em que todas as conexões de dados são bloqueadas por firewall ou dispositivo NAT.

Posso imaginar as seguintes razões para o problema que você tem:

  1. Algum problema estranho no servidor.
  2. Uma middlebox de inspeção profunda (como firewall), entre as quais interfere ativamente no tráfego, seja por política ou por causa de um bug. Alguns firewalls proíbem uploads como proteção contra vazamento de dados.
  3. Algum firewall cuja taxa limita o número de conexões de dados.
  4. Alguns roteadores quebrados que coaxam em algumas opções TCP usadas durante a transferência.

Sugiro que você siga os seguintes passos para diminuir a causa:

  • Examine o arquivo de log do servidor FTP para ver se algum problema foi relatado.
  • Tente uma conexão FTP passiva no próprio VPS (para o sistema local).
  • Experimente de outro local.
  • Tente fazer várias listagens de diretório na mesma sessão FTP uma após a outra.
  • Tente obter arquivos do servidor para ver se apenas o upload foi afetado.

Além disso, eu recomendo usar SFTP (transferência de arquivos através de SSH) em vez disso, porque é mais seguro (login criptografado) e causa menos problemas (apenas uma única conexão, sem conexões extras de dados).

    
por 10.01.2015 / 14:13
0

Parece que somente as conexões de saída para portas abaixo de 20.000 são permitidas. Certifique-se de que a saída no cliente e a entrada no servidor sejam permitidas em todo o intervalo PASV do servidor FTP. Se você não consegue encontrar o intervalo lá, 1024-65535 deve funcionar.

>>> 155*256+25
39705
>>> 73*256+43  #OK
18731
>>> 222*256+74
56906
>>> 35*256+185  #OK
9145
>>> 109*256+53
27957
    
por 18.04.2017 / 13:31