openssh

Dicas para usar o SSH

agosto 31, 2014 - Linux

O Secure Shell (SSH) é um excelente sistema de comunicação segura e não apenas uma ferramenta para realização de logins remotos. Ele pode ser usado para funcionar túnel para diversos protocolos, incluindo o próprio protocolo de transporte TCP (permitindo rotear informações entre portas, funcionando como um tipo de VPN); além disso, com o programa SSHFS é possível montar um sistema de arquivos remoto sobre o SSH.

As dicas a seguir mostram algumas configurações que permitem ir além do uso tradicional do SSH.


Dica 1 – Opções básicas para o cliente SSH

A maneira mais comum de se utilizar o SSH é abrir um terminal remoto semelhante ao telnet ou rlogin, usando um comando do tipo

A opção -p permite escolher outra porta para encontrar o servidor SSH (sshd); usar portas diferentes da porta 22 é uma tática comum de segurança para dificultar ataques.

As diversas opções de uso do cliente SSH podem ser visualizadas diretamente com man ssh. Essa informação também está disponível no man7.org.

Os arquivos de configuração do SSH são /etc/ssh/ssh_config (cliente) e /etc/ssh/sshd_config (servidor). Além das configurações globais do sistema, cada usuário pode especificar a sua no diretório ~/.ssh. As opções de configuração do SSH podem ser consultadas com man ssh_config (cliente) e man sshd_config (servidor). Essa informação também está disponível no man7.org para ssh_config e sshd_config.

Algumas das opções de configuração do servidor SSH são muito recomendadas, para aumentar o nível de segurança do sistema, que podem ser alteradas no arquivo /etc/ssh/sshd_config conforme a tabela a seguir:

PermitRootLogin=no Não aceitar conexões com o usuário root. O usuário pode tornar-se root usando sudo ou su, mas somente após a conexão segura haver sido estabelecida: isso contribui para proteger a senha do super-usuário.
Protocol=2 Desabilita o acesso de clientes usando o protocolo 1, permitindo apenas o protocolo 2 do SSH; uma vez que o protocolo 1 possui falhas de segurança conhecidas, pode ser um elo fraco na segurança do sistema.
Port=… Você pode modificar a porta na qual o servidor SSH vai aceitar conexões para um valor diferente do padrão (22) para dificultar o acesso de máquinas não desejadas.
Cyphers=… Você pode selecionar somente os algoritmos de criptografia mais fortes da lista de algoritmos suportados. Lembre-se que quanto mais sofisticada a criptografia, mais lenta se tornará a comunicação.

Da mesma forma que o cliente SSH substitui programas não-seguros como o telnet ou rlogin, no pacote do SSH são instalados vários programas utilitários, que permitem tornar seguras operações de troca de arquivos entre máquinas, de forma a substituir os comandos inseguros como rcp (por scp) e ftp (por sftp), que funcionam exatamente como seus equivalentes inseguros. Você deve desabilitar esses serviços e utilizar apenas as versões baseadas no SSH.


Dica 2 – Usando Chaves Assimétricas para maior segurança

Para aumentar a segurança, o SSH pode ser configurado para não iniciar uma sessão baseando-se em nomes de usuário e suas respectivas senhas, e sim através de autenticação por chaves assimétricas. A vantagem dessa forma de autenticação é que as chaves são longas sequências de bits, e diferentemente dos pares usuário/senha, não são passíveis de ataques de força-bruta ou hashing reverso.

Uma chave assimétrica é um par de números contendo uma longa sequência de bits; um dos números deve ser mantido em segredo – é a sua chave privada. O outro é público, podendo ser distribuído sem restrições, denominada chave pública. Embora a chave pública seja conhecida, é seguro utilizá-la para criptografar informações, que somente podem ser decriptografadas com o uso da chave privada, que é mantida em segredo, e não é jamais trocada durante a comunicação.

O SSH permite realizar o processo de autenticação utilizando chaves assimétricas; uma vez confirmada a autenticidade da chave fornecida pelo cliente, a conexão é iniciada utilizando a criptografia convencional (chave simétrica), que é mais rápida do que utilizando chaves assimétricas; a chave simétrica para a conexão é gerada aleatoriamente, e é trocada criptografada durante a autenticação, baseada na criptografia com chaves assimétricas.

Na máquina do servidor SSH serão armazenadas suas chaves públicas, enquanto que suas chaves privadas ficarão guardadas com você, na(s) máquina(s) cliente. Você pode ou não proteger suas chaves privadas com uma senha, que você precisará especificar no momento de sua criação. O pacote SSH provê o aplicativo ssh-keygen para criar as chaves.

Uma vez executado o comando acima, dois arquivos serão salvos na pasta do seu usuário, ~/.ssh/id_rsa e ~/.ssh/id_rsa.pub; o primeiro arquivo contém a sua chave privada e o segundo a respectiva chave pública. A chave privada pode estar criptografada, caso você tenha especificado uma senha (passphrase) não vazia ao comando ssh-keygen; neste caso, essa senha lhe será solicitada sempre que o SSH precisar acessar a chave. Normalmente não é necessário usar uma senha quando a chave privada está segura em seu próprio computador, protegida pelo seu login.

