Hardening de Servidores. Este é um guia estruturado de Hardening (Endurecimento) focado em ambientes de produção. O objetivo não é apenas “fechar portas”, mas aplicar o conceito de Defesa em Profundidade (Defense in Depth), onde múltiplas camadas de segurança se sobrepõem para proteger o servidor caso uma delas falhe.
Aqui está o checklist definitivo para SysAdmins, cobrindo desde o Sistema Operacional até a Aplicação.
1. Sistema Operacional (A Fundação)
Antes de instalar qualquer serviço web, o sistema base (AlmaLinux, Debian, Ubuntu, etc.) deve estar seguro.
- Princípio do Menor Privilégio: Nunca opere como
root. Crie um usuário comsudoe use-o para administração. - Atualizações Automáticas: Configure atualizações de segurança automáticas (ex:
dnf-automaticno RHEL/AlmaLinux ouunattended-upgradesno Debian). - Particionamento Seguro: Se possível, monte partições como
/tmp,/var/tmpe/dev/shmcom as flagsnoexecenosuidpara impedir a execução de scripts maliciosos em diretórios temporários. - Remoção de Bloatware: Remova pacotes desnecessários. Se o servidor é web, ele não precisa de cups (impressão), X11 (interface gráfica) ou avahi-daemon.
2. Acesso SSH (A Porta de Entrada)
A maioria dos ataques automatizados visa a porta 22.
- Autenticação via Chave SSH: Desabilite login por senha. Apenas chaves Ed25519 ou RSA (4096 bits).
- Porta Personalizada: Mude a porta padrão (22) para algo acima de 1024 (ex: 50222) para evitar scanners de massa básicos.
- Desativar Root Login: No
sshd_config, definaPermitRootLogin no. - Restrição de Usuários: Use a diretiva
AllowUserspara permitir login apenas de usuários específicos. - Autenticação de Dois Fatores (2FA): Implemente Google Authenticator ou similar no SSH para uma camada extra crítica.
- Clique aqui e veja o artigo SSH seguro além de mudar a porta
3. Firewall e Rede (O Perímetro)
O tráfego deve ser filtrado antes de tocar nos seus serviços.
- Feche tudo, abra o necessário: A política padrão (INPUT) deve ser
DROP. Abra apenas portas essenciais (80, 443 e sua porta SSH personalizada). - Ferramentas de Gestão:
- CSF (ConfigServer Security & Firewall): Excelente para servidores cPanel/DirectAdmin, com interface gráfica e detecção de ataques.
- UFW/Firewalld: Para setups mais limpos/manuais.
- Proteção contra Brute-Force (IPS):
- CrowdSec: Moderno, colaborativo (baseado em reputação de IP global). Clique aqui e veja Como instalar Crowdsec
- Fail2Ban: O clássico, que bane IPs após X tentativas falhas de login lendo os logs.
- Bloqueio de ICMP: Desabilite respostas de Ping (ou limite a taxa) para evitar reconhecimento de rede e flood.
4. Web Server (Nginx, Apache, LiteSpeed)
A configuração padrão dos servidores web quase sempre expõe informações desnecessárias.
- Ocultar Versão (Security via Obscurity):
- Nginx:
server_tokens off; - Apache:
ServerSignature OffeServerTokens Prod - LiteSpeed: Desative “Server Signature” no WebAdmin.
- Nginx:
- Cabeçalhos de Segurança (HTTP Headers): Implemente para mitigar XSS e Clickjacking:
Strict-Transport-Security(HSTS)X-Frame-Options: SAMEORIGINX-Content-Type-Options: nosniffX-XSS-Protection: 1; mode=block
- TLS/SSL Robusto:
- Desabilite TLS 1.0 e 1.1. Use apenas TLS 1.2 e 1.3.
- Use cifras fortes (High Ciphers).
- WAF (Web Application Firewall): Utilize ModSecurity com as regras da OWASP ou soluções proprietárias (como o WAF do Imunify360 ou CloudLinux) para filtrar injeções SQL e XSS em tempo real.
5. PHP e Aplicação (Onde o Código Roda)
Se o atacante passar pelo firewall e pelo Nginx, ele tentará explorar o PHP.
- Desativar Funções Perigosas: No
php.ini, usedisable_functionspara bloquear:exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source. - Open_basedir: Restrinja o PHP a ler arquivos apenas dentro do diretório do site do usuário, impedindo que um script invadido leia o
/etc/passwd. - Ocultar Erros: Em produção,
display_errors = Off. Erros devem ir para o log, nunca para a tela do usuário (vazamento de path). - Permissões de Arquivo:
- Arquivos:
644(Leitura/Escrita para dono, Leitura para outros). - Pastas:
755(Execução/Leitura/Escrita para dono, Leitura/Execução para outros). - Configurações sensíveis (wp-config.php, .env):
600ou400.
- Arquivos:
6. Monitoramento e Auditoria (Visibilidade)
Você não pode proteger o que não vê.
- Logs Centralizados: Se possível, envie logs para um servidor remoto ou serviço (ELK Stack, Graylog) para que, se o servidor for comprometido, os logs não sejam apagados.
- Detecção de Intrusão (HIDS):
- Wazuh: Uma solução completa XDR/SIEM que monitora integridade de arquivos (FIM), rootkits e conformidade.
- Maldet (Linux Malware Detect): Scan periódico de malware em diretórios de upload.
- Monitoramento de Recursos: Zabbix, Prometheus ou Netdata para identificar picos de CPU/RAM que indiquem mineração de cripto (cryptojacking) ou DDoS.
7. Backup e Recuperação (O Plano Z)
Hardening reduz o risco, mas não o elimina.
- Regra 3-2-1: 3 cópias, 2 mídias diferentes, 1 local off-site (fora do data center original).
- Imutabilidade: Se possível, use armazenamento de backup imutável (ex: AWS S3 Object Lock) para se proteger contra Ransomware que criptografa backups.
- Teste de Restore: Um backup que nunca foi restaurado é apenas um arquivo ocupando espaço. Teste a recuperação mensalmente.
FAQ
Hardening (ou endurecimento) é o processo de reduzir a superfície de ataque de um servidor, removendo softwares desnecessários, fechando portas não utilizadas e configurando o sistema operacional e serviços (como Nginx e PHP) com políticas restritivas. É essencial para prevenir invasões, vazamento de dados e garantir a estabilidade em ambientes de produção.
O Firewall de Rede (como CSF, UFW ou Firewalld) filtra o tráfego baseado em portas e IPs (camadas 3 e 4), decidindo quem pode conectar ao servidor. Já o WAF (Web Application Firewall, como ModSecurity ou Cloudflare) analisa o conteúdo do tráfego HTTP/HTTPS (camada 7), bloqueando ataques específicos à aplicação, como SQL Injection e XSS.
Não. Em ambientes de produção, recomenda-se desativar completamente o login por senha e utilizar apenas Chaves SSH (SSH Keys). Senhas são vulneráveis a ataques de força bruta (brute-force), enquanto chaves criptográficas oferecem um nível de segurança exponencialmente maior.
As melhores práticas incluem: desativar a exibição de erros (display_errors = Off), desabilitar funções perigosas no php.ini (como exec e shell_exec), restringir o acesso a arquivos com open_basedir e garantir que as permissões de arquivos e pastas estejam corretas (644 e 755, respectivamente).
Veja Mais:Segurança no WordPress em nível de servidor
Veja Mais:Mover o WordPress do Localhost para o Servidor online: Guia Prático e Seguro
Veja Mais:O que ninguém te conta sobre gerenciar servidores em produção
Veja Mais:Como Proteger seu Servidor Linux Contra Invasões: O Guia Essencial de Hardening
Veja Mais:Como instalar Crowdsec

