Problema estranho: redefinição de conexão por pares

10

Estou tendo alguns problemas com o SSH no meu servidor Linux executando o CentOS. Posso me conectar ao meu servidor usando PuTTY ou ssh no windows cmd. O mesmo vale para o uso de FTP seguro. Posso me conectar ao servidor, obter uma lista de arquivos e está tudo bem. O problema ocorre quando tento enviar qualquer quantidade de dados pela rede.

Sempre que tento transferir algo além de um determinado limite, a conexão falha e vejo uma mensagem 'Conexão redefinida por ponto'. Eu tenho um arquivo sql com cerca de 3 MB no meu diretório pessoal. Se eu tentar enviá-lo por FTP, ele iniciará a transferência e morrerá após a transferência de cerca de 48k. Em seguida, iniciará uma nova conexão e transferirá outros 48k. Se eu usar o PuTTY e abrir uma sessão, eu posso conectar e entrar bem. Se eu tentar cat file.sqlnovamente, a conexão será encerrada e eu recebo a mensagem 'Connection reset by peer'. Indo da minha estação de trabalho local para o servidor, é a mesma situação. Eu tenho um pouco de código fonte que eu preciso confirmar no meu repositório svn hospedado no servidor, mas a mesma mensagem 'Conexão redefinida pelo par' aparece.

Sei que o problema está na minha estação de trabalho local porque posso usar o macbook e o ssh da minha esposa no servidor sem problemas. Posso ssh na caixa linux de um amigo (usando a mesma instalação putty) e sftp no meu servidor a partir deles e fazer o download do arquivo, abrir outra sessão ssh da caixa dele no meu servidor e criar o arquivo. Então, algo está acontecendo, mas não sei ao certo o que. Alguém tem alguma idéia?

Atualizar

Eu tenho tentado descobrir isso um pouco mais, e parece que há um limite rígido da quantidade de dados que posso transferir em uma única sessão ssh. Eu acerto imediatamente, se sim, cat file.sqlmas também posso continuar digitando ls -lum número consistente de vezes e também recebo a mensagem 'Conexão redefinida por pares'. Eu tentei:

  • gerando novas chaves ssh
  • reiniciando meu roteador
  • reiniciando meu computador
  • reiniciando o servidor remoto

Eu escrevi um tcpdump no servidor remoto, mas não entendo o TCP em um nível tão detalhado que faz muito sentido para mim. Ativei a depuração no ssh e aqui está a parte do log que antecedeu a conexão sendo redefinida:

Jul 24 23:10:56 server sshd[4507]: debug1: permanently_set_uid: 500/503
Jul 24 23:10:56 server sshd[4507]: debug1: Entering interactive session for SSH2.
Jul 24 23:10:56 server sshd[4507]: debug1: server_init_dispatch_20
Jul 24 23:10:56 server sshd[4507]: debug1: server_input_channel_open: ctype session rchan 256 win 16384 max 16384
Jul 24 23:10:56 server sshd[4507]: debug1: input_session_request
Jul 24 23:10:56 server sshd[4507]: debug1: channel 0: new [server-session]
Jul 24 23:10:56 server sshd[4507]: debug1: session_new: init
Jul 24 23:10:56 server sshd[4507]: debug1: session_new: session 0
Jul 24 23:10:56 server sshd[4507]: debug1: session_open: channel 0
Jul 24 23:10:56 server sshd[4507]: debug1: session_open: session 0: link with channel 0
Jul 24 23:10:56 server sshd[4507]: debug1: server_input_channel_open: confirm session
Jul 24 23:10:56 server sshd[4507]: debug1: server_input_channel_req: channel 0 request pty-req reply 1
Jul 24 23:10:56 server sshd[4507]: debug1: session_by_channel: session 0 channel 0
Jul 24 23:10:56 server sshd[4507]: debug1: session_input_channel_req: session 0 req pty-req
Jul 24 23:10:56 server sshd[4507]: debug1: Allocating pty.
Jul 24 23:10:56 server sshd[4505]: debug1: session_new: init
Jul 24 23:10:56 server sshd[4505]: debug1: session_new: session 0
Jul 24 23:10:56 server sshd[4507]: debug1: session_pty_req: session 0 alloc /dev/pts/2
Jul 24 23:10:56 server sshd[4507]: debug1: server_input_channel_req: channel 0 request shell reply 1
Jul 24 23:10:56 server sshd[4507]: debug1: session_by_channel: session 0 channel 0
Jul 24 23:10:56 server sshd[4507]: debug1: session_input_channel_req: session 0 req shell
Jul 24 23:10:56 server sshd[4508]: debug1: Setting controlling tty using TIOCSCTTY.
Jul 24 23:10:59 server sshd[4507]: Read error from remote host <my-ip>: Connection reset by peer
Jul 24 23:10:59 server sshd[4507]: debug1: do_cleanup
Jul 24 23:10:59 server sshd[4505]: debug1: do_cleanup
Jul 24 23:10:59 server sshd[4505]: debug1: PAM: cleanup
Jul 24 23:10:59 server sshd[4505]: debug1: PAM: deleting credentials
Jul 24 23:10:59 server sshd[4505]: debug1: PAM: closing session
Jul 24 23:10:59 server sshd[4505]: pam_unix(sshd:session): session closed for user <me>
Jul 24 23:10:59 server sshd[4505]: debug1: session_pty_cleanup: session 0 release /dev/pts/2

