Alternar tema

Como configurar o Ubuntu com segurança: usuários, SSH e fail2ban

Easton editorial illustration: lifecycle journey rail

Às três da manhã, eu encarava a mensagem de erro “Permission denied” no terminal, sentindo um frio na espinha.

Eu não conseguia mais acessar o servidor. Tudo porque alterei uma configuração do SSH sem pensar e esqueci de deixar uma rota de emergência.

Isso aconteceu três anos atrás, quando comprei meu primeiro VPS. Olhando agora, o que fiz na época parece um exemplo perfeito do que não fazer: entrava diretamente como root, usava minha data de nascimento como senha, mantinha o SSH na porta padrão 22 e nem sabia o que era um firewall. O resultado? Em menos de duas semanas, o servidor foi bombardeado por varreduras, e os logs ficaram cheios de tentativas de força bruta.

Para ser sincero, a primeira reação de muita gente ao comprar um VPS é instalar tudo logo e colocar o projeto no ar. Gerenciar usuários? Reforçar o SSH? Parece trabalhoso, então fica para depois. O problema é que essas tarefas adiadas determinam por quanto tempo seu servidor continuará seguro.

Este artigo tem um único objetivo: partir do zero e deixar um servidor Ubuntu recém-contratado, seja 22.04 ou 24.04, seguro e pronto para uso. Vamos cuidar de permissões de usuário, reforço do SSH e bloqueio automático com fail2ban. Em cada etapa, explicarei por que ela é necessária, em vez de apenas entregar uma lista de comandos para copiar e colar.

Você leva cerca de 10 minutos para concluir o processo. Ao terminar, seu servidor estará mais protegido do que 80% das máquinas expostas na internet.

1. Preparação antes da configuração inicial

Antes de começar, prepare as ferramentas. Você precisará gerar um par de chaves SSH na sua máquina local.

Por que usar uma chave em vez de senha? Em poucas palavras: uma senha pode ser quebrada por força bruta; uma chave, na prática, não. Quebrar uma chave Ed25519 de 256 bits por força bruta levaria mais tempo do que a idade do universo.

Gerar a chave

Hoje, o algoritmo recomendado é o Ed25519. Ele é mais seguro do que o antigo RSA e também gera chaves menores. O comando é simples:

# macOS / Linux
ssh-keygen -t ed25519 -C "[email protected]"

# Windows (PowerShell, requer o cliente OpenSSH)
ssh-keygen -t ed25519 -C "[email protected]"

Ao executar o comando, você precisará informar onde salvar a chave e se deseja definir uma senha. Basta pressionar Enter para usar o caminho padrão. A senha fica a seu critério: defini-la aumenta a segurança, mas será necessário digitá-la a cada conexão.

Ao final, você terá dois arquivos na máquina local:

  • ~/.ssh/id_ed25519 — a chave privada, que nunca deve ser compartilhada
  • ~/.ssh/id_ed25519.pub — a chave pública, que será enviada ao servidor

Quanto ao terminal, o Terminal nativo do macOS já é suficiente. No Windows, recomendo Windows Terminal ou MobaXterm. Esse não é o foco do artigo, então não vou entrar em detalhes.

2. Gerenciamento de usuários e permissões

Primeiro, acesse o servidor como root. Essa será a última vez que você fará login diretamente com essa conta, pois ela será desativada nas próximas etapas:

ssh root@IP_DO_SEU_SERVIDOR

Por que não usar o root?

Em uma palavra: consequências.

Os privilégios do root são amplos demais. Apagar o arquivo errado ou alterar uma configuração incorretamente pode inutilizar todo o sistema. Para piorar, muitos scripts de ataque tentam especificamente invadir a conta root. Deixar o root disponível pelo SSH equivale a oferecer um grande alvo aos invasores.

No uso diário, trabalhe com uma conta comum e use sudo apenas quando precisar de privilégios elevados. Esse é um princípio básico de segurança no Linux.

Criar um usuário para implantação

Eu gosto do nome deploy, porque deixa claro que a conta é usada para implantação. Você pode escolher outro nome, se preferir:

# Cria o usuário (o sistema pedirá uma senha e alguns dados)
adduser deploy

# Concede permissão sudo
usermod -aG sudo deploy

O Ubuntu pedirá que você defina uma senha e preencha algumas informações do usuário. Escolha uma senha que consiga lembrar e pressione Enter para ignorar os outros campos.

Enviar a chave pública para o novo usuário

Agora, envie sua chave pública local para a nova conta. Execute o comando na sua máquina local:

# macOS / Linux
ssh-copy-id deploy@IP_DO_SEU_SERVIDOR

