Portas de netstat de túnel reverso de SSH


0

Eu tenho uma pergunta sobre o túnel reverso do SSH.
Eu tenho um servidor Ubuntu com o sshd instalado.
Eu abro um túnel reverso SSH de uma máquina remota. Nessa máquina, a conexão é reiniciada toda vez que o túnel é interrompido.

Sempre que um túnel é aberto, no servidor SSH eu posso ver duas conexões quando estou usando netstat. Uma conexão está escutando a porta do servidor interno. O outro está ouvindo em uma porta externa. O último é o túnel SSH.

Como exemplo:

dado 203.0.113.10: meu servidor SSH e 10.34.23.12 meu PC remoto, 5000 a porta no meu PC remoto eu gostaria de acessar a

ssh -R 1122:localhost:5000 serveruser@203.0.113.10

Agora do lado do servidor eu tenho duas conexões de escuta, que se parece com isso

tcp6    0    :::1122              :::*                 LISTEN
tcp6    0    0 203.0.113.10:22    10.34.23.12:62734    ESTABLISHED

Eu uso / corro o nc comando do servidor, para verificar se o túnel funciona

nc -z -v -w5 127.0.0.1 1122

Às vezes acontece que a conexão externa morre, então meu netstat saída será

`tcp6    0    0 203.0.113.10:22    10.34.23.12:62734    ESTABLISHED`

Existe uma maneira de verificar qual túnel não tem uma porta externa escutando?

Quer dizer, há uma maneira de verificar quando meu porto 1122 morre?
Minha solução seria matar o processo sshd vinculado ao túnel sem qualquer porta externa (10.34.23.12:62734). O problema é que eu tenho um outro túnel SSH nesta máquina que eu não gostaria de matar, então killall sshd não seria uma opção.

Obrigado!

Editar 1:

Solução possível : O comando netstat -lptun (e o netstat -pant sugerido por Paul) faz a ligação que preciso para tentar resolver isso. Agora estou testando essa solução em produção.

#!/bin/sh
for pid in `lsof -i -n | egrep '\<ssh\>' | awk '{print $2}'`; do
  foundpid="$(netstat -lptun | grep :::11 | grep $pid)"
  if [ -z "$foundpid" ]
  then
    echo PID does not have any external port, killing the pid $pid
    kill $pid
  fi
done

Se você fizer netstat -pantsão ambas as linhas netstat pertencentes ao mesmo processo e diferentes do outro processo ssh que você deseja manter?
Paul

Obrigado Paul, antes de ler o seu comentário (meu erro), eu estava verificando a opção -lptun. Agora estou testando a solução "Edit 1".
Davide Gironi

Respostas:


0

O que você quer dizer com túnel "reverso"?

O parâmetro -R refere-se a um túnel iniciado remotamente, em vez do parâmetro -L que se refere a um túnel iniciado localmente.

Portanto, do ponto de vista do cliente SSH, o parâmetro -R escutará o tráfego no terminal remoto (o que significa o servidor SSH). Quando o computador que executa o servidor SSH recebe tráfego na porta especificada (1122), esse computador envia essa informação através do software SSH. Especificamente, enviará essa informação através do túnel SSH. Conforme as informações são enviadas pelo túnel SSH, elas são criptografadas como todo o tráfego SSH. Além disso, uma pequena nota é adicionada a essa informação, que é (parafraseada aqui para dizer) "enviar o tráfego para a porta localhost 5000".

Quando o tráfego na outra extremidade do túnel SSH (neste exemplo, estamos falando agora do computador que executa o cliente SSH) recebe o tráfego, ele vê a nota sobre onde o tráfego irá. Então, esse computador alcança a porta 5000 localhost. Esse é o momento em que o nome do host "localhost" é resolvido. Portanto, neste exemplo, o "localhost" se referirá ao cliente SSH. (Em contraste, se você usou -L em vez disso, usar "localhost" como esse ainda seria interpretado pelo tráfego final recebido pelo túnel, então a frase "localhost" seria interpretada pelo servidor SSH.)

Agora, sua melhor aposta é descobrir por que o túnel continua em colapso. Eu tenho usado normalmente túneis -L (locais), mas eu os ignorei por muitos dias antes (às vezes) decidindo usar um, e funciona muito bem. Eu presumo que o túnel possa ser desmoronado por qualquer extremidade. Verifique os dois lados dos logs. Você pode querer verificar a documentação do OpenSSH para ver se existe algum tipo de timeout com o qual você está lidando.

Se você quiser ir a rota incompreensível de contornar o problema (ao invés de consertá-lo), matando o sshd e reiniciando, você pode fazer isso. Como observado, você não quer usar killall sshd porque pode haver outra conexão sshd. Você poderia tentar pkill para eliminar qualquer programa que se conecte a 203.0.113.10 (ou é 10.34.23.12?) ou o número da porta (1122), mas, novamente, isso poderia levar a alguns falsos positivos. Você tem uma maneira mais segura de contornar o problema; Envolve até mesmo a mesma proposta de reiniciar o servidor.

Você poderia ter o sshd usando um arquivo de configuração personalizado ( -f configuration file ), ou você pode especificar informações de configuração na linha de comando -o ). por exemplo.:

sshd -o PidFile /var/run/sshd-remPC-tunnel.pid

(Além disso, você incluiria suas outras opções desejadas nessa linha de comando.)

Isso coloca o número de identificação do processo nesse arquivo quando você inicia o sshd. Então você pode:

kill $( cat /var/run/sshd-remPC-tunnel.pid )

(Nota: Você pode precisar de permissão. Eu estou muito intencionalmente não me importando com isso, a fim de manter minha resposta simples. sshd pode criar o arquivo, e você pode com sucesso cat quando você deseja kill isto. Execute testes e faça as alterações necessárias.)

Nota: Você provavelmente NÃO quer apenas reiniciar automaticamente o túnel a cada 5 minutos (para automatizar a correção do problema). Porque, se você tiver uma conexão bem-sucedida, isso interromperá a conexão bem-sucedida. Então, imagino que isso seria algo planejado para ser feito manualmente.


Obrigado, sim estou falando sobre o túnel reverso pela opção -R. Eu estou usando aqueles para "ignorar" o firewall nas máquinas clientes. A máquina do cliente está conectada através de 3G. Para ser honesto os clientes são janelas, não consigo encontrar uma maneira de logar. Obviamente, estou tentando entender por que os túneis morrem, inspecionando o /var/log/auth.log. Esta é a minha pergunta sobre como manter os túneis vivos: superuser.com/questions/1105588/… . matar túneis não é minha opção preferida. Escrevendo este replay, encontrei uma solução possível, consulte "Edit 1".
Davide Gironi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.