ATUALIZAÇÃO 2:

Cerca de uma semana atrás, modifiquei minhas configurações de ssh no meu servidor usando esta postagem da wiki: http://wiki.centos.org/HowTos/Network/SecuringSSH

Como ocasionalmente preciso acessar meu servidor do trabalho e porque a porta 21 está aberta em nosso firewall, alterei a porta ssh para 21. Para diagnosticar ainda mais esse problema, tentei reverter minhas configurações de ssh e alterei a porta ssh para 22 Baixo e eis que não encontro o erro quando uso a porta 22. Altere-o novamente para 21 e goste de relógio quando atingir 48k de dados transferidos - Conexão redefinida por pares.

Dado que posso obter a conexão inicial e que não tive problemas no passado ao estabelecer conexões ftp na porta 21, não parece que minha configuração de firewall é o problema.

Pelo menos neste momento, o problema foi reduzido para a porta ssh no meu servidor. Gire-o para 21 e problemas instantâneos, altere-o novamente para 22, não há problema algum ...

Alguém pode pensar por que a porta de escuta faria diferença? Novamente, é apenas na minha caixa do Windows XP que está causando problemas. Deixe-me saber se alguém tem alguma opinião sobre o que pode causar isso.

Atualização 2:

Apenas reduzi o problema e estou corrigido - é um problema de firewall, mas um problema de firewall do Windows, não no meu roteador. Se eu usar a porta 21 e desativar o firewall do Windows, não encontro a mensagem 'Redefinição de conexão por ponto'. Para responder à pergunta óbvia, sim, a porta 21 está aberta no firewall do Windows.

Como este computador está atrás do firewall no meu roteador, posso desativá-lo por enquanto, mas estaria interessado em descobrir o que está acontecendo aqui.

proflux
fonte
+1 Eu vejo o mesmo problema aqui em um PC com Windows 7 tentando conectar-se a um servidor SSH pela porta 21. A conexão é adequada para acesso ao shell até eu começar a usar o túnel na mesma conexão para transferir mais dados. A resposta de Alessandro abaixo corrigiu para mim.
Wim Coenen
veja também unix.stackexchange.com/questions/84843/…
Jens Timmerman

Respostas:

10

Você pode resolver usando a linha de comando com este comando (digite isto como administrador):

netsh advfirewall set global statefulftp disable

Alessandro Sperindé
fonte
+1 corrigiu isso para mim. Para maior clareza: este comando deve ser executado no PC com Windows.
Wm Coenen
Excelente, estou tendo esse problema exato há algum tempo. Tudo relacionado ao firewall do Windows 7. Ambos com Putty SSH acima de 21 e conexões NXclient (nxshh) acima de 21. netsh advfirewall set global statefulftp disable Isso permite que minha conexão nxclient agora conecte e conclua a conexão para que eu veja a área de trabalho.
1

Isso pode estar relacionado ao seu roteador tentar lidar com o rastreamento de conexão NAT FTP automaticamente. Isso aconteceria apenas na porta 21, não na 22. Confira http://www.faqs.org/docs/iptables/complexprotocols.html

Ricardo Pardini
fonte
Obrigado, vou verificar o artigo e ver se ele esclarece o que está acontecendo.
proflux 26/07/10
Ricardo parece estar correto. Veja a discussão em winscp.net/forum/viewtopic.php?t=9360 . Gostaria de saber se há algo explorável em qualquer edição desta gatilhos em ip_conntrack_ *