Protegendo seu servidor contra acessos indevidos
Tags: security, cybersecurity, linux
Published: 2021-02-03 16:08:30

Se você precisa de segurança extra em um servidor Linux/Debian, e você sempre precisa, lá vai uma dica de ouro, desative acesso SSH por meio de senhas, assim você evitará qualquer ataque do tipo força bruta, vamos a prática.

### No servidor

Crie um par de chaves SSH;
```bash
ssh-keygen -b 4096

Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):
```

Tecle enter para confirmar;
```bash
Created directory '/home/pi/.ssh'.
```

Crie uma senha para sua chave SSH e confirme;
```bash
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```

A chave foi gerada com sucesso, veja o resultado abaixo;
```bash
The key fingerprint is:
SHA256:oVHrP/nGj3umYFkKRvnC/SKk8nSgHmeZ/OTUAQS+gvs pi@raspberrypi
The key's randomart image is:
+---[RSA 4096]----+
|      ..o        |
|     . o o       |
|      o *        |
|   .   B =       |
|  . . + S + .    |
|   . + B = B     |
|  . + O = @..    |
|   o B * o =o.o  |
|    E . o  .=*.  |
+----[SHA256]-----+
```

Chaves SSH ficam salvas na pasta oculta `.ssh` na raiz do seu usuário Linux, no meu caso estão em:
```bash
/home/pi/.ssh
```

Digitando o comando `ls` dá pra ver o seu par de chaves(pública, privada), do lado do servidor o trabalho está terminado.
```bash
id_rsa  id_rsa.pub
```

### No cliente

Autorize a sua máquina cliente a se conectar ao servidor sem precisar digitar uma senha, para isso vamos copiar a chave pública do cliente para dentro do servidor, e autorizar o acesso, basta um simples comando pra isso:
```bash
cat ~/.ssh/id_rsa.pub | ssh pi@192.168.15.2 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'
```

Na próxima etapa digite `yes`, assim você está informando que reconhece o servidor;
```bash
The authenticity of host '192.168.15.2 (192.168.15.2)' can't be established.
ECDSA key fingerprint is SHA256:g1gtgJgDd24rXR0KJTTBjdLUI+SX829GTwQ1CYgVCiQ.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Warning: Permanently added '192.168.15.2' (ECDSA) to the list of known hosts.
```

Neste momento um arquivo chamado `.ssh/authorized_keys` será criado no servidor, esse arquivo tem a chave pública do cliente, indicando assim que o mesmo possui autorização de acesso ao servidor.

Digite a senha do servidor;
```bash
pi@192.168.15.2's password:
```

Conecte-se ao servidor;
```bash
ssh <USERNAME>@<IP-ADDRESS>
```

No meu caso o comando será;
```bash
ssh pi@192.168.15.2
```

Pra mim a mensagem de boas-vindas foi a seguinte:
```bash
Linux raspberrypi 5.4.83-v7+ #1379 SMP Mon Dec 13 20:08:57 GMT 2020 armv7l
```

### Passo final, o "pulo do gato"

O último passo é desativar a autenticação por senha no servidor, para isso basta editar o arquivo com as configurações de ssh no servidor, use o comando:
```bash
sudo nano /etc/ssh/sshd_config
```
O arquivo será aberto e estará pronto para edição, apenas procure o seguinte trecho:

```bash
#PasswordAuthentication yes
```

Edite o trecho removendo o comentário `#` deixando assim:
```bash
PasswordAuthentication no
```

Reinicie o servidor
```bash
sudo reboot
```

Tudo certo, a partir de agora você não precisa mais digitar senhas para ter acesso ao servidor, e ainda garante que apenas acessos via SSH e autorizados serão aceitos, desta forma a segurança está garantida no seu servidor