Conexões FTP específicas não são capazes de fazer upload de arquivos

3

Eu instalei o vsftpd em um servidor. Um novo grupo ftp foi adicionado e um usuário foi criado e adicionado a esse grupo.

Eu testei 3 cenários diferentes, apenas 1 deles está funcionando corretamente e os outros 2 estão me dando FAIL UPLOAD / 425 Falha ao estabelecer conexão

Cenário 1:

  • Conectando do meu computador usando o FileZilla
  • Eu recebo a lista de arquivos e posso fazer upload / download de qualquer arquivo.

Como você pode ver, o servidor diz "227 Entrando no Modo Passivo" e está enviando seu IP público e usando o intervalo de portas que eu configurei no arquivo de configuração:

Jun  5 19:09:36 zhny vsftpd[1]: [ftpuser] OK LOGIN: Client "xxx.xxx.xxx.xxx"    
Jun  5 19:09:36 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "230 Login successful."   
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP command: Client "xxx.xxx.xxx.xxx", "SYST"
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "215 UNIX Type: L8"
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP command: Client "xxx.xxx.xxx.xxx", "FEAT"
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "211-Features:"  
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", " EPRT#015#012"   
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", " EPSV#015#012"
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", " MDTM#015#012"
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", " PASV#015#012"
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", " REST STREAM#015#012"  
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", " SIZE#015#012"  
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", " TVFS#015#012"  
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", " UTF8#015#012"
Jun  5 19:09:37 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "211 End"
Jun  5 19:09:38 zhny vsftpd[1]: [ftpuser] FTP command: Client "xxx.xxx.xxx.xxx", "OPTS UTF8 ON"
Jun  5 19:09:38 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "200 Always in UTF8 mode."
Jun  5 19:09:38 zhny vsftpd[1]: [ftpuser] FTP command: Client "xxx.xxx.xxx.xxx", "PWD"
Jun  5 19:09:38 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "257 "/srv/ftpvs/ftpuser""
Jun  5 19:09:39 zhny vsftpd[1]: [ftpuser] FTP command: Client "xxx.xxx.xxx.xxx", "TYPE I"
Jun  5 19:09:39 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "200 Switching to Binary mode."
Jun  5 19:09:39 zhny vsftpd[1]: [ftpuser] FTP command: Client "xxx.xxx.xxx.xxx", "PASV"
Jun  5 19:09:39 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "227 Entering Passive Mode (zzz,zz,zzz,zzz,66,108)."
Jun  5 19:09:40 zhny vsftpd[1]: [ftpuser] FTP command: Client "xxx.xxx.xxx.xxx", "LIST"
Jun  5 19:09:40 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "150 Here comes the directory listing."
Jun  5 19:09:41 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "226 Directory send OK."

Cenário 2:

  • Conectando por linha de comando de um servidor na mesma rede que meu pc
  • A conexão corre bem, mas quando eu faço um "ls" para obter a lista de arquivos, recebo um erro.

Como você pode ver, o servidor está dizendo "Considere usar o pasv" e não está enviando seu próprio IP. Na linha anterior parece que o cliente está enviando seu IP, o que não aconteceu com o cliente FileZilla:

Jun  5 19:14:43 zhny vsftpd[1]: [ftpuser] OK LOGIN: Client "xxx.xxx.xxx.xxx"
Jun  5 19:14:44 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "230 Login successful."
Jun  5 19:14:44 zhny vsftpd[1]: [ftpuser] FTP command: Client "xxx.xxx.xxx.xxx", "SYST"
Jun  5 19:14:44 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "215 UNIX Type: L8"
Jun  5 19:14:48 zhny vsftpd[1]: [ftpuser] FTP command: Client "xxx.xxx.xxx.xxx", "PORT xxx,xxx,xxx,xxx,205,157"
Jun  5 19:14:48 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "200 PORT command successful. Consider using PASV."
Jun  5 19:14:49 zhny vsftpd[1]: [ftpuser] FTP command: Client "xxx.xxx.xxx.xxx", "LIST"
Jun  5 19:15:49 zhny vsftpd[1]: [ftpuser] FTP response: Client "xxx.xxx.xxx.xxx", "425 Failed to establish connection."

Cenário 3:

  • Conectando a partir do dispositivo que terá que enviar os dados para o FTP.
  • A conexão vai bem, mas quando tenta colocar um arquivo, o ftp envia de volta a mensagem de erro FAIL UPLOAD
  • O mesmo comportamento do cenário 2 (dizendo "considere usar pasv" e o cliente enviando seu IP)

No final, você pode ver a mensagem FAIL UPLOAD e que 0KB foram transmitidos:

