🔐 O que é hardening de kernel?
Hardening de kernel é o processo de reduzir a superfície de ataque do sistema operacional, limitando comportamentos perigosos, prevenindo exploração de vulnerabilidades e dificultando escalonamento de privilégios — sem quebrar aplicações.
📌 1. Requisitos antes de aplicar
✔ Teste sempre em ambiente de staging
✔ Tenha acesso via console/VNC (não apenas SSH)
✔ Faça backup ou snapshot do servidor
✔ Conheça seu workload (containers, VPN, firewall, etc.)
⚙️ 2. Hardening com sysctl (kernel runtime)
Crie ou edite:
/etc/sysctl.d/99-hardening.conf
🔒 Proteções contra exploração e escalonamento
kernel.kptr_restrict = 2 kernel.dmesg_restrict = 1 kernel.yama.ptrace_scope = 1 kernel.unprivileged_bpf_disabled = 1 kernel.randomize_va_space = 2
✔ Protege contra leak de endereços
✔ Bloqueia ptrace entre processos
✔ Mantém ASLR ativo
🌐 Proteções de rede (anti-spoofing e ataques comuns)
net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.tcp_syncookies = 1
✔ Evita spoofing
✔ Bloqueia redirects maliciosos
✔ Mitiga SYN Flood
🚫 ICMP e broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1
🔐 Endurecimento de filesystem
fs.protected_hardlinks = 1 fs.protected_symlinks = 1 fs.suid_dumpable = 0
✔ Protege contra ataques via symlink
✔ Evita dump de processos SUID
🔄 Aplicar regras
sysctl --system
🧩 3. Desabilitar módulos de kernel perigosos
Crie:
/etc/modprobe.d/hardening.conf
install cramfs /bin/true install freevxfs /bin/true install jffs2 /bin/true install hfs /bin/true install hfsplus /bin/true install udf /bin/true
✔ Elimina vetores de ataque raros
✔ Nenhum impacto em servidores web
🚷 4. Desativar core dumps
echo '* hard core 0' > /etc/security/limits.d/99-core.conf
🔑 5. Restringir acesso ao kernel e memória
chmod 600 /boot/config-* chmod 700 /boot
mount -o remount,hidepid=2 /proc
⚠️ Cuidado:
hidepid=2pode afetar ferramentas de monitoramento.
🧠 6. Compilar kernel customizado (opcional – alto nível)
Se você controla o kernel:
✔ CONFIG_SECURITY=y
✔ CONFIG_HARDENED_USERCOPY=y
✔ CONFIG_STACKPROTECTOR_STRONG=y
✔ CONFIG_STRICT_KERNEL_RWX=y
✔ CONFIG_RANDOMIZE_BASE=y
👉 Ideal para servidores críticos, não obrigatório para VPS padrão.
🔥 7. Combine com outras camadas (obrigatório)
Hardening de kernel não substitui:
✔ Firewall (nftables/iptables)
✔ Crowdsec(Clique aqui e veja como instalar Crowdsec)
✔ Fail2ban(opcional se utilizar Crowdsec)
✔ SSH hardening
✔ Atualizações automáticas
✔ Monitoramento ativo (Zabbix, Netdata, etc.)
⚠️ O que NÃO fazer em produção
❌ Desabilitar IPv6 sem testar
❌ Bloquear ptrace totalmente (breaks debuggers)
❌ Aplicar sysctl de “blog aleatório”
❌ Copiar hardening de desktop para servidor
📊 Checklist rápido
✅ ASLR ativo
✅ BPF restrito
✅ Redirects desativados
✅ FS protegido
✅ Módulos inúteis bloqueados
✅ LSM ativo
✅ Monitoramento funcional
8. Arquivo 99-hardening.conf pronto para uso
📁 PARTE 1 — 99-hardening.conf por distribuição
Todos os arquivos abaixo ficam em:
/etc/sysctl.d/99-hardening.conf
Após criar:
sysctl --system
🟠 Ubuntu 20.04 / 22.04 / 24.04 (LTS)
Compatível com Apache, Nginx, PHP-FPM, MariaDB, Docker (com ressalvas)
############################ # Kernel hardening ############################ kernel.kptr_restrict = 2 kernel.dmesg_restrict = 1 kernel.unprivileged_bpf_disabled = 1 kernel.randomize_va_space = 2 kernel.sysrq = 0 kernel.yama.ptrace_scope = 1 ############################ # Filesystem protections ############################ fs.protected_hardlinks = 1 fs.protected_symlinks = 1 fs.suid_dumpable = 0 fs.protected_fifos = 2 fs.protected_regular = 2 ############################ # Network hardening ############################ net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_timestamps = 0 ############################ # ICMP protection ############################ net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 ############################ # IPv6 (mantém ativo e seguro) ############################ net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0
🔵 AlmaLinux / Rocky Linux 8 / 9
SELinux-friendly (modo Enforcing)
############################ # Kernel ############################ kernel.kptr_restrict = 2 kernel.dmesg_restrict = 1 kernel.unprivileged_bpf_disabled = 1 kernel.randomize_va_space = 2 kernel.sysrq = 0 ############################ # Filesystem ############################ fs.protected_hardlinks = 1 fs.protected_symlinks = 1 fs.suid_dumpable = 0 fs.protected_fifos = 2 fs.protected_regular = 2 ############################ # Network ############################ net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_syncookies = 1 ############################ # ICMP ############################ net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1
🟢 Debian 11 / 12
Muito estável para WordPress e DirectAdmin
kernel.kptr_restrict = 2 kernel.dmesg_restrict = 1 kernel.unprivileged_bpf_disabled = 1 kernel.randomize_va_space = 2 kernel.sysrq = 0 kernel.yama.ptrace_scope = 1 fs.protected_hardlinks = 1 fs.protected_symlinks = 1 fs.suid_dumpable = 0 fs.protected_fifos = 2 fs.protected_regular = 2 net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_timestamps = 0
9.🧩 PARTE 2 — Hardening específico para WordPress (produção)
Aqui o foco é reduzir exploits comuns (RCE, LFI, brute force, malware) sem quebrar plugins ou updates.
🔐 1. Kernel + FS (essencial)
Já coberto pelo 99-hardening.conf, mas adicione:
Desabilitar módulos raros (comum em exploits)
/etc/modprobe.d/wordpress-hardening.conf
install cramfs /bin/true install freevxfs /bin/true install hfs /bin/true install hfsplus /bin/true install udf /bin/true
🗂️ 2. Permissões corretas (crítico)
Nunca rode WordPress como 777. Abaixo exemplos de diretorio com 755 e arquivos 644.Altere /var/www para o caminho da conta do usuário.
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;wp-config.php
chmod 600 wp-config.php
🔐 WordPress – Bloquear execução fora do necessário
NGINX + Apache (.htaccess)
🎯 Objetivo
Impedir RCE, uploads maliciosos, execução indevida de PHP e exploits comuns, bloqueando antes do PHP sempre que possível.
🧱 CENÁRIO
- NGINX como proxy reverso OU standalone
- Apache por trás (opcional)
- PHP-FPM ou mod_php
✔ Regra de ouro: NGINX bloqueia primeiro → Apache reforça
🥇 PARTE 1 — NGINX (OBRIGATÓRIO SE EXISTIR)
📍 Arquivo do site (server {})
1️⃣ Bloquear PHP em uploads (CRÍTICO)
location ~* ^/wp-content/uploads/.*\.php$ {
deny all;
access_log off;
log_not_found off;
}
2️⃣ Bloquear PHP em wp-includes
location ~* ^/wp-includes/.*\.php$ {
deny all;
}
3️⃣ Plugins (OPCIONAL – use com cautela)
location ~* ^/wp-content/plugins/.*\.php$ {
deny all;
}
❗ Pode quebrar plugins com endpoints próprios.
4️⃣ Proteger arquivos sensíveis
location ~* /(wp-config\.php|readme\.html|license\.txt) {
deny all;
}
location ~ /\. {
deny all;
}
5️⃣ Bloquear XML-RPC (recomendado)
location = /xmlrpc.php {
deny all;
}
6️⃣ Executar PHP APENAS onde é necessário
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
➡️ Com isso, somente:
/index.php/wp-login.php/wp-admin/*.php
executam PHP.
🥈 PARTE 2 — APACHE (.htaccess) (SEGUNDA CAMADA)
📍 /wp-content/uploads/.htaccess
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
Options -ExecCGI
php_flag engine off
📍 /wp-includes/.htaccess
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
📍 /wp-content/plugins/.htaccess (OPCIONAL)
Seguro (recomendado)
<FilesMatch "\.php$">
Require all granted
</FilesMatch>
📍 .htaccess (RAIZ)
<FilesMatch "(wp-config\.php|readme\.html|license\.txt)">
Require all denied
</FilesMatch>
<FilesMatch "^\.">
Require all denied
</FilesMatch>
<Files xmlrpc.php>
Require all denied
</Files>
<LimitExcept GET POST HEAD>
Require all denied
</LimitExcept>
🧪 TESTES OBRIGATÓRIOS
| URL | Resultado |
|---|---|
/wp-content/uploads/test.php | ❌ 403 |
/wp-includes/version.php | ❌ 403 |
/wp-config.php | ❌ 403 |
/xmlrpc.php | ❌ 403 |
/wp-login.php | ✅ OK |
/wp-admin/admin.php | ✅ OK |
Teste rápido:
curl -I https://site.com/wp-content/uploads/test.php
⚠️ OBSERVAÇÕES IMPORTANTES
.htaccessimpacta performance → VHost no nginx é melhorphp_flagpode ser ignorado em PHP-FPM, mas<FilesMatch>continua eficaz- Nunca use permissões
777 - Sempre teste plugins após hardening
✅ CHECKLIST FINAL
✔ PHP bloqueado em uploads
✔ PHP bloqueado em wp-includes
✔ Execução restrita ao core
✔ Arquivos sensíveis protegidos
✔ XML-RPC bloqueado
🔑 10. WordPress SALTs (obrigatório)
No wp-config.php:
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true); // se usar deploy/versionamento
🛡️ 11. PHP Hardening (essencial para WP)
php.ini
expose_php = Off display_errors = Off cgi.fix_pathinfo = 0 allow_url_fopen = Off allow_url_include = Off
Funções perigosas
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
📊 8. Monitoramento essencial
✔ Fail2ban com filtros WP ou Crowdsec (Clique aqui para aprender Como instalar Crowdsec)
✔ Monitorar:
- consumo de CPU por PHP-FPM
- execuções fora de
/usr/bin/php - alterações em
wp-config.php
✅ Checklist final WordPress
✔ Kernel hardened
✔ PHP restrito
✔ Uploads protegidos
✔ Execução PHP limitada
✔ Permissões corretas
✔ XML-RPC controlado
✔ Backups fora do webroot
Clique aqui e consulte nossos planos de Gerenciamento de Servidor

