Hardening Linux: Como Desabilitar Root e Proteger sua VPS

11 min de leitura Segurança Linux
Hardening Linux: Como Desabilitar Root e Proteger sua VPS

A conta root é o "deus" do sistema Linux. Ela possui permissões ilimitadas, capaz de excluir arquivos críticos, modificar configurações de segurança e comprometer toda a infraestrutura da sua VPS. Embora seja indispensável para tarefas administrativas iniciais, manter o acesso direto via senha para esse usuário é uma das vulnerabilidades mais comuns exploradas em ataques de força bruta na internet.

Neste tutorial, abordaremos as melhores práticas para desabilitar root e implementar um hardening linux básico mas robusto. O objetivo é criar uma camada adicional de segurança sem sacrificar a sua capacidade de gerenciar o servidor. Vamos configurar acesso seguro via chaves SSH, instalar ferramentas de detecção de intrusão como UFW e Fail2ban, e garantir que todas as ações sejam auditáveis.

1. Preparação do Ambiente

Antes de qualquer modificação crítica, é fundamental ter um plano de contingência. Se você travar sua própria VPS durante o processo de configuração, precisará de acesso via console (VNC/KVM) do painel da hospedagem para corrigir os erros.

Conecte-se ao seu servidor como root através do terminal:

ssh root@seu_ip_servidor

A primeira tarefa é atualizar o sistema operacional para garantir que todos os pacotes estejam na versão mais recente e segura. Isso também resolve dependências futuras.

apt update && apt upgrade -y

2. Criação de um Usuário Administrativo com Sudo

Nunca trabalhe diretamente como root. A prática recomendada é criar um usuário comum e conceder a ele privilégios de administrador através do grupo sudo. Isso permite que você execute comandos administrativos apenas quando necessário, usando o comando sudo, mantendo a maioria das sessões com privilégios reduzidos.

Crie um novo usuário. Você pode substituir adminuser pelo nome de sua preferência:

adduser adminuser

O sistema solicitará que você defina uma senha forte e confirme algumas informações opcionais. Após a criação, adicione este usuário ao grupo sudo:

usermod -aG sudo adminuser

Agora, teste o novo usuário em uma nova janela de terminal (sem fechar a conexão atual) para garantir que ele funciona e tem permissões de superusuário:

ssh adminuser@seu_ip_servidor
sudo ls /root

Se o comando listar o conteúdo da pasta raiz sem erro de permissão, seu usuário está configurado corretamente. Você pode sair da sessão atual.

3. Configuração de Autenticação por Chaves SSH (SSH Keys)

A troca de senhas pela rede é vulnerável a ataques de dicionário e força bruta. As SSH keys oferecem uma segurança muito superior, pois utilizam criptografia de chave pública/privada. Além disso, esta configuração nos permitirá desativar o login por senha posteriormente.

No seu computador local (cliente), gere um par de chaves se ainda não tiver:

ssh-keygen -t ed25519 -C "[email protected]"

Copie a chave pública para o novo servidor. O comando abaixo copiará automaticamente a chave para o arquivo ~/.ssh/authorized_keys do usuário adminuser:

ssh-copy-id adminuser@seu_ip_servidor

Se você estiver em um ambiente Windows e não tiver o ssh-copy-id, pode usar o comando scp manualmente para copiar o arquivo id_ed25519.pub para o servidor e depois anexá-lo:

cat ~/.ssh/id_ed25519.pub | ssh adminuser@seu_ip_servidor "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Verifique se a autenticação por chave está funcionando. Conecte-se ao servidor usando o novo usuário. Se o login for imediato, sem pedir senha, as chaves estão ativas.

4. Desabilitando Login Root e Senhas no SSH

Agora que temos um usuário administrativo com acesso via chave, podemos endurecer a configuração do daemon SSH (sshd). Vamos editar o arquivo de configuração principal:

sudo nano /etc/ssh/sshd_config