Jun  5 14:51:46 zhny vsftpd[1]: [ftpuser] OK LOGIN: Client "yyy.yyy.y.yy"
Jun  5 14:51:46 zhny vsftpd[1]: [ftpuser] FTP response: Client "yyy.yyy.y.yy", "230 Login successful."
Jun  5 14:51:46 zhny vsftpd[1]: [ftpuser] FTP command: Client "yyy.yyy.y.yy", "TYPE I"
Jun  5 14:51:46 zhny vsftpd[1]: [ftpuser] FTP response: Client "yyy.yyy.y.yy", "200 Switching to Binary mode."
Jun  5 14:51:47 zhny vsftpd[1]: [ftpuser] FTP command: Client "yyy.yyy.y.yy", "PORT yyy,yyy,y,yy,244,168"
Jun  5 14:51:47 zhny vsftpd[1]: [ftpuser] FTP response: Client "yyy.yyy.y.yy", "200 PORT command successful. Consider using PASV."
Jun  5 14:51:48 zhny vsftpd[1]: [ftpuser] FTP command: Client "yyy.yyy.y.yy", "STOR TZE_1MIN_20130605_145200.dat"
Jun  5 14:51:54 zhny vsftpd[1]: [ftpuser] OK LOGIN: Client "yyy.yyy.y.yy"
Jun  5 14:51:54 zhny vsftpd[1]: [ftpuser] FTP response: Client "yyy.yyy.y.yy", "230 Login successful."
Jun  5 14:51:55 zhny vsftpd[1]: [ftpuser] FTP command: Client "yyy.yyy.y.yy", "TYPE I"
Jun  5 14:51:55 zhny vsftpd[1]: [ftpuser] FTP response: Client "yyy.yyy.y.yy", "200 Switching to Binary mode."
Jun  5 14:51:55 zhny vsftpd[1]: [ftpuser] FTP command: Client "yyy.yyy.y.yy", "PORT yyy,yyy,y,yy,244,169"
Jun  5 14:51:55 zhny vsftpd[1]: [ftpuser] FTP response: Client "yyy.yyy.y.yy", "200 PORT command successful. Consider using PASV."
Jun  5 14:51:56 zhny vsftpd[1]: [ftpuser] FTP command: Client "yyy.yyy.y.yy", "STOR TZE_1MIN_20130605_135200.dat"
Jun  5 14:52:48 zhny vsftpd[1]: [ftpuser] FTP response: Client "yyy.yyy.y.yy", "425 Failed to establish connection."
Jun  5 14:52:48 zhny vsftpd[1]: [ftpuser] FAIL UPLOAD: Client "yyy.yyy.y.yy", "/srv/ftpvs/ftpuser/TZE_1MIN_20130605_145200.dat", 0.00Kbyte/sec
Jun  5 14:52:56 zhny vsftpd[1]: [ftpuser] FTP response: Client "yyy.yyy.y.yy", "425 Failed to establish connection."
Jun  5 14:52:56 zhny vsftpd[1]: [ftpuser] FAIL UPLOAD: Client "yyy.yyy.y.yy", "/srv/ftpvs/ftpuser/TZE_1MIN_20130605_135200.dat", 0.00Kbyte/sec

Aqui você tem meu arquivo vsftpd.conf :

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
log_ftp_protocol=YES
syslog_enable=YES
connect_from_port_20=YES
idle_session_timeout=300
data_connection_timeout=300
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
chroot_local_user=YES
chroot_list_enable=YES
pasv_min_port=17000
pasv_max_port=17005
pasv_address=ip_of_the_ftp_server

No arquivo vsftpd.chroot_list eu só tenho uma linha com o usuário que eu criei para o ftp.

A única diferença que posso ver entre os cenários é que, com o FileZilla, o ftp está usando a conexão PASV. Pode ser este o motivo de não funcionar corretamente?

Quaisquer outros pensamentos e conselhos são bem-vindos.

    
por Kitinz 05.06.2013 / 14:57

1 resposta

3

Este é um problema bastante comum com o FTP quando há um sistema NAT entre o cliente e o servidor ou um firewall que não está configurado para FTP.

Seu primeiro exemplo usa o chamado FTP "modo passivo" enquanto seus outros dois exemplos usam o "modo ativo".

O FTP funciona através de duas conexões TCP diferentes: um canal de comando (na porta 21) usado para transferir comandos simples (login, diretório de listas, etc) e um canal de dados que é usado para enviar dados (isto é: um arquivo, mas também o resultado de uma solicitação de listagem de diretórios).

No modo ativo, ao transmitir um arquivo ou uma listagem de diretórios, o cliente especificará um endereço IP e um número de porta (comando PORT) para usar e o servidor estabelecerá uma nova conexão da porta 20 para a conexão especificada. Se o cliente estiver por trás de um firewall ou de um dispositivo NAT, ele impedirá que essa conexão seja bem-sucedida.

No modo passivo, o canal de dados é aberto na direção oposta: O cliente enviará o comando PASV e o servidor começará a escutar em uma porta livre aleatória (normalmente na faixa dinâmica) e informará ao cliente para se conectar a ele porta.

O modo passivo é muito mais comumente usado porque é relativamente fácil para um firewall configurado ou próximo ao servidor detectar o comando e permitir a nova conexão. Por outro lado, uma conexão em modo ativo exige que o cliente aceite uma conexão proveniente do servidor e que geralmente não funcione bem quando estiver atrás de um dispositivo NAT ou firewall corporativo.

a solução é tipicamente desabilitar o modo ativo no servidor ou garantir que todos os clientes usem o modo passivo. isso geralmente não é um problema com o cliente moderno (que é o padrão para o modo ativo), mas pode ser um problema com os scripts mais antigos ou FTP.

    
por 05.06.2013 / 16:02