Proteger conexões SSH ajuda a proteger seu sistema Linux e seus dados. Os administradores de sistema e usuários domésticos também precisam proteger os computadores conectados à Internet. Aqui estão 10 maneiras fáceis de ajudá-lo a proteger seu servidor SSH .
Alguns princípios básicos sobre segurança SSH
SSH significa Secure Shell. O protocolo SSH ou ferramenta de software permite que administradores de sistema e usuários façam conexões seguras com computadores remotos usando esse protocolo.
O protocolo SSH é um protocolo criptografado projetado para fornecer uma conexão segura em uma rede insegura como a Internet. O SSH no Linux é baseado na versão portátil do projeto OpenSSH. Ele é implementado em um modelo cliente-servidor clássico com um servidor SSH aceitando conexões de clientes SSH. O cliente é usado para conectar-se ao servidor e expor a sessão a usuários remotos. O servidor aceita a conexão e inicia a sessão.
Em sua configuração padrão, o servidor SSH irá “escutar” conexões de entrada no Transmission Control Protocol (TCP), porta 22. Por ser uma porta padronizada e popular, é alvo de ameaças de atores e bots maliciosos.
Atores maliciosos lançam bots que verificam intervalos de endereços IP em busca de portas abertas. Em seguida, ele investiga essas portas em busca de vulnerabilidades exploráveis. Pensar que estou seguro, que existem muitos alvos maiores e melhores do que eu para os bandidos atingirem, é completamente errado. Esses bots não escolhem seus alvos com base em nenhum critério, eles estão apenas procurando uma forma de penetrar no sistema.
Você será uma vítima se não proteger seu sistema.
Fricção de segurança
Um ponto de atrito de segurança é qualquer situação em que a tarefa principal é impedida ou atrasada devido a requisitos de segurança.
O atrito de segurança causa desconforto (em qualquer nível) para usuários e outras pessoas quando você implementa medidas de segurança. Pessoas novas em sistemas de computador podem se preocupar se precisarão realmente digitar uma senha toda vez que fizerem login no mainframe. Para eles, isso também é uma forma de atrito de segurança.
A introdução de medidas de segurança muitas vezes incluirá alguma forma de atrito para algumas pessoas. Os proprietários de empresas devem pagar por essas medidas. Os usuários de computador podem ter que mudar hábitos ou lembrar diferentes informações de autenticação, adicionando etapas para se conectarem com sucesso. Os administradores de sistema terão trabalho adicional a fazer para implementar e manter as novas medidas de segurança.
Apertar e bloquear um sistema operacional Linux ou semelhante ao Unix pode ser rápido. As medidas de segurança aqui são um conjunto de etapas fáceis de seguir que irão melhorar a segurança do computador sem a necessidade de aplicativos de terceiros e intervenção profunda de firewall .
Use o protocolo SSH versão 2
Em 2006, o protocolo SSH foi atualizado da versão 1 para a versão 2. Esta é uma atualização significativa. Há muitas mudanças e melhorias, especialmente em criptografia e segurança, e a versão 2 não é compatível com versões anteriores da versão 1. Para evitar conexões de clientes da versão 1, você pode especificar computadores para aceitarem apenas conexões da versão 2.
Para fazer isso, edite o arquivo /etc/ssh/sshd_config usando o seguinte comando:
sudo gedit /etc/ssh/sshd_config

