Introdução ao Hardening de VPS Linux
A contratação de uma Virtual Private Server (VPS) é apenas o primeiro passo. O que separa um servidor estável e seguro de um alvo fácil para bots e invasores é a configuração inicial, conhecida como hardening. Este tutorial guiará você pelos passos essenciais de segurança assim que receber suas credenciais de acesso, focando em sistemas baseados em Debian/Ubuntu, que são os mais comuns no mercado brasileiro.
O objetivo não é apenas instalar serviços, mas garantir que a superfície de ataque seja minimizada antes mesmo de abrir portas para o público. Vamos cobrir desde a criação do primeiro usuário até a instalação básica de um ambiente LEMP (Linux, Nginx, MySQL/MariaDB, PHP), aplicando filtros de segurança em cada etapa.
Etapa 1: Acesso Inicial e Atualização do Sistema
A primeira conexão deve ser feita como root, o superusuário com acesso total. No entanto, o uso contínuo dessa conta é uma prática de segurança ruim. Nosso primeiro objetivo é criar um usuário administrativo alternativo e garantir que o sistema esteja atualizado.
- Conecte-se ao servidor via SSH: Use seu terminal local (Linux/macOS) ou PowerShell/PuTTY (Windows). Substitua
SEU_IPpelo endereço IP fornecido pelo provedor.
ssh root@SEU_IP
Ao aceitar o aviso de host key, insira a senha temporária. Imediatamente após o login, execute os comandos para atualizar o repositório de pacotes e instalar as versões mais recentes do sistema.
apt update && apt upgrade -y
Se o kernel ou bibliotecas críticas forem atualizadas, um reboot pode ser necessário. Reinicie o servidor com reboot e reconecte-se como root.
- Crie um novo usuário administrador: Escolha um nome de usuário que não seja óbvio (evite "admin" ou "user"). Vamos usar
devopscomo exemplo.
adduser devops
O sistema solicitará uma senha forte e informações opcionais. Defina uma senha complexa. Em seguida, adicione este usuário ao grupo sudo, permitindo que ele execute comandos administrativos.
usermod -aG sudo devops
Agora, você tem um usuário com privilégios elevados, mas ainda limitado. A próxima etapa é fortalecer a autenticação remota.
Etapa 2: Segurança SSH e Desabilitação do Root
O serviço SSH (Secure Shell) é a porta de entrada para seu servidor. Ele é frequentemente alvo de ataques de força bruta, onde bots tentam milhares de combinações de usuário e senha por segundo. Para mitigar isso, devemos alterar a configuração padrão.
- Faça backup da configuração SSH: Sempre tenha um plano B antes de editar arquivos de sistema.
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
- Edite o arquivo de configuração: Use o editor
nanoouvim.
nano /etc/ssh/sshd_config
Dentro do arquivo, localize as seguintes linhas e modifique-as conforme abaixo. Se a linha estiver comentada (iniciando com #), remova o #.
- Altere a porta padrão: A porta 22 é a mais escaneada. Mude para uma porta acima de 1024, por exemplo,
Port 2222. Isso reduz drasticamente o ruído dos logs e ataques automáticos. - Desabilite login direto como root: Defina
PermitRootLogin no. Isso força qualquer invasor a adivinhar um nome de usuário válido antes de tentar quebrar a senha. - Exija autenticação por chave (Opcional, mas recomendado): Para máxima segurança, desabilite senhas com
PasswordAuthentication no. Porém, para este tutorial introdutório, manteremos senhas habilitadas para garantir que você não se trave fora do servidor sem preparação prévia.
Após salvar o arquivo (no nano: Ctrl+O, Enter, Ctrl+X), reinicie o serviço SSH.
systemctl restart sshd
Aviso Crítico: Antes de desconectar, abra um novo terminal e teste a conexão com o novo usuário e porta. Se você falhar ao reconectar, não terá acesso fácil para corrigir (dependendo do painel da sua VPS). Teste assim:
ssh -p 2222 devops@SEU_IP
Se o login for bem-sucedido, você pode fechar a sessão root.
Etapa 3: Configuração do Firewall (UFW)
Com o servidor Linux atualizado e o SSH configurado, o próximo passo lógico é instalar e configurar um firewall. No Ubuntu e Debian, a ferramenta padrão e mais amigável é o UFW (Uncomplicated Firewall).
- Instale o UFW:
apt install ufw -y
- Defina as políticas padrão: Vamos bloquear todo tráfego de entrada, exceto o que for explicitamente permitido.
ufw default deny incoming
ufw default allow outgoing
- Autorize a nova porta SSH: Como mudamos a porta para 2222, precisamos liberá-la antes de ativar o firewall. Se você manteve a porta 22, use
ufw allow ssh.
ufw allow 2222/tcp
- Ative o Firewall:
ufw enable
O sistema perguntará se deseja prosseguir. Digite y e Enter. Agora, seu servidor só responde a conexões na porta 2222 (SSH) e nas portas que liberarmos futuramente (como 80 para HTTP e 443 para HTTPS).
Etapa 4: Proteção contra Brute-Force (Fail2Ban)
O firewall bloqueia portas, mas não impede que alguém tente conectar repetidamente na porta SSH aberta. O Fail2Ban monitora os logs de falhas de login e bane temporariamente o endereço IP do atacante após várias tentativas.
- Instale o Fail2Ban:
apt install fail2ban -y
- Crie um arquivo de configuração local: Nunca edite os arquivos originais em
/etc/fail2ban, pois eles podem ser sobrescritos em atualizações. Crie uma cópia para personalizar.
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- Edite a configuração:
nano /etc/fail2ban/jail.local
No final do arquivo, ou na seção [sshd], certifique-se de que o serviço está habilitado e aponta para a porta correta. Se você mudou a porta SSH para 2222, adicione ou modifique:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
Isso significa que, após 3 tentativas falhas de login via SSH na porta 2222, o IP será banido.
- Inicie e habilite o serviço:
systemctl enable fail2ban
systemctl start fail2ban
Verifique o status com fail2ban-client status sshd. Você verá que a proteção está ativa.
Etapa 5: Instalação Básica do Ambiente LEMP
Agora que a infraestrutura de segurança está no lugar, podemos instalar os componentes para hospedar aplicações web. O stack LEMP (Linux, Nginx, MySQL/MariaDB, PHP) é o padrão da indústria para alta performance.
- Instale o Nginx:
apt install nginx -y
O Nginx já inicia automaticamente. Verifique se está rodando com systemctl status nginx. Agora, libere as portas web no firewall.
ufw allow 'Nginx Full'
- Instale o Banco de Dados (MariaDB): Embora o MySQL seja comum, a MariaDB é frequentemente preferida em ambientes Debian/Ubuntu por ser rápida e compatível.
apt install mariadb-server mariadb-client -y
Após a instalação, execute o script de segurança para definir senha root do banco e remover configurações inseguras padrão.
mysql_secure_installation
Siga as instruções na tela: defina uma senha forte para o root do banco, remova usuários anônimos, desabilite login root remoto e remova o banco de teste. Isso é crucial; muitos iniciantes pulam essa etapa.
- Instale o PHP: Para aplicações modernas (WordPress, Laravel, etc.), instalaremos o PHP com as extensões comuns.
apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip -y
Neste ponto, você tem um servidor funcional. O próximo passo lógico seria configurar o DNS para apontar seu domínio para este IP e ajustar os arquivos de configuração do Nginx para servir seu site, mas isso foge do escopo estrito de hardening inicial.
Considerações Finais sobre Custos e Manutenção
O hardening básico descrito acima transforma uma VPS "crua" em um servidor seguro para produção. É importante notar que a segurança é um processo contínuo, não um evento único.
- Migração de Hospedagem: Ao migrar de hospedagem compartilhada para VPS, você assume toda a responsabilidade pela manutenção do sistema operacional. Scripts de backup automáticos são obrigatórios.
- Custos de VPS: A segurança consome recursos. O Fail2Ban e o monitoramento consomem pouca CPU/RAM, mas manter múltiplas camadas de defesa é essencial para evitar downtime, que é um custo indireto alto.
- Painel Inicial: Muitos provedores oferecem painéis de controle (como DigitalOcean Droplets, AWS EC2 Console). Use-os apenas para gerenciar o ciclo de vida da máquina (ligar/desligar/resetar senha), mas faça toda a configuração interna via SSH.
Lembre-se: Ubuntu vs Debian oferece quase as mesmas ferramentas neste contexto, mas verifique sempre se os nomes dos pacotes são idênticos (geralmente são, exceto em versões muito antigas). Manter seus logs monitorados e atualizações em dia é a melhor forma de garantir que seu investimento em infraestrutura permaneça seguro.