# Windows (PowerShell)
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh deploy@IP_DO_SEU_SERVIDOR "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Depois, teste se consegue entrar como deploy:

ssh deploy@IP_DO_SEU_SERVIDOR

Conseguiu? Ótimo. Daqui em diante, use a conta deploy e não volte para o root. Quando precisar de privilégios elevados, acrescente sudo ao comando.

Cenários com vários usuários

Se várias pessoas da equipe precisarem usar o servidor, crie uma conta individual para cada uma. Por exemplo:

# Cria uma conta para o colega Zhang San
adduser zhangsan
usermod -aG sudo zhangsan

# Envia a chave pública dele (executado por ele na máquina local)
ssh-copy-id zhangsan@IP_DO_SEU_SERVIDOR

Com contas individuais, as ações ficam rastreáveis e é mais fácil investigar qualquer problema.

3. Reforço da segurança do SSH

Esta é a parte mais importante de toda a configuração inicial — e também aquela em que é mais fácil protagonizar o desastre de se trancar para fora do servidor.

Atenção: antes de alterar a configuração do SSH, mantenha a conexão atual aberta e teste em outra janela do terminal. Se algo der errado, você ainda poderá corrigir pela conexão original.

Editar o arquivo de configuração do SSH

sudo nano /etc/ssh/sshd_config

Entenda os principais parâmetros

1. Porta (Port)

Port 22    # Valor padrão; recomendo alterar

A porta 22 é o alvo preferido de varreduras em toda a internet. Mudar para uma porta alta, como 22222 ou 54321, evita a maior parte das varreduras indiscriminadas.

Port 54321

Atenção: se você usa um provedor de nuvem, como Alibaba Cloud, Tencent Cloud ou AWS, lembre-se de liberar a nova porta no grupo de segurança ou firewall. Caso contrário, não conseguirá se conectar.

2. Impedir o login do root (PermitRootLogin)

PermitRootLogin no    # Alteração obrigatória

Por quê? Como expliquei antes, o root é o principal alvo dos invasores. Desativar seu login reduz consideravelmente a superfície de ataque.

3. Desativar o login por senha (PasswordAuthentication)

PasswordAuthentication no    # Permite apenas login por chave

Essa configuração é essencial contra ataques de força bruta. Desde que sua chave privada não seja exposta, conhecer sua senha não será suficiente para alguém entrar no servidor.

4. Outros parâmetros de segurança

MaxAuthTries 3              # No máximo 3 tentativas de autenticação
ClientAliveInterval 300     # Verifica a conexão após 5 minutos sem atividade
ClientAliveCountMax 2       # No máximo 2 verificações sem resposta

Esses parâmetros evitam que conexões ociosas consumam recursos por muito tempo e também limitam o número de tentativas de força bruta.

Valide a configuração em três etapas

Depois de editar, não reinicie imediatamente. Primeiro, faça estas verificações:

Etapa 1: testar a sintaxe da configuração

sudo sshd -t

Se não houver saída, é um bom sinal: a sintaxe está correta.

Etapa 2: testar a conexão em uma nova janela

Mantenha a janela atual aberta. Em outra janela do terminal, conecte-se com a nova porta e a conta deploy:

ssh -p 54321 deploy@IP_DO_SEU_SERVIDOR

Conseguiu entrar? Então a configuração foi aplicada e você não se trancou para fora do servidor.

Etapa 3: reiniciar o serviço após confirmar que está tudo certo

sudo systemctl restart sshd
# ou
sudo systemctl restart ssh

Depois de reiniciar, teste novamente em uma nova janela. A etapa só estará concluída quando você confirmar que o login funciona normalmente.

Uma dica

Se você perder o acesso depois da alteração, não entre em pânico. Abra o console do provedor de nuvem por VNC, reverta a configuração e reinicie o serviço. É por isso que insisto em manter uma conexão aberta antes de mexer no SSH.

4. Bloqueio automático com fail2ban

As configurações de SSH anteriores combatem principalmente ataques de força bruta. Mas e se alguém insistir em testar senhas? É aí que entra o fail2ban.

O que é o fail2ban? É uma ferramenta que monitora logs e bloqueia automaticamente IPs suspeitos. Se alguém errar a senha várias vezes seguidas, o IP entra em uma lista de bloqueio por um período. Simples, direto e eficaz.

Instalar e iniciar

sudo apt update
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Configurar a jail do sshd

O fail2ban usa o conceito de “jail” para gerenciar as regras de monitoramento de cada serviço. O SSH já possui uma jail chamada sshd.

Crie um arquivo de configuração local. Não altere diretamente o arquivo padrão, pois uma atualização pode sobrescrevê-lo:

sudo nano /etc/fail2ban/jail.local