Adicione a seguinte linha:
Protocol 2
![Como proteger um servidor SSH Como proteger um servidor SSH]()
E salve o arquivo e reinicie o processo do daemon SSH usando o seguinte comando:
sudo systemctl restart sshd
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Teste a nova configuração em ação mudando para outra máquina e tentando fazer o SSH na máquina de teste. Usaremos a opção -1 (protocolo 1) para forçar o comando ssh a usar a versão 1 do protocolo.
ssh -1 dave@howtogeek.local
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Solicitação de conexão recusada. Certifique-se de que você ainda consegue se conectar ao protocolo 2. Usaremos -2 (protocolo 2) para testar.
ssh -2 dave@howtogeek.local
![Como proteger um servidor SSH Como proteger um servidor SSH]()
O fato do servidor SSH estar solicitando uma senha é um sinal positivo de que a conexão foi feita e você está interagindo com o servidor. Os clientes SSH modernos usarão o protocolo 2 por padrão; não precisamos especificar o protocolo 2, desde que o cliente esteja atualizado.
ssh dave@howtogeek.local
![Como proteger um servidor SSH Como proteger um servidor SSH]()
A conexão foi aceita.
Evite o portão 22
A porta 22 é a porta padrão para conexões SSH. Se uma porta diferente for usada, ela adiciona um pouco de Segurança Através da Obscuridade (STO) ao seu sistema. A segurança através da ambiguidade nunca deve ser considerada uma medida de segurança real. Na verdade, alguns bots de ataque mais inteligentes investigam todas as portas abertas e decidem que serviço estão executando, em vez de confiar em uma simples lista de pesquisa de portas e presumir que elas fornecem um serviço normalmente. Mas usar uma porta fora do padrão pode ajudar a reduzir o tráfego ruim na porta 22.
Para configurar uma porta não padrão, edite o arquivo de configuração SSH conforme acima.
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Exclua o # no início da linha da Porta e substitua 22 pelo número de sua escolha. Salve o arquivo de configuração e reinicie o daemon SSH.
Em outro computador usaremos o comando ssh para conectar-se ao servidor. O comando ssh padrão usa a porta 22:
ssh dave@howtogeek.local
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Ligação recusada. Tente novamente e especifique a porta 470 usando a opção –p (porta):
ssh -p 479 dave@howtogeek.local
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Conexão confirmada.
Conecte o filtro usando TCP Wrappers
TCP Wrappers são uma lista de controle de acesso fácil de entender. Ele permite negar e permitir conexões com base nas características da solicitação de conexão, como endereço IP ou nome do host. TCP Wrappers devem ser usados com, e não no lugar de, um firewall configurado corretamente.
TCP Wrappers vem pré-instalado em máquinas Ubuntu 18.04 LTS . Deve ser instalado no Manjaro 18.10 e Fedora 30.
Para instalar no Fedora, use o seguinte comando:
sudo yum install tcp_wrappers
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Para instalar no Manjaro, use este comando:
sudo pacman -Syu tcp-wrappers
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Existem dois arquivos incluídos, um arquivo contém a lista de permissões e outro arquivo contém a lista de negações. Edite a lista de negações usando o seguinte comando:
sudo gedit /etc/hosts.deny
![Como proteger um servidor SSH Como proteger um servidor SSH]()
O comando acima abrirá o editor gedit com o arquivo se recusando a carregar nele.
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Você precisa adicionar a linha:
ALL : ALL
E salve o arquivo. Esta linha bloqueará todo o acesso não autorizado. Agora precisamos conceder permissões às conexões que você deseja aceitar. Para fazer isso, você precisa editar o arquivo de permissões:
sudo gedit /etc/hosts.allow
![Como proteger um servidor SSH Como proteger um servidor SSH]()
O comando acima abrirá o editor gedit com o arquivo para download nele.
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Adicionamos o nome do daemon SSH, SSHD e o endereço IP do computador que permite que a conexão seja feita. Salve o arquivo e veja se as restrições e permissões estão em vigor.
Primeiro, você tentará se conectar a partir de um computador que não esteja no arquivo hosts.allow:
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Ligação recusada. Tentaremos conectar-nos a partir de uma máquina com endereço IP 192.168.4.23:
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Conexão aceita.
O exemplo aqui permite apenas a conexão de uma máquina. Os wrappers TCP são bastante flexíveis, suportam nomes de host, curingas e máscaras de sub-rede para aceitar conexões de intervalos de endereços IP.
Rejeitar solicitações de conexão sem senha
Embora não seja bom, os administradores de sistema Linux podem criar contas de usuário sem senhas. Isso significa que nenhuma senha é necessária para conexões remotas desta conta. Essas conexões serão aceitas, mas não autenticadas.
A configuração padrão para SSH aceita solicitações de conexão sem senha. Podemos alterá-lo facilmente e garantir que todas essas conexões sejam autenticadas.
Você precisa editar o arquivo de configuração SSH.
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Role para baixo no arquivo até ver a linha que diz #PermitEmptyPasswords no . Exclua # no início da linha e salve o arquivo. Reinicie o daemon SSH.
Use chaves SSH em vez de senhas
As chaves SSH fornecem uma maneira segura de fazer login em um servidor SSH. As senhas podem ser quebradas, adivinhadas ou forçadas . As chaves SSH não são vulneráveis a esses tipos de ataques.
Ao gerar uma chave SSH, você cria um par de chaves. Uma é a chave pública e a outra é a chave privada. A chave pública é instalada nos servidores aos quais você deseja se conectar. A chave privada é mantida de forma segura no seu computador.
As chaves SSH permitem que conexões sejam feitas sem senha, o que é mais seguro do que conexões que usam autenticação por senha.
Ao fazer uma solicitação de conexão, o computador remoto usa uma cópia da chave pública para criar uma mensagem criptografada enviada de volta ao computador. Como é criptografado com a chave pública, o computador pode descriptografá-lo com a chave privada.
O computador então extrai algumas informações da mensagem, criptografa-a e envia-a de volta ao servidor. Se o servidor puder descriptografá-lo com uma cópia da chave pública. Se as informações da mensagem corresponderem às que o servidor lhe enviou, a conexão será confirmada.
Aqui, a conexão é feita ao servidor em 192.168.4.11 pelo usuário com a chave SSH. Observe que eles não são solicitados a inserir uma senha.
ssh dave@192.168.4.11
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Desative completamente a autenticação por senha
Você pode desabilitar completamente a autenticação por senha se usar chaves SSH. Precisamos editar o arquivo de configuração SSH.
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Role o arquivo para baixo até ver a linha que começa com #PasswordAuthentication yes . Exclua # no início da linha, altere sim para não e salve o arquivo. Reinicie o daemon SSH.
Desativar encaminhamento X11
O encaminhamento X11 permite que usuários remotos executem aplicativos gráficos de seu servidor em uma sessão SSH, mas é facilmente explorado por malfeitores. É melhor desligá-lo editando o arquivo de configuração SSH.
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Role o arquivo para baixo até ver a linha #X11Forwarding no , exclua o # no início da linha e salve o arquivo. Reinicie o daemon SSH.
Definir valor de tempo limite de inatividade
Se uma conexão SSH for estabelecida com um computador e não houver atividade nele por um período de tempo, isso poderá representar um risco à segurança.
Portanto, você deve definir um limite de tempo limite. A conexão SSH será desconectada se não houver atividade dentro do limite de tempo. Mais uma vez, precisamos editar o arquivo de configuração SSH.
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Role o arquivo para baixo até ver a linha que começa com #ClientAliveInterval 0 . Remova o # do início da linha e altere o número 0 para o valor desejado. Normalmente as pessoas definem para 300 segundos, o que equivale a 5 minutos. Salve o arquivo e reinicie o daemon SSH.
Defina um limite para o número de entradas de senha
Definir um limite para o número de confirmações pode ajudar a evitar adivinhação de senhas e ataques de força bruta. Após o número especificado de solicitações de autenticação, o usuário será desconectado do servidor SSH. Por padrão, não há limite para o número de tentativas de senha, mas você pode editar isso no arquivo de configuração SSH.
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Role o arquivo para baixo até ver a linha que começa com #MaxAuthTries 0 . Remover o # no início da linha altera o número para o valor desejado. Você pode configurá-lo para 3. Salve o arquivo ao fazer alterações e reinicie o daemon SSH.
Você pode testar isso tentando se conectar e digitando a senha errada.
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Observe que o número MaxAuthTries é maior que o número de tentativas permitidas ao usuário. Após duas tentativas fracassadas, você será desconectado, o que significa que MaxAuthTries está definido como 3.
Desabilitar login root
É aconselhável não fazer login como root, apenas usar como usuário normal no Linux e usar sudo para executar ações que requerem permissões de root. Você também não deve permitir que o root faça login no servidor SSH. Somente usuários normais têm permissão para se conectar. Se precisarem realizar uma tarefa de nível administrativo, também poderão usar o sudo. Se você precisar permitir que o usuário root faça login, poderá forçá-lo a usar uma chave SSH.
Edite o arquivo de configuração para desabilitar o login root.
![Como proteger um servidor SSH Como proteger um servidor SSH]()
Role o arquivo para baixo até ver a linha que começa com #PermitRootLogin proíbe-password , exclua o # no início da linha.
- Se você quiser evitar que o root faça login, substitua a senha proibida por não.
- Se você permitir que o root faça login, mas forçar o uso de uma chave SSH, deixe a senha proibida intacta.
Salve as alterações e reinicie o daemon SSH.
Último passo
Claro, se você não precisa do SSH em execução no seu computador, desligue-o com o seguinte comando:
sudo systemctl stop sshd
sudo systemctl disable sshd
Desejo-lhe sucesso!