Proteja a chave privada e copie a pública para um pen-drive ou diretamente para o servidor SSH, usando scp. No servidor, ela deverá ser anexada ao arquivo de chaves autorizadas, na pasta ~/.ssh/authorized_keys.

Com isso, a autenticação passará a ser realizada pelas chaves assim criadas.

Se você for realmente paranóico, você pode obrigar que a autenticação de usuários pelo servidor SSH seja realizada exclusivamente através de chaves assimétricas, desabilitando a autenticação por senhas, no arquivo /etc/ssh/sshd_config:


Dica 3 – Tunelando X-Windows através do SSH

Se você possui um servidor X-Windows na máquina cliente (por exemplo, X-Quartz no MacOS ou X-Ming no Windows ou use o Linux!), é perfeitamente possível executar sessões gráficas em um terminal SSH, sem a necessidade de utilitários como o xterm e outros.

Basta realizar a conexão usando a opção -X.


Dica 4 – Roteando Portas

O SSH pode ser utilizado também para tornar seguras conexões realizadas em portas TCP utilizadas por outras aplicações. O programa funciona nesse caso como uma espécie de VPN.

A forma mais simples para criar um túnel de porta TCP é usando o programa cliente. Ele vai abrir um socket local na porta que você especificar, e todo o tráfego de dados através dessa porta será criptografado com as chaves da sessão aberta e enviado ao servidor SSH, onde será então decriptografado e encaminhado ao servidor e porta remotos, especificados no comando. Use a seguinte sintaxe:

[porta local] é um número de porta TCP que vai funcionar como a porta remota, de forma transparente;

[servidor remoto] é um endereço IP ou URL que vai ser utilizado pelo servidor SSH para fazer a conexão com os dados decriptografados. Ele pode ser localhost, se o programa que está sendo protegido está sendo executado na mesma máquina que o próprio servidor SSH;

[porta remota] é a porta de destino da aplicação que se quer proteger com o SSH.

O par [usuário]@[servidor] é o mesmo do comando SSH padrão para iniciar uma sessão SSH.

Exemplo:  Encapsulando conexões ao servidor MySQL

Neste exemplo, a porta 13306 da máquina local passa a se comportar como se fosse a porta 3306 da máquina onde o servidor MySQL está sendo executado, de forma transparente para as demais aplicações. Você pode inclusive conectar outras máquinas a ela usando o endereço IP da sua máquina local.

Preste atenção ao fato de que o endereço que se encontra no interior da opção -L é aquele visto pelo servidor SSH, não pela máquina local, onde o programa cliente está sendo executado. No caso deste exemplo, o IP 192.168.0.55 pode inclusive não ser nem sequer acessível à sua máquina local, por ser um endereço IP da uma rede privativa e a máquina cliente pode estar fora dela.

A porta 3306 do servidor MySQL pode ser então bloqueada para acesso no firewall da máquina ou limitada somente à máquina na qual o servidor SSH é executado. A partir de então, somente conexões seguras (através do SSH) poderão ser feitas ao servidor MySQL. Você pode ainda permitir somente o acesso à porta 3306 no interior da rede local, mas bloqueá-la no firewall da rede, permitindo apenas o acesso à porta do servidor SSH (normalmente 22). Geralmente é uma boa ideia permitir o acesso externo a essa porta e somente a ela.


Dica 5 – Montando um Sistema de Arquivos remoto

Existe um grande número de tipos diferentes de protocolos para compartilhamento de arquivos, e essa é justamente a principal vantagem para se usar o próprio SSH para essa tarefa. Além de ser um protocolo seguro, a maioria dos sistemas operacionais possuem implementações dele, o que torna o compartilhamento de arquivos baseado no SSH bastante universal.

Para montar um sistema de arquivos sobre o SSH, é necessário instalar o software SSHFS. Ele pode ser baixado no site oficial ou instalado a partir do gerenciador de pacotes do seu sistema operacional:

Uma vez instalado o SSHFS, basta montar os diretórios desejados:

a opção allow_other quase sempre será necessária, do contrário você apenas poderá acessar os arquivos como usuário root, o que normalmente não é o desejado.

Se você está usando autenticação com chaves (dica 2), é necessário fornecer essa informação ao montar o sistema de arquivos usando a opção -o IdentityFile=/caminho/para/a/chave, por exemplo ~/.ssh/id_rsa.

Após o uso, o ponto de montagem pode ser desmontado normalmente, usando o comando umout:

Você pode montar diretórios com o SSHFS automaticamente, alterando o arquivo /etc/fstab, incluindo uma linha no formato

Um excelente tutorial sobre como utilizar o SSHFS pode ser encontrado neste site.

› tags: Linux / Redes / Segurança / SSH /

Deixe um comentário

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">