Para quem possui algum servidor, ou até para em seu computador pessoal, algumas configurações padrão do servidor SSH são extremamente permissivas, vulneráveis a ataques, e quem sabe até invasão com técnicas de força bruta.
Entre algumas dicas mais simples para aumentar a segurança estão configurar o seu firewall corretamente ou até desabilitar o acesso SSH. Para servidores, esta última opção não é válida. Sendo assim vamos conferir algumas configurações que podem fazer toda a diferença na hora de algum espertinho tentar invadir seu servidor.
As configurações do sshd
,daemon SSH, estão por padrão no arquivo /etc/ssh/sshd_config
. Então, escolha o seu editor favorito para alterar este arquivo.
Alterando a porta padrão
Por padrão o SSH utiliza a porta 22, uma boa prática é mudar este valor pois a maioria dos ataques são executados diretamente nesta porta. Dê preferência às portas altas, pois em uma varredura rápida de um atacante sem alvo específico com NMAP, não será mapeada.
Port 22222
Versão do protocolo
A versão 1 do protocolo SSH possui várias falhas de criptografia e não deve ser utilizada.
Protocol 2
Login apenas por chave SSH
Uma boa prática é permitir apenas login com chaves SSH, isto garante a autenticidade do cliente. Login através de senha é suscetível a força bruta, utilizando de dicionários com senhas junto com programas como o john the ripper, utilizar certificados você mitiga este risco.
PasswordAuthentication no
Login sem senha
Quando login através de senha está habilitado, uma boa prática é não permitir login de usuário que não possui senha.
PermitEmptyPasswords no
Login root
Permitir o login SSH através do usuário root é desaconselhável, prefira usar uma conta de usuário e após conectado faça login como superusuário.
PermitRootLogin no
Tempo máximo para login
Indica o tempo máximo em segundos que o cliente SSH tem para se logar com sucesso ao servidor.
LoginGraceTime 30
Tempo máximo sem atividade
Permitir que um usuário fique horas conectados a uma sessão SSH sem executar nenhum comando é desaconselhável. É recomendado definir um tempo máximo em segundos para desconectar o usuário sem atividade.
ClientAliveInterval 300
Testando as alterações
Sempre que uma alteração é feita no arquivo é aconselhável executar um teste para verificar se a sintaxe está correta, sendo assim execute o comando:
/usr/sbin/sshd -t
Se nenhuma mensagem foi exibida tudo está correto.
Reiniciando o sshd
Reiniciar o serviço irá variar de distribuição para distribuição, pois tudo depende do init system utilizado por ela. No Systemd você pode executar o comando systemctl restart sshd
, no Upstart service sshd restart
e por fim no SysV o /etc/init.d/sshd restart
.
Consideração final
Essas configurações são simples, mas podem evitar uma dor de cabeça no futuro. Para saber mais sobre as demais configurações do OpenSSH confira a referência.
Dica especial :D
E se eu tiver suspeitas de que meu servidor está sendo invadido? ou, sou paranóico com a segurança do meu servidor. O que eu posso fazer? tcp_wrapper, fail2ban? Ou porque não receber um e-mail toda vez que alguém logar via ssh no meu servidor?
Existe um arquivo que você pode alterar chamado sshrc
que fica no diretório padrão da sua pasta de configuração do ssh, por exemplo /etc/ssh/sshrc
. Neste exemplo vamos enviar um email através programa chamado sendEmail, confira.
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
logger -t ssh-wrapper $USER login from $ip
mensagem=`echo "User $USER just logged in from $ip"`
echo $mensagem | sendEmail -o tls=yes -f [email protected] -t [email protected] -s "smtp.gmail.com:587" -m "$mensagem" -u "$mensagem" -xu '[email protected]' -xp 'minha_senha'
Nota, caso use o Gmail, é necessário desabilitar uma funcionalidade de segurança que permite aplicativos menos seguros acessar sua conta, para saber mais clique aqui.
Referência
sshd – OpenSSH SSH daemon sshd_config — OpenSSH SSH daemon configuration file