Adicione este conteúdo:

[sshd]
enabled = true
port = 54321          # Use a sua porta SSH
maxretry = 3          # Bloqueia após 3 falhas
findtime = 600        # Dentro de 10 minutos
bantime = 3600        # Bloqueia por 1 hora

O que significa cada parâmetro:

  • maxretry: número máximo de falhas permitidas. O padrão é 5; uso 3 para ser mais rigoroso.
  • findtime: janela de tempo em segundos. Três falhas dentro de 600 segundos, ou 10 minutos, acionam a regra.
  • bantime: duração do bloqueio em segundos. 3600 equivale a uma hora. Você pode usar 86400 para bloquear por um dia ou escolher um período ainda maior.

Depois de alterar, reinicie o serviço:

sudo systemctl restart fail2ban

Ver o estado dos bloqueios

# Mostra o estado de todas as jails
sudo fail2ban-client status

# Mostra os detalhes da jail sshd
sudo fail2ban-client status sshd

Você verá a lista dos IPs bloqueados no momento.

Desbloquear um IP

Se você bloquear o próprio IP por engano, por exemplo, ao errar a senha várias vezes durante um teste, use este comando:

sudo fail2ban-client set sshd unbanip SEU_IP

Avançado: regras personalizadas

O fail2ban não protege apenas o SSH. Ele também pode proteger Nginx, Apache, MySQL e outros serviços. A configuração segue a mesma lógica: basta criar a jail correspondente. Esse assunto renderia uma explicação longa, então vamos deixá-lo para outro artigo.

5. Comparativo rápido entre as versões

O processo de inicialização é praticamente igual no Ubuntu 22.04 e no 24.04, mas existem algumas diferenças nos detalhes.

Principais diferenças

ItemUbuntu 22.04 LTSUbuntu 24.04 LTS
Versão do kernel5.156.8
Versão do OpenSSH8.99.6
Python padrão3.103.12
Versão do systemd249255
Período de suporteAté abril de 2027Até abril de 2029

Impacto prático

A boa notícia: o processo deste artigo funciona integralmente nas duas versões. O caminho da configuração do SSH, a instalação do fail2ban e os comandos de gerenciamento de usuários permanecem os mesmos.

Pontos de atenção:

  1. OpenSSH 9.x no Ubuntu 24.04: a configuração padrão é um pouco mais rígida e alguns algoritmos de criptografia antigos foram desativados. Se um cliente SSH antigo tiver dificuldade para se conectar ao 24.04, basta atualizá-lo.

  2. Imagens de provedores de nuvem: algumas imagens do Ubuntu 22.04 oferecidas por provedores incluem scripts de monitoramento ou gerenciamento pré-instalados, que podem entrar em conflito com sua configuração. Prefira uma imagem oficial limpa ou verifique os serviços existentes antes de iniciar.

  3. Atualização de versão: se você já tem um servidor Ubuntu 22.04 em produção, faça um snapshot antes de atualizar para o 24.04. O do-release-upgrade funciona na maioria dos casos, mas vale ser cauteloso quando há configurações de segurança envolvidas.

Qual versão escolher?

  • Projeto novo: use diretamente o Ubuntu 24.04. Ele tem suporte por mais tempo e versões mais recentes dos programas.
  • Projeto antigo: se você depende de uma versão específica, como Python 3.10, use o Ubuntu 22.04.
  • Prioridade para estabilidade: o Ubuntu 22.04 já amadureceu e seus problemas mais comuns são bem conhecidos.
  • Preferência por novidades: o Ubuntu 24.04 traz recursos mais novos, incluindo melhor suporte a hardware e otimizações de desempenho.

Conclusão

Depois de todas essas etapas, vale recapitular os pontos centrais da configuração inicial.

O trio essencial de segurança:

  • Criar um usuário comum e desativar o login do root
  • Alterar a porta do SSH, desativar senhas e permitir apenas chaves
  • Usar o fail2ban para bloquear automaticamente IPs suspeitos

Princípios de operação:

  • Manter uma conexão aberta antes de alterar a configuração
  • Validar cada etapa e não se apressar para reiniciar
  • Nunca compartilhar a chave privada

Checklist de validação:

  • É possível entrar por SSH com a conta deploy usando a nova porta
  • Não é possível entrar com a conta root
  • O login por senha está desativado
  • O serviço fail2ban está funcionando normalmente

Essa configuração é apenas o primeiro passo para proteger seu servidor. Depois, você ainda precisará configurar o firewall com UFW, instalar Docker, implantar sua aplicação e muito mais. Esses assuntos ficam para outra conversa.

