Posso desativar o acesso ao shell interativo durante o tunelamento do tráfego da web por meio do SSH?

8

Estou procurando implementar o tunelamento SSH como uma solução de VPN barata para usuários externos acessarem aplicativos da Web voltados apenas para a Intranet.

Atualmente estou usando o Ubuntu Server 10.04.1 de 64 bits com o OpenSSH instalado.

Estou usando o Putty nas caixas do Windows para criar um túnel em uma porta local para o meu servidor ssh.

start putty -D 9999 mysshserver.com -N

Eu então uso o Firefox para usar um proxy SOCKS em localhost: 9999.

O sinalizador -N desabilitará o shell interativo do lado do cliente. Existe uma maneira de fazer isso no lado do servidor?

Além de desabilitar o acesso root, usando a autenticação de chave rsa e alterando a porta padrão; Existem outras práticas de segurança óbvias que devo seguir para esse fim? Meu objetivo é simplesmente conseguir encapsular o tráfego da Web.

    
por CT. 02.03.2011 / 20:53

4 respostas

11

Após quatro anos, esta resposta mereceu uma atualização. Embora eu usei originalmente o authorized_keys e provavelmente o usaria ainda em alguns casos selecionados, você também pode usar o arquivo de configuração central do servidor sshd_config .

sshd_config

Você pode designar (para seu caso de uso específico) um grupo, como proxy-only ou Match usuários individuais. Em código%. Isso é feito após as configurações globais e revoga, repete ou refina algumas das configurações dadas nas configurações globais.

Observação: algumas das sintaxes / diretivas usadas em sshd_config estão documentados na página sshd_config(5) de man . Em especial, leia a seção PATTERNS de ssh_config(5) .

Para um grupo, isso significa que seu bloco ssh_config(5) começaria assim:

Match group proxy-only

Você pode Match dos seguintes critérios: Match , User , Group , Host , LocalAddress e LocalPort . Para corresponder a vários critérios, simplesmente separe os pares de padrões de critérios ( Address acima).

Dentro de tal bloco, que é tradicionalmente indentado de acordo com a brevidade (mas não precisa), você pode declarar as configurações que deseja aplicar ao grupo de usuários sem precisar editar cada arquivo group proxy-only para membros de esse grupo.

A configuração authorized_keys de no-pty seria espelhada por uma configuração authorized_keys e PermitTTY no se tornaria command="/sbin/nologin" .

Além disso, você também pode definir mais configurações para satisfazer a paranóia de um administrador, como ForceCommand /sbin/nologin - inserir o usuário em sua pasta pessoal e acabar com algo assim:

Match group proxy-only
    # AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand /sbin/nologin
    # GatewayPorts yes
    # KbdInteractiveAuthentication no
    # PasswordAuthentication no
    # PubkeyAuthentication yes
    # PermitRootLogin no
    PermitTTY no

(verifique se você precisa ou quer as linhas comentadas e descomente conforme necessário)

O chroot é um token que é substituído pelo diretório hoe do usuário ( %h renderia o nome de usuário e %u um sinal de porcentagem). Eu achei %% particularmente útil para confinar meus ChrootDirectory usuários:

Match group sftp-only
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp
    PasswordAuthentication no

Por favor, lembre-se que apenas algumas certas diretivas podem ser usadas em um bloco sftp-only . Consulte a página Match man para obter detalhes (pesquise sshd_config(5) ) .

authorized_keys

NB: a parte abaixo desta observação foi minha resposta original. Enquanto isso - mas também depende dos recursos da sua versão exata de Match - eu usaria o método descrito acima na maioria dos casos.

Sim, você pode, com a granulação fina, atribuir chaves públicas. Além do nologin, como recomendado pelo ajdecon, sugiro definir o seguinte na frente da entrada de chave em sshd :

no-pty ssh-rsa ...

O no pty informa ao servidor que nenhum pseudo-terminal deve ser alocado para aquela chave.

Você também pode forçar a execução de algo como nologin para uma chave específica, colocando o seguinte:

command="/sbin/nologin",no-pty ssh-rsa ...
    
por 02.03.2011 / 21:34
3

Para qualquer usuário somente de tunelamento, altere seu shell de login para / sbin / nologin. Dessa forma, o usuário não poderá acessar um shell no servidor, mas ainda poderá executar os túneis ssh do seu cliente.

    
por 02.03.2011 / 21:29
0

Eu recomendo testar Tunnelier . É muito mais fácil configurar / gerenciar.

    
por 02.03.2011 / 21:00
0

Eu sei que esta pode não ser a resposta que você está procurando, mas você já pensou em usar o OpenVPN como alternativa?

    
por 02.03.2011 / 21:01