Como posso limitar o encaminhamento de porta ssh * remote *?

22

Preciso limitar quais portas podem ser remotamente ' ssh -R' encaminhadas por um usuário.

Eu sei sobre a permitopenopção em allowed_keys, mas como diz na página de manual, limita apenas o ssh -Lencaminhamento de porta local

Conforme discutido aqui, um usuário obteria o mesmo netcatou semelhante, mas, neste caso, o usuário não tem acesso ao shell

Eu também encontrei este tópico que fala sobre o uso do selinux ou LD_PRELOAD, mas nunca o configurei antes e não consigo encontrar informações sobre como fazer isso LD_PRELOAD.

talvez alguém tenha feito um patch para o openssh para implementar isso?

EDIT: Encontrei este relatório de bug, então acho que ainda não foi implementado

Lluís
fonte
Você encontrou uma solução para isso?
alex88
Eu não, eu acho que não pode ser feito até que o erro acima é fechado ou alguém escreve um patch para implementar isso
Lluís

Respostas:

3

Isso foi implementado no OpenSSH 7.8p1, lançado em 2018-08-24. Citação das notas de versão:

adicione uma diretiva PermitListen ao sshd_config (5) e uma opção permitlisten = allowed_keys correspondente que controla quais endereços de escuta e números de porta podem ser usados ​​pelo encaminhamento remoto (ssh -R ...).

Frank
fonte
4

Há uma opção no-port-forwardingque você pode usar, que impede todo o encaminhamento de porta. Apresente pelo menos a partir do OpenSSH 4.3p2 (CentOS 5.3 - máquina mais antiga à qual tenho acesso). Coloque no mesmo lugar que você colocaria permitopen.

sombrio
fonte
13
Desativar completamente o encaminhamento de porta parece um exagero e não é adequado para a pergunta. Presumo que o OP queira limitá- lo, mas permitindo alguns encaminhamentos de porta remota específicos.
gertvdijk
2
Sim, preciso permitir o encaminhamento de algumas portas
Lluís
0

Não é possível limitar isso usando ssh. Talvez o selinux ou o iptables possam ser usados ​​para esse fim. No entanto, existe uma estratégia alternativa que pode ou não atender às suas necessidades. Use a ligação aos soquetes UNIX. Isso deve estar disponível a partir da versão 6.8 do openssh.

Ao usar soquetes, você tem a ACL do sistema de arquivos (embora os soquetes respeitem que possa ser * nix dependente) à sua disposição e você pode usá-lo para impedir que um usuário se vincule aos soquetes de outros. No entanto, isso não impede a ligação às portas de forma alguma, portanto, dependendo do seu caso de uso, pode não ajudar, mas talvez as portas não importem se você pode usar apenas soquetes de maneira consistente.

Com os soquetes UNIX, o manuseio de arquivos de soquete pendentes pode ser problemático, pois os editores reversos tentam se reconectar. Eu tenho outra pergunta (e resposta) para esse problema. Em suma, você provavelmente também deseja usar StreamLocalBindUnlink yes:

Como limpar o soquete do túnel reverso SSH após a conexão ser fechada?

Timo
fonte
-1

Duplicar: /superuser/516417/how-to-restrict-ssh-port-forwarding-without-denying-it

Parece que você pode usar o seguinte?

No arquivo de configuração do servidor, há uma opção PermitOpen . Esta opção pode ser usada para especificar hosts e portas para os quais os encaminhamentos podem ser estabelecidos. Essa opção pode ser usada dentro de um bloco Match, para que possa ser restringida pelo usuário, grupo ou nome do host ou padrão de endereço IP.

Editar: Então, na configuração do servidor, adicione o seguinte

PermitOpen host: porta

PermitOpen IPv4_addr: port

PermitOpen [IPv6_addr]: porta

PHoBwz
fonte
1
Somente em U&L pode ser marcado como duplicado.
GAD3R
1
Como afirmado na pergunta, isso é -L e já é conhecido como uma solução não
alex88
1
Alguma vez haverá uma solução para isso (além do iptables)?
Daveave