Se você encontrar algum problema ao seguir este tutorial, deixe um comentário. Eu realmente não quero que você repita a experiência de se trancar para fora do servidor às três da manhã, como aconteceu comigo três anos atrás.

Configuração inicial de segurança de um servidor Ubuntu

Configure um servidor Ubuntu seguro do zero, incluindo gerenciamento de usuários, reforço do SSH e bloqueios com fail2ban

⏱️ Estimated time: 10 min

  1. 1

    Step 1: Gerar uma chave SSH

    Gere um par de chaves Ed25519 na máquina local:

    • Comando: ssh-keygen -t ed25519 -C "[email protected]"
    • A chave privada fica em ~/.ssh/id_ed25519 (não compartilhe)
    • A chave pública fica em ~/.ssh/id_ed25519.pub (será enviada ao servidor)
  2. 2

    Step 2: Criar um usuário comum

    Depois de entrar no servidor, crie um usuário para implantação:

    • Criar usuário: adduser deploy
    • Conceder permissão sudo: usermod -aG sudo deploy
    • Definir uma senha que você consiga lembrar
  3. 3

    Step 3: Enviar a chave pública e testar o acesso

    Execute na máquina local:

    • ssh-copy-id deploy@IP_DO_SERVIDOR
    • Testar o acesso: ssh deploy@IP_DO_SERVIDOR
    • Depois de confirmar que o usuário deploy consegue entrar normalmente, use essa conta nas próximas etapas
  4. 4

    Step 4: Alterar a configuração do SSH

    Edite /etc/ssh/sshd_config:

    • Port 54321 (troque por uma porta alta)
    • PermitRootLogin no (impede o login do root)
    • PasswordAuthentication no (desativa o login por senha)
    • MaxAuthTries 3
    • ClientAliveInterval 300

    Atenção: mantenha uma conexão aberta antes de fazer as alterações!
  5. 5

    Step 5: Validar e reiniciar o SSH

    Valide em três etapas:

    • Testar a sintaxe: sudo sshd -t
    • Testar em uma nova janela: ssh -p 54321 deploy@IP_DO_SERVIDOR
    • Reiniciar após confirmar que está tudo certo: sudo systemctl restart sshd
  6. 6

    Step 6: Instalar e configurar o fail2ban

    Bloqueie automaticamente IPs que tentam ataques de força bruta:

    • Instalar: sudo apt install fail2ban -y
    • Configurar /etc/fail2ban/jail.local
    • Definir maxretry=3 e bantime=3600
    • Reiniciar o serviço: sudo systemctl restart fail2ban

FAQ

Qual porta devo usar para o SSH?
Recomendo uma porta alta entre 1024 e 65535, como 22222 ou 54321. Evite portas comuns, como 80, 443 e 3306, para reduzir a exposição a varreduras. Depois da alteração, lembre-se de liberar a nova porta no grupo de segurança do provedor de nuvem.
O que fazer se eu perder o acesso após alterar o SSH?
Não entre em pânico. Acesse o console do provedor de nuvem por VNC, reverta a configuração e reinicie o serviço sshd. É por isso que recomendo manter uma conexão aberta antes da alteração e testar em uma nova janela.
O fail2ban pode bloquear o meu próprio IP?
Sim. Se você errar a senha muitas vezes, seu próprio IP também poderá ser bloqueado. Para desbloquear, use: sudo fail2ban-client set sshd unbanip SEU_IP. Durante a configuração, vale adicionar seu IP à lista de permissões com ignoreip.
Qual é a diferença entre inicializar o Ubuntu 22.04 e o 24.04?
O processo deste artigo funciona integralmente nas duas versões. A principal diferença é que o Ubuntu 24.04 usa uma versão mais recente do OpenSSH, a 9.6, com configurações padrão mais rígidas e alguns algoritmos de criptografia antigos desativados. Talvez seja necessário atualizar clientes SSH mais antigos.
O login por chave é muito mais seguro do que o login por senha?
A diferença é de várias ordens de grandeza. Quebrar por força bruta uma chave Ed25519 de 256 bits levaria mais tempo do que a idade do universo. Já senhas estão sujeitas a ataques de dicionário e força bruta; senhas fracas praticamente deixam o servidor desprotegido.
Posso voltar a usar a porta 22 no SSH?
Tecnicamente, sim, mas não recomendo. A porta 22 é o alvo preferido de varreduras em toda a internet. Usar uma porta alta evita a maior parte dos scripts automatizados de varredura. Em conjunto com fail2ban e autenticação por chave, a proteção fica bem melhor.

11 min de leitura · Publicado em: 27 mar 2026 · Atualizado em: 4 set 2026

Comentários

Entre com GitHub para comentar

Easton BlogEaston Blog