Realize as seguintes alterações. Procure pelas linhas correspondentes (remova o # se estiverem comentadas) e ajuste os valores:

  • Desativar login root: Altere PermitRootLogin yes para PermitRootLogin no. Isso impede que qualquer pessoa, mesmo que tenha a senha do root, tente logar diretamente.
  • Desativar login por senha: Altere PasswordAuthentication yes para PasswordAuthentication no. Isso força o uso exclusivo de chaves SSH.
  • Protocolo Seguro: Certifique-se de que PubkeyAuthentication yes esteja ativo.
  • Porta (Opcional): Embora não seja uma medida de segurança absoluta, mudar a porta padrão (22) para outra alta, como 2222, reduz drasticamente o ruído de bots automatizados. Altere Port 22 para Port 2222.

Salve o arquivo (Ctrl+O, Enter) e saia (Ctrl+X). Para aplicar as mudanças, reinicie o serviço SSH:

sudo systemctl restart sshd

Atenção: Antes de fechar a conexão atual, mantenha-a aberta. Abra uma nova janela de terminal e tente conectar usando o novo usuário e, se mudou a porta, especifique-a com -p 2222. Se falhar, não feche a janela original até corrigir o erro.

5. Hardening do SSH (Otimizações de Segurança)

Além das configurações básicas, podemos adicionar camadas extras de proteção no arquivo /etc/ssh/sshd_config:

  • MaxAuthTries 3: Limita o número de tentativas de autenticação falhas por conexão. Isso ajuda a mitigar ataques de força bruta rápidos.
  • LoginGraceTime 20: Reduz o tempo que um usuário não autenticado pode permanecer conectado ao servidor antes de ser desconectado, economizando recursos.
  • X11Forwarding no: Desativa o encaminhamento X11 se você não estiver usando interface gráfica remota, reduzindo a superfície de ataque.

Após editar essas opções, reinicie o serviço novamente:

sudo systemctl restart sshd

6. Instalação e Configuração do Firewall (UFW)

O UFW (Uncomplicated Firewall) é uma interface amigável para o iptables, padrão em distribuições Debian/Ubuntu. Ele filtra o tráfego de entrada e saída na porta de rede.

Instale o UFW se ainda não estiver presente:

sudo apt install ufw -y

Por segurança, devemos permitir conexões SSH antes de ativar o firewall. Se você mudou a porta padrão para 2222, ajuste conforme necessário:

sudo ufw allow ssh
# Ou, se usou porta customizada:
sudo ufw allow 2222/tcp

Agora, ative o firewall. O UFW negará por padrão todo tráfego que não seja explicitamente permitido:

sudo ufw enable

O sistema pedirá confirmação para interromper conexões SSH existentes se elas não estiverem permitidas. Como já configuramos a permissão acima, responda y. Verifique o status:

sudo ufw status

Você deve ver 22/tcp (ALLOW) ou a porta customizada, e Anywhere (DENY) para outros serviços. Se você hospedar um site web, lembre-se de abrir as portas 80 (HTTP) e 443 (HTTPS):

sudo ufw allow 'Nginx Full'

7. Proteção Contra Ataques de Força Bruta com Fail2ban

Mesmo com o firewall, ataques de força bruta contra a porta SSH continuarão ocorrendo na internet. O Fail2ban monitora os logs do sistema e bane automaticamente endereços IP que apresentam um número excessivo de tentativas de login falhas.

Instale o pacote:

sudo apt install fail2ban -y

O Fail2ban vem com configurações padrão razoáveis, mas para SSH, podemos criar uma configuração específica. Crie um arquivo de overrides:

sudo nano /etc/fail2ban/jail.local

Cole o seguinte conteúdo para ajustar as regras do SSH:

[sshd]
enabled = true
port = ssh,2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

Explicação das diretrizes:

  • port: Inclui a porta padrão e a customizada, se aplicável.
  • maxretry: Número máximo de tentativas falhas permitidas (3).
  • bantime: Tempo em segundos que o IP será bloqueado (1 hora).
  • findtime: Janela de tempo na qual as tentativas devem ocorrer para acionar a banção.

Inicie e ative o serviço para garantir que ele rode na inicialização:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Verifique se o jail está ativo:

sudo fail2ban-client status sshd

8. Monitoramento e Auditoria com Auditd

Para ambientes que exigem conformidade ou monitoramento profundo de integridade, o auditd (Linux Audit Daemon) registra eventos específicos do sistema, como alterações em arquivos sensíveis, tentativas de mudança de UID/GID e uso de comandos privilegiados.

Instale o pacote:

sudo apt install auditd audispd-plugins -y

O auditd é configurado através do arquivo /etc/audit/rules.d/audit.rules. Para um hardening básico, você pode adicionar regras para monitorar alterações no arquivo de senhas e grupos:

sudo nano /etc/audit/rules.d/audit.rules

Adicione as seguintes linhas ao final do arquivo:

-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k sudoers_changes

Isso instrui o sistema a registrar qualquer escrita (w) ou alteração de atributos (a) nos arquivos críticos de identidade e permissão.

Reinicie o serviço para aplicar as regras:

sudo systemctl restart auditd

Você pode verificar os logs usando a ferramenta ausearch. Por exemplo, para buscar alterações recentes no arquivo de senhas:

sudo ausearch -k identity

9. Alternativa Moderna: CrowdSec

Enquanto o Fail2ban é excelente e tradicional, o CrowdSec representa uma abordagem mais moderna de segurança baseada em comunidade. Ele utiliza um banco de dados colaborativo de IPs maliciosos. Se um IP tentar acessar seu servidor muitas vezes, ele não apenas é banido localmente, mas sua reputação é compartilhada globalmente, protegendo outras VPS no futuro.

A instalação do CrowdSec é simples e oferece uma interface web opcional para visualização:

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
sudo apt install crowdsec

Após a instalação, instale o scenario de SSH para proteção automática:

sudo apt install crowdsec-http-server crowdsec-firewall-bouncer-iptables

Inicie e ative os serviços:

sudo systemctl enable --now crowdsec
sudo systemctl enable --now crowdsec-firewall-bouncer-iptables

O CrowdSec se integra naturalmente com o UFW ou Firewalld, criando uma camada de defesa dinâmica que evolui contra novas ameaças.

10. Verificação Final e Boas Práticas Contínuas

Com todas as configurações aplicadas, realize uma verificação completa da segurança do seu servidor:

  1. Teste de Login: Tente conectar via SSH usando o usuário adminuser e sua chave privada. Deve funcionar.
  2. Teste de Bloqueio Root: Tente conectar como root. O servidor deve recusar a conexão imediatamente com uma mensagem de erro.
  3. Teste de Senha: Se você ainda tiver uma sessão aberta, tente alterar o PasswordAuthentication para tentar login por senha. Deve falhar.
  4. Status do Firewall: Confirme que apenas as portas necessárias (SSH e Web) estão abertas via sudo ufw status verbose.

Lembre-se de fazer backups regulares das configurações críticas, especialmente os arquivos de configuração do SSH e do firewall. Mantenha o sistema atualizado regularmente com apt update && apt upgrade para corrigir vulnerabilidades de dia zero.

A implementação dessas medidas transforma uma VPS padrão em um ambiente resistente a ataques automatizados comuns. Ao eliminar o acesso direto ao root, forçar chaves SSH, filtrar tráfego com UFW e monitorar tentativas de intrusão com Fail2ban ou CrowdSec, você estabelece uma base sólida para qualquer aplicação web ou serviço rodando em produção.

A segurança é um processo contínuo, não um destino final. Monitore os logs do auditd periodicamente e revise as regras do firewall conforme sua infraestrutura crescer. Um servidor bem configurado não apenas protege seus dados, mas também garante a disponibilidade e a integridade dos serviços prestados aos seus usuários.

Compartilhar: Link copiado!
Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000