1. Atualização e usuário
sudo apt update && sudo apt full-upgrade -y
sudo adduser admin
sudo usermod -aG sudo admin
Teste o sudo com o novo usuário antes de seguir.
2. SSH só com chave
$ # na máquina local
ssh-keygen -t ed25519 -C "seu-email"
ssh-copy-id admin@IP-DO-SERVIDOR
Em /etc/ssh/sshd_config:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
sudo systemctl restart ssh
warn · Mantenha uma sessão aberta enquanto testa. Se travar, use o console do provedor.
3. Hardening do sshd
Port 2222
KexAlgorithms curve25519-sha256
Ciphers [email protected],[email protected]
MACs [email protected],[email protected]
AllowUsers admin
ClientAliveInterval 300
ClientAliveCountMax 2
MaxAuthTries 3
4. UFW
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp comment 'SSH'
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
tip · Em backend, libere só o necessário.
5. Fail2ban
sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
findtime = 10m
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
6. Checklist
- Sistema atualizado
- Usuário sudo; root sem login SSH
- SSH só por chave
- Porta SSH restrita no UFW
- UFW default deny
- Fail2ban no SSH
- unattended-upgrades para patches
7. Comandos e diretivas explicados
| Comando | O que faz |
|---|---|
sudo apt update && sudo apt full-upgrade -y | Atualiza a lista de pacotes e instala todas as atualizações, inclusive as que adicionam ou removem dependências. |
sudo adduser admin | Cria o usuário admin com pasta pessoal e senha. |
sudo usermod -aG sudo admin | Adiciona admin ao grupo sudo. O -a acrescenta sem remover dos outros grupos. |
sudo ufw default deny incoming | Nega por padrão toda a entrada. |
sudo ufw allow 2222/tcp comment 'SSH' | Libera a porta escolhida para o SSH. |
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local | Cria uma cópia editável, que não é sobrescrita nas atualizações do pacote. |
Diretiva do sshd_config | O que faz |
|---|---|
ChallengeResponseAuthentication no | Desativa a autenticação interativa por desafio. Em versões novas do OpenSSH, o nome atual é KbdInteractiveAuthentication. |
UsePAM yes | Mantém o PAM ativo para contas, sessões e políticas de acesso. |
Port 2222 | Muda a porta. Reduz o ruído de bots nos logs, mas não substitui as outras proteções. |
KexAlgorithms curve25519-sha256 | Restringe a troca de chaves a um algoritmo moderno. Clientes muito antigos podem deixar de conectar. |
Ciphers e MACs | Listas de algoritmos de cifra e de integridade permitidos. |
AllowUsers admin | Só o usuário admin entra por SSH. |
ClientAliveInterval 300 e ClientAliveCountMax 2 | Envia um sinal a cada 300 segundos e encerra a sessão após 2 sem resposta, cerca de 10 minutos de inatividade. |
MaxAuthTries 3 | Máximo de tentativas por conexão. |
| Diretiva do Fail2ban | O que faz |
|---|---|
port = 2222 | deve acompanhar a porta do SSH |
maxretry = 3 | 3 falhas dentro da janela levam ao bloqueio |
findtime = 10m | janela de contagem das falhas |
bantime = 1h | duração do bloqueio |
8. Exemplo: conferir se tudo ficou no lugar
sudo ss -lntp | grep ssh
sudo ufw status verbose
sudo fail2ban-client status sshd| Comando | O que você deve ver |
|---|---|
ss -lntp | grep ssh | o sshd escutando na porta escolhida (por exemplo, :2222) |
ufw status verbose | Default: deny (incoming) e a regra da porta do SSH |
fail2ban-client status sshd | a jail ativa, com a mesma porta e a lista de IPs bloqueados |
9. Erros comuns e como resolver
| Sintoma | Causa provável | Solução |
|---|---|---|
| Ficou sem acesso depois de mudar a porta | A nova porta não foi liberada no UFW antes de reiniciar o SSH. | Libere a porta no UFW primeiro e mantenha uma sessão aberta. Se travar, use o console do provedor. |
| O Fail2ban não bloqueia depois de trocar a porta | O port do jail.local continua na 22. | Ajuste port para o mesmo número do sshd_config. |
| O SSH continua na porta 22 no Ubuntu recente | Versões novas do Ubuntu iniciam o SSH por ativação de socket, e o Port do sshd_config pode ser ignorado. | Confira com ss -lntp e, se necessário, ajuste o ssh.socket ou desative a ativação por socket. |
| Clientes antigos não conectam | As listas de KexAlgorithms, Ciphers e MACs são restritas demais. | Amplie as listas ou atualize o cliente. |