Como bloquear seu servidor SSH

Conteúdo

SSH, que significa Secure Shell, não muito seguro por padrão, optando por autenticação de senha básica sem outros limites. Se você realmente deseja bloquear seu servidor, você precisará fazer mais configurações.

Não permitir logins com senha: usar claves SSH

A primeira coisa a fazer é livrar-se totalmente da autenticação de senha e passar a usar chaves SSH. As chaves SSH são uma forma de criptografia de chave pública; você tem uma chave pública que atua como seu nome de usuário e uma chave privada que atua como sua senha (exceto esta senha tem 2048 personagens). Sua chave privada está armazenada em seu disco, mas é criptografado com uma senha e agente ssh. Quando você faz login no SSH em um servidor, em vez de pedir sua senha, o agente ssh se conecta ao servidor usando suas chaves.

Mesmo se você já estiver usando chaves SSH, você vai querer ter certeza de que seus logins de senha estão desabilitados, uma vez que os dois não são mutuamente exclusivos.

RELACIONADO: O que é encaminhamento de agente SSH e como ele é usado?

Gerar chaves SSH

Você pode gerar uma nova chave SSH usando o ssh-keygen Utilitário, instalado por padrão na maioria dos sistemas Unix.

ssh-keygen

Isto irá pedir-lhe uma frase-senha para criptografar o arquivo de chave local. Não usado para autenticação com o servidor, mas deve ser mantido em segredo.

ssh-keygen salvará sua chave privada em ~/.ssh/id_rsae também salvará sua chave pública em ~/.ssh/id_rsa.pub. A chave privada permanece no seu disco rígido, mas a chave pública precisa ser carregada para o servidor para que o servidor possa verificar sua identidade e verificar se você tem permissão para entrar nesse servidor.

O servidor mantém uma lista de usuários autorizados, regularmente armazenado em ~/.ssh/authorized_keys. Você pode adicionar seu arquivo de chave manualmente a este arquivo, ou você pode usar o ssh-copy-id Utilitário:

ssh-copy-id -i ~ / .ssh / id_rsa.pub usuário @ host

Substituir user@host com seu próprio nome de usuário e nome de host do servidor. Você será solicitado a fazer login com sua senha antiga mais uma vez, após o qual você não deve ser solicitado novamente e você pode desativar o login com senha.

Desativar login com senha SSH

Agora que você pode entrar no servidor com suas chaves, você pode desabilitar a autenticação de senha completamente. Certifique-se de que a autenticação baseada em chave está funcionando ou seu servidor será bloqueado.

No servidor, abre /etc/ssh/sshd_config em seu editor de texto favorito e encontre a linha que começa com:

#PasswordAuthentication

Você vai querer descomentar este (remova a hashtag) e mudar “sim” uma “não”:

PasswordAuthentication não

Então, reinício sshd com:

systemctl restart sshd

Você deve ser forçado a se reconectar e, se o seu arquivo de chave está errado, você não será solicitado a fornecer uma senha.

Se você desejar, você também pode forçar a autenticação pública baseada em chaves, que bloqueará todos os outros métodos de autenticação. Adicione as seguintes linhas para /etc/ssh/sshd_config:

AuthenticationMethods publickey
PubkeyAuthentication yes

e reiniciar sshd.

RELACIONADO: O que é um arquivo PEM e como ele é usado?

Bloquear atacantes com negadores

denyhosts é um utilitário para evitar tentativas repetidas de login com falha via SSH, equivalente a como seu telefone o bloqueia após muitas tentativas. Não é instalado por padrão, então você terá que instalá-lo a partir do gerenciador de pacotes de sua distribuição. Para sistemas baseados em Debian como Ubuntu, isso seria:

sudo apt-get install denyhosts -y

Depois de instalado, habilite-o com:

sudo systemctl enable denyhosts

denyhosts deve ser executado automaticamente agora, mas você vai querer colocar seu endereço IP na lista de permissões caso ele seja bloqueado. Você sempre pode tentar novamente com um endereço IP diferente, mas isso vai te poupar alguns problemas.

Abrir /etc/hosts.allow, e na parte inferior do arquivo adicione:

sshd: seu-endereço-ip

substituindo your-ip-address com seu endereço IP.

Por padrão, denyhosts irá travar após uma tentativa malsucedida para usuários root e cinco tentativas malsucedidas para outros usuários. Você pode alterar esse comportamento editando /etc/denyhosts.conf.

Se foi bloqueado acidentalmente, deve parar denyhosts e remova seu endereço IP de alguns lugares:

  • /etc/hosts.deny
  • /var/lib/denyhosts/hosts
  • /var/lib/denyhosts/hosts-restricted
  • /var/lib/denyhosts/hosts-root
  • /var/lib/denyhosts/hosts-valid
  • /var/lib/denyhosts/users-hosts

Reiniciar denyhosts e deve ser capaz de se conectar novamente.

Lista de permissões de acesso SSH

Mesmo ao forçar chaves SSH com denyhosts provavelmente é segurança suficiente, você pode incluir endereços IP específicos na lista branca. A maioria dos fornecedores de servidor fornece ferramentas para fazer isso a partir de uma interface da web. Se for uma alternativa, você vai querer colocá-lo na lista de permissões de lá em vez de do servidor SSH, já que você sempre será capaz de alterar o IP da lista de permissões caso seja bloqueado.

  Alterando as regras de entrada.

Se não for uma alternativa, você precisará configurar manualmente /etc/hosts.deny para bloquear todo o tráfego de hosts não autorizados.

Uma nota importante: Se você incluir sua casa na lista branca, seu ISP pode não fornecer um endereço IP estático e seu endereço IP pode mudar a qualquer momento. Você vai querer ter certeza de que isso não aconteça antes de colocar na lista negra todos os outros endereços IP, ou adicione vários endereços como backup, ou simplesmente pule esta etapa completamente.

Abrir /etc/hosts.allow e certifique-se de que o seu endereço IP está no arquivo:

sshd: seu-endereço-ip

Sim é assim, você pode ir em frente e rejeitar todas as outras conexões:

echo 'sshd: TUDO' >> /etc / hosts.deny

Reiniciar sshd e você deve ver suas mudanças.

alternativamente, configurar um proxy na frente do seu servidor SSH

Se você não quiser expor seu servidor SSH à internet, mas você precisa acessá-lo de vários endereços IP, você pode definir um proxy na frente dele para lidar com a conexão. Este pode ser outro servidor em nuvem ou até mesmo uma caixa que funciona em sua casa..

O servidor SSH deve ser configurado para aceitar apenas conexões do servidor proxy, e o servidor proxy deve aceitar conexões de qualquer lugar. Você pode configurar o servidor proxy como quiser, mas mesmo um simples conexão netcat vai funcionar. Observe que este servidor proxy será o único ponto de acesso para o seu servidor SSH, então, se o proxy parar de funcionar, será bloqueado a menos que você tenha um endereço de backup.

Proibir login de root

Em seu lugar, crie um novo usuário e conceda a esse usuário o privilégio de sudo. efetivamente, esse é o mesmo, mas tem uma grande diferença: invasores em potencial precisarão saber o nome de sua conta de usuário para começar a atacar seu servidor, porque não será tão simples quanto root@yourserver.

Além da segurança, em geral, é uma boa política do Unix não fazer login como root todo o tempo, devido a que root não cria registros e não solicita acesso a recursos protegidos.

Crie um novo usuário em seu servidor SSH:

adduser myfancyusername

e definir uma senha para esse usuário:

passwd myfancyusername

Você não fará login com esta senha porque continuará a usar as chaves SSH, mas é obrigatório. Idealmente, faça isso diferente de sua senha de root.

Adicionar este usuário a /etc/sudoers para conceder permissões de administrador:

echo 'myfancyusername ALL =(TUDO) TUDO' >> /etc / sudoers

Mude para esse usuário com su myfancyusernamee verifique se você pode reverter para o usuário root com sudo su (você não precisa de senha de root). Se pode, tem acesso ao sudo.

Agora você deseja bloquear o login do root. Sobre /etc/ssh/sshd_config, você vai querer mudar:

#PermitRootLogin sim

Remova a hastag e mude “sim” uma “não”:

PermitRootLogin no

Reiniciar sshd e seu servidor deve bloquear todas as solicitações de login como root.

Configure a autenticação de dois fatores

Isso certamente é exagerado., mas se você está paranóico sobre alguém conseguir suas chaves SSH privadas, você pode configurar seu servidor SSH para usar 2FA.

A maneira mais fácil de fazer isso é usar Google Authenticator com um dispositivo Android ou iOS, mesmo que o SSH suporte muitos métodos de dois fatores. Con Google Authenticator, você receberá um código QR que pode ser lido no aplicativo móvel Google Authenticator para vincular seu telefone ao servidor, Além disso, você receberá alguns códigos de backup para recuperar caso seu telefone seja perdido. . Não armazene esses códigos em sua máquina principal, caso contrário, não se trata de dois fatores.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.