[Artigo] Dominando o SSH

Dicas e conf's para servidores Linux
Avatar do usuário
Elton
Administrator
Administrator
Mensagens: 1260
Registrado em: 10 Jun 2013 12:44
Status: Offline

[Artigo] Dominando o SSH

Mensagem por Elton »

Introdução
Uma vantagem no uso do Linux, apontada por muitos administradores de rede, é a facilidade de administrar o sistema remotamente, tanto via linha de comando (usando o SSH) quanto com acesso à interface gráfica (usando o NX Server, o VNC ou o próprio SSH). Essa é uma necessidade básica para qualquer um que administra diversos servidores.
Hoje em dia, poucas empresas hospedam seus websites "in house", ou seja, em servidores instalados dentro da própria empresa. Quase sempre os servidores ficam hospedados em datacenters, complexos que oferecem toda a estrutura necessária para que os servidores fiquem no ar de forma confiável, incluindo links redundantes (se o link principal cai, existe um segundo de reserva), no-breaks de grande porte, geradores, refrigeração (a temperatura ambiente mais baixa ajuda os componentes a trabalharem de forma mais estável) e assim por diante.
Isso significa que apesar do servidor ser "seu", você não tem nenhum tipo de acesso físico a ele. Não pode usar o teclado ou mouse por exemplo, tudo precisa ser feito a distância. No Linux, toda a configuração do sistema, instalação de novos programas, etc. pode ser feita a partir do modo texto, o que permite configurar o servidor e mantê-lo atualizado remotamente, via SSH. Outro ponto interessante é que, apesar de ele ser uma ferramenta nativa do Unix, existem clientes SSH também para Windows e outras plataformas, permitindo que o responsável administre o servidor mesmo a partir de uma estação Windows.
Outra possibilidade interessante para o SSH é o suporte a distância. Praticamente tudo pode ser feito remotamente, desde alterações na configuração do sistema, instalação de novos programas ou atualizações de segurança, até a instalação de um novo kernel (você instala, configura o grub e em seguida reinicia a máquina torcendo para que tudo esteja correto e ela volte depois de dois minutos). É possível até mesmo fazer uma reinstalação completa do sistema remotamente. Nesse caso, você instalaria a nova cópia em uma partição separada, usando um chroot, e configuraria o gerenciador de boot para iniciá-la por default depois do reboot.
Outro uso comum, desta vez dentro das redes locais, é o uso remoto de aplicativos. Em muitas situações faz sentido instalar determinados aplicativos em um servidor central e abrir sessões remotas nos clientes. Isso permite centralizar as informações no servidor (facilitando os backups) e, ao mesmo tempo, usar menos recursos nos clientes, permitindo o uso de micros mais antigos. O exemplo mais desenvolvido é o LTSP, que permite usar micros antigos, de praticamente qualquer configuração, como clientes de um servidor rápido. Um único servidor pode atender a 20 ou até mesmo 30 clientes.
Entendendo o SSH

O SSH é a minha ferramenta preferida. Ele permite administrar máquinas remotamente (executando tanto comandos em modo texto quanto aplicativos gráficos), permite transferir arquivos de várias formas diferentes e, como se não bastasse, permite também encapsular outros protocolos, permitindo, por exemplo, acessar uma sessão do VNC através de um túnel seguro.
A grande vantagem do SSH sobre outras ferramentas de acesso remoto é a grande ênfase na segurança. Um servidor SSH bem configurado é virtualmente impenetrável e você pode acessá-lo de forma segura, mesmo que a sua rede local esteja comprometida. Ele utiliza um conjunto de técnicas de criptografia para assegurar que apenas as pessoas autorizadas tenham acesso ao servidor, que todos os dados transmitidos sejam impossíveis de decifrar e que a integridade da conexão seja mantida.
São previstas respostas para diversos tipos de ataques conhecidos. O SSH detecta casos em que o servidor tenha sido substituído por outra máquina, situações nas quais se tenta injetar dados na conexão (ou seja, tirar proveito de uma conexão aberta para incluir pacotes com comandos adicionais) e inclui até mesmo técnicas de "despiste", que tornam muito mais complicado descobrir em qual pacote encriptado foi transmitida a senha de acesso, por exemplo, dificultando a vida de quem pretende descobrir a senha usando um ataque de força bruta.
A idéia central é que, mesmo em situações onde seja fácil interceptar a transmissão (como no caso de uma rede wireless pública), seja impossível descobrir o conteúdo dos pacotes, devido à encriptação. É possível ainda, utilizar um par de chaves em vez de uma senha como forma de autenticação. Nesse caso, além de possuir a chave privada (um arquivo que pode ser salvo no HD, em um pendrive ou mesmo em um smartcard), é preciso saber a passphrase, que pode ser uma senha especialmente longa e difícil de adivinhar.
Você poderia argumentar que qualquer algoritmo de encriptação pode ser quebrado via força bruta (onde simplesmente são testadas todas as possibilidades possíveis, até encontrar a combinação correta), de forma que nenhum sistema de encriptação é inteiramente seguro. Entretanto, ataques de força bruta só são realmente viáveis contra chaves de 40 ou 64 bits; acima disso é inviável, pois a cada bit adicionado, o processo torna-se exponencialmente mais demorado.
Um exemplo de protocolo pouco seguro é o WEP de 64 bits (que na verdade utiliza uma chave de 40 bits), usado em redes wireless pouco protegidas. Ele pode ser quebrado em pouco tempo, caso você consiga capturar um volume considerável de transmissões usando um sniffer (um programa que captura a transmissão da rede, como o Kismet). O DES, um dos algoritmos mais tradicionais, que usa chaves de 64 bits (reais), pode ser quebrado em menos de um dia, caso você tenha acesso a um cluster de 100 máquinas com processadores Xeon ou Opteron quad-core.
Uma chave de 64 bits é cerca de 16 milhões de vezes mais difícil de quebrar via força bruta do que uma de 40 bits, como as que eram utilizadas no SSL dos navegadores a até poucos anos. Uma chave de 128 bits por sua vez, é (arredondando) 18.447.000.000.000.000.000 vezes mais demorada de quebrar que uma de 64 bits, de forma que, uma chave de 64 bits pode ser quebrada caso você tenha o tempo e os recursos necessários à disposição, mas uma de 128 (sem brechas conhecidas) é impossível de quebrar com tecnologia atual.
O perigo no caso dos algoritmos de encriptação não são propriamente os ataques de força bruta (que exigem muito tempo e recursos), mas sim falhas que permitam descobrir a chave usada em menos tempo. As versões originais do WEP (o sistema de encriptação para redes wireless anterior ao WPA), por exemplo, podiam ser quebradas rapidamente devido a um conjunto de falhas no algoritmo usado, o que levou os fabricantes a atualizarem rapidamente todos os seus produtos. Outro exemplo é o sistema usado na encriptação dos DVDs, que é quebrado em poucos segundos por uma máquina atual, utilizando um algoritmo de poucas linhas.
Felizmente, este não é o caso dos algoritmos usados no SSH. Por serem abertos, qualquer falha similar que pudesse eventualmente existir já teria sido descoberta e corrigida. O SSH é usado em tantos servidores importantes que uma brecha grave poderia (literalmente) parar o mundo. Por isso, todo o código é exaustivamente auditado por uma variedade de empresas e órgãos governamentais.
O SSH utiliza chaves assimétricas para fazer a autenticação. As chaves assimétricas são um sistema muito interessante, onde temos um par de chaves em vez de uma única chave simétrica. Uma (a chave pública), permite apenas encriptar dados, enquanto a segunda (a chave privada) permite desencriptar as informações embaralhadas pela primeira. O grande segredo é que qualquer informação embaralhada usando a chave pública pode ser recuperada apenas usando a chave privada correspondente. Como o nome sugere, a chave pública pode ser distribuída livremente, pois serve apenas para gerar as mensagens encriptadas, sem permitir lê-las posteriormente.
Quando você se conecta a um servidor SSH, seu micro e o servidor trocam suas respectivas chaves públicas, permitindo que um envie informações para o outro de forma segura. Através deste canal inicial é feita a autenticação, seja utilizando login e senha, seja utilizando chave e passphrase (como veremos a seguir).
Até aqui, tudo é feito utilizando chaves de 512 bits ou mais (de acordo com a configuração). O problema é que, embora virtualmente impossível de quebrar, este nível de encriptação demanda um volume muito grande de processamento. Se todas as informações fossem transmitidas desta forma, o SSH seria muito lento.
Para solucionar este problema, depois de fazer a autenticação, o SSH passa a utilizar um algoritmo mais simples (que demanda muito menos processamento) para transmitir os dados. Por padrão é utilizado o 3DES (triple-DES), que utiliza uma combinação de três chaves DES, de 64 bits cada. As chaves são trocadas periodicamente durante a conexão, o que torna o sistema quase impossível de quebrar. Na configuração do servidor e/ou cliente, é possível especificar outro algoritmo, como o Blowfish. Isso garante uma boa relação entre segurança e desempenho.
O SSH é dividido em dois módulos. O sshd é o módulo servidor, um serviço que fica residente na máquina que será acessada, enquanto ossh é o módulo cliente, um utilitário que você utiliza para acessá-lo.
Para instalar o SSH no servidor, basta instalar o pacote "openssh-server" usando o gerenciador de pacotes, como em:


"Colaborar atrai amigos, competir atrai inimigos ..."


LinkedIn: Elton Pereira Leite Gomes

Voltar para “Servidores”