A maior preocupação seria as pessoas que efetuam login como administrador do computador através do SSH. Isso pode ser feito com força bruta, se você tiver uma senha fácil de adivinhar.
Existem várias medidas de segurança que você pode adotar. Abaixo estão algumas que eu sempre tomo ao configurar um servidor SSH e outras extras.
Use uma senha forte, composta por pelo menos (digamos) 10 letras maiúsculas e minúsculas, números e outros caracteres.
Prenda os usuários ao diretório inicial. Usuários presos não poderão acessar / editar arquivos que estão fora do diretório inicial. Portanto, seu usuário não poderá acessar / editar os principais arquivos do sistema. Muitos tutoriais podem ser encontrados on-line sobre como prender um usuário. A maioria deles usa o JailKit . Um exemplo desse tutorial pode ser encontrado aqui . Como alternativa, você também pode usar a ChrootDirectory
diretiva nativa do servidor OpenSSH . Um exemplo de um tutorial sobre isso pode ser encontrado aqui .
Instale o Fail2Ban . Fail2Ban é um programa que verifica os logs de autenticação quanto a entradas incorretas. Quando um determinado limite é atingido, ele adiciona um bloco de firewall para esse determinado IP por um período predefinido. Também existem vários tutoriais on-line encontrados sobre como configurar o Fail2Ban com SSH, um exemplo seria este . A página inicial do Fail2Ban contém alguns HOWTOs legais e completos também.
Desative o logon raiz através do SSH. Este é o usuário que tem acesso a praticamente todos os arquivos do seu sistema, portanto, é recomendável desativar o login do shell. Nas versões mais recentes do Ubuntu, o usuário root é automaticamente desabilitado, mas não custa desativar o acesso SSH de qualquer maneira. Isso é feito editando o arquivo /etc/ssh/sshd_config
. ✝ Procure a seguinte linha e verifique se não há # na frente dela.
#PermitRootLogin no
Use uma porta não padrão (por exemplo, não 22). Isso é feito através do encaminhamento de porta no seu roteador (por exemplo, 16121 -> 22 em vez de 22 -> 22) ou fazendo o daemon SSH escutar em uma porta diferente. Isso tornará seu serviço SSH menos facilmente detectável por usuários mal-intencionados. Isso é feito editando o arquivo /etc/ssh/sshd_config
. ✝ Procure a seguinte linha e mude 22 para a porta que desejar. Não esqueça de encaminhar a porta correta no seu roteador posteriormente.
Port 22
Não use senhas para efetuar login. Além de senhas, o SSH também permite o login usando chaves privadas. Isso significa que uma chave está armazenada no seu computador, na qual você acessa o SSH da máquina SSH. Quando uma conexão é tentada, o cliente SSH usa a chave para efetuar login no servidor em vez da autenticação por senha. As chaves de autenticação são muito mais criptografadas do que as senhas e, portanto, não são tão fáceis de decifrar. Existem também vários tutoriais online encontrados sobre como configurar a autenticação baseada em chave com SSH; um exemplo seria esse . (Se você fizer o SSH a partir do Windows com o PuTTY, verifique este link para um tutorial do PuTTY.) Depois de configurar a autenticação baseada em chave, você pode desativar a autenticação de senha editando o arquivo /etc/ssh/sshd_config
. ✝ Procure a seguinte linha e verifique se não há # na frente dela.
#PasswordAuthentication no
Opcionalmente, como o @ Linker3000 mencionado em seu comentário, você pode configurar um túnel VPN para o PC que deseja acessar através do SSH e, em seguida, proibir o acesso à rede não local no servidor SSH. Dessa forma, nenhum dispositivo externo sem uma conexão VPN poderá acessar seu servidor SSH. Isso pode ser feito negando TODOS os hosts e permitindo apenas o login dos IPs da rede local. Isso é feito editando /etc/hosts.deny
e adicione o seguinte:
sshd: ALL
e para /etc/hosts.allow
adicionar o seguinte:
sshd: 192.168.1.*
onde o IP corresponde ao da sua rede local. *
é um curinga, portanto, todos os endereços IP iniciados por 192.168.1.
serão aceitos. Se isso não funcionar, sua distribuição poderá ser usada em ssh
vez de sshd
. Nesse caso, você deve tentar ssh: 192.168.1.*
e ssh: ALL
em vez disso.
Você só pode permitir hosts específicos, fazer o mesmo com /etc/hosts.allow
e /etc/hosts.deny
conforme descrito em 6, mas /etc/hosts.allow
adicionar a seguinte linha e cada host para permitir separados por espaços:
sshd: {IP OF HOST TO ALLOW 1} {IP OF HOST TO ALLOW 2} {IP OF HOST TO ALLOW 3} {ETC.}
Permita que apenas usuários específicos acessem seu servidor SSH. Isso é feito editando o arquivo /etc/ssh/sshd_config
. ✝ Procure a seguinte linha e verifique se não há # na frente dela. Se não existir, crie-o. Por exemplo, se você deseja permitir apenas john, tom e mary, adicione / edite esta linha:
AllowUsers john tom mary
Você também pode negar usuários específicos, por exemplo, se quiser negar acesso a john, tom e mary, adicione / edite esta linha:
DenyUsers john tom mary
Permitir apenas o protocolo SSH2 para conexões de entrada. Existem duas versões do protocolo SSH. O SSH1 está sujeito a problemas de segurança, portanto, é recomendável usar o SSH 2. Isso pode ser forçado editando o arquivo /etc/ssh/sshd_config
. ✝ Procure a seguinte linha e verifique se não há # na frente dela. Se não existir, crie-o.
Protocol 2,1
remova o, 1 para que a linha seja
Protocol 2
Não permita que usuários façam login sem senha definida. Isso pode ser forçado editando o arquivo /etc/ssh/sshd_config
. ✝ Procure a seguinte linha e verifique se não há # na frente dela. Se não existir, crie-o.
PermitEmptyPasswords no
E, embora simples e talvez desnecessário dizer, mas tenha se mostrado crucial em vários casos, mantenha seu software atualizado. Atualize regularmente seus pacotes / software instalados.
dependendo de qual distribuição do Linux você está usando.