+++
date = '2024-10-26T16:59:23-03:00'
title = 'Boas práticas para configuração do SSH'
description = "Fortaleça a segurança do seu servidor SSH com autenticação por chaves, 2FA, hardening de criptografia, restrições de acesso e desativação de métodos não utilizados."
tags = [
    "webserver",
    "GNU/Linux",
    "Basics Series",
]
canonical = "/posts/ssh-hardening"
+++

Como voce pode ver no meu ultimo post sobre [fail2ban]({{< ref "/posts/fail2ban-basics" >}} "Fail2ban basics"), o serviço SSH é um alvo popular de ataques de força bruta, nós devemos tomar nosso tempo para melhorar a segurança de nossos servidores.

Além de regras do iptables e jails do fail2ban, temos alguns parâmetros que podemos ajustar nos nossos servidores para termos mais uma medida de proteção.

## Métodos de autenticação SSH

Por padrão, o serviço SSH permite autenticação por senha para todos os usuários exceto o root, oque é um bom começo, mas podemos fazer mais.

### Autenticação por chaves

O primeiro passo que voce pode fazer é desativar a autenticação por senha e utilizar apenas autenticação por chaves. Isso vai reduzir muito a eficiência de ataques de força bruta já que chaves SSH são muito mais difíceis de quebrar do que senhas.

Eu não vou mostrar como fazer isso, já que existem muitos tutoriais bons na internet sobre esse assunto, [esse do Github por exemplo](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent).

Outro passo é desativar o login do root, isso faz sentido por que o root é um usuário que existe em todos os sistemas GNU/Linux e isso o torna um alvo obvio.

```bash
#PermitRootLogin prohibit-password
PermitRootLogin no
```

### Autenticação por dois fatores (2FA)

Se voce quiser mais um nivel de segurança, voce pode implementar [autenticação de dois fatores com o Google Authenticator](https://docs.vultr.com/how-to-use-two-factor-authentication-with-sudo-and-ssh-on-linux-with-google-authenticator).

### Desativar métodos de autenticação não utilizados

Por padrão o servidor SSH vem com vários métodos de autenticação habilitados que voce provavelmente não utiliza. Voce pode desabilita-los para reduzir a superfície de ataque do seu servidor:

```bash
ChallengeResponseAuthentication no
KerberosAuthentication no
GSSAPIAuthentication no
```

## Melhorar algoritmos de criptografia do SSH

Seguindo [esses guias](https://www.sshaudit.com/hardening_guides.html) voce pode desabilitar algoritmos de autenticação e criptografia vulneraveis e priorizar os mais fortes (AES-256-GCM, chacha20-poly1305).

Quando voce terminar, verifique com a ferramenta [ssh-audit](https://github.com/jtesta/ssh-audit).

## Restringir acessos SSH

Além das regras do iptables, o arquivo `/etc/ssh/sshd_config` pode aplicar restrições baseadas em usuário, grupo e/ou IP de origem.

Por exemplo, para permitir conexões por IP, voce pode adicionar conforme os seguintes exemplos:

```bash
# Restrict to a specific IP address
AllowUsers *@192.0.0.2
# Restrict using CIDR notation
AllowUsers *@192.0.0.0/24
# Restrict a specific user to a specific IP address
Match User alice
  AllowUsers alice@192.0.0.2
```

## Conclusão

O hardening do SSH é um processo contínuo, não uma tarefa única. Comece com autenticação por chaves e desative o login por senha, depois adicione camadas como 2FA, hardening de criptografia e restrições de acesso. Combinado com regras de iptables e jails do fail2ban, você pode reduzir significativamente a superfície de ataque do seu servidor. Revise sua configuração SSH periodicamente e mantenha-se atualizado com as recomendações de segurança mais recentes.
