bloqueia logins locais no dispositivo reverso-ssh

2

Eu configurei um dispositivo ssh reverso com um Raspberry-Pi para uso em um local do cliente para conectar a um equipamento que eu tenho que suportar via um adaptador USB-para-RS232. Limpei isso com a equipe de TI do cliente, e o appliance já está configurado, testado e funcionando bem.

Mas, no interesse de endurecer a partir do acesso à rede local , gostaria de restringir logins para permitir apenas o login através do túnel SSH reverso, e não permitir que qualquer pessoa na rede do cliente local faça o login .

A conexão ssh reversa de saída usa um arquivo-chave de 4096 bits sem senha para se conectar ao servidor, mas ainda vejo um prompt de usuário / senha quando me reconecto do servidor para o Pi por meio da conexão reversa ssh. Isso não é um problema para mim, mas eu estava apenas preocupado em limitar a capacidade de qualquer pessoa fazer login localmente com um telnet ou ssh local. Eu já tenho uma boa senha na única conta ativa, então duvido que alguém consiga logar de qualquer maneira.

Seria bom se ainda permitisse logins na máquina local com um teclado USB conectado para fins de manutenção, mas isso não é obrigatório. O dispositivo está dentro de um compartimento de metal bloqueado em uma sala trancada, portanto, o acesso físico não autorizado não é uma grande preocupação. Eu só quero bloquear o acesso à rede local para telnet & ssh logins enquanto ainda permite ssh logins através do túnel ssh reverso.

    
por Shay Walters 21.08.2016 / 21:22

2 respostas

0

Como o RPi que está se conectando ao servidor e criando um túnel SSH reverso, você pode executar sshd no localhost no RPi.

Primeiro, adicione um bind_address ao comando de túnel inverso, ou seja, execute a chamada ssh do RPi para o servidor como:

ssh -R localhost:6060:localhost:22 -i path/to/key me@server

Sim, isso é localhost duas vezes:

  • localhost:22 é onde o tráfego é redirecionado no RPi.
  • localhost:6060 é a porta que vai escutar no servidor (você pode ou não desejar que isso esteja no localhost, já que o servidor está disponível na Internet e você provavelmente é o localhost).

Agora, no RPi, você pode adicionar /etc/ssh/sshd_config ao seguinte:

ListenAddress 127.0.0.1

E reinicie o sshd .

Agora, o RPi rejeitará as conexões na rede local para a porta 22, porque o soquete está ligado a localhost (no loopback, uma interface diferente daquela com o IP local), mas responderá ao túnel SSH reverso porque esse soquete se liga explicitamente a localhost no lado do túnel do RPi.

ssh -p 6060 user@rpi

Conectará do servidor ao RPi normalmente.

Nota: Isso pode ser perigoso, pois não há uma maneira fácil de fazer a resposta RPi às conexões da rede local novamente. A única maneira de consertar as coisas se algo quebrar muito mal é ir até lá e conectar uma tela e um teclado. Sério, teste primeiro, se você digitar um erro em algum lugar, precisará de acesso físico.

Nota 2: A única diferença real entre esta solução e a de Stephen Harris é que o RPi agora rejeitará as conexões para a porta 22. Se você quer isso ou quer que ele aceite as conexões e simplesmente rejeite a autorização, é uma questão de preferência (ou design honeypot :))

    
por 22.08.2016 / 05:04
1

Para o daemon ssh do seu RPi, veja as opções sshd_config e AllowUsers . Você pode especificar nomes de host nisso.

Como você é um tunelamento reverso, é possível que a conexão seja de localhost e, portanto,

AllowUsers yourusername@localhost

em /etc/ssh/sshd_config (ou onde quer que seu sistema operacional o coloque) pode ser suficiente. Lembre-se de reiniciar sshd (ou apenas SIGHUP) depois de alterar sshd_config .

Como você está tocando apenas em sshd , os logins do console serial não serão afetados.

    
por 21.08.2016 / 21:44