Tuning e Hardening - Host
Sobre
Olá! Visitante, reunimos aqui, informações sobre o processo de Tuning em Sistemas GNU-Linux no bare metal,ou seja, no servidor físico, para máquinas virtual veja a página dedicada para VM em Tuning_e_Hardening_-_VM . Sendo este procedimento realizado para aumentar o desempenho entre 10% a 40% dependendo do hardware até um pouco mais. Estes ajustes podem auxiliar em momentos que algum sistema ou rede tenham gargalo, ou até mesmo evita um upgrade desnecessário de infra, uma vez que por padrão o Kernel Linux vem em modo conservador, assim mantendo a compatibilidade entre os mais diversos tipos de utilização. Após os ajustes abaixo recomenda-se fazer reboot em seu equipamento, assim efetivando todas as modificações no processo de boot do sistema.
Compatibilidade: Este conjunto de parâmetros sysctl é compatível com distribuições Linux que utilizam kernel Linux 5.4 ou superior.
Distribuições testadas e compatíveis: - Debian 11, 12 e 13 - Ubuntu 20.04 LTS, 22.04 LTS e 24.04 LTS - Proxmox VE 7, 8 e 9 - Rocky Linux 8 e 9 - AlmaLinux 8 e 9 - RHEL 8 e 9
Kernel Tuning e Hardening
Este projeto apresenta um conjunto de configurações e scripts para ajuste de desempenho (tuning) e endurecimento de segurança (hardening) do kernel Linux.
O foco é melhorar estabilidade, capacidade de rede e segurança do sistema, sem desabilitar proteções críticas do kernel ou utilizar parâmetros obsoletos.
Objetivos
- Ajustar parâmetros do kernel para servidores
- Reduzir superfície de ataque
- Manter compatibilidade com auditorias técnicas
- Fornecer mecanismo simples de validação
Escopo
Estas configurações foram pensadas para:
- Servidores Linux listados como compatíveis
- Ambientes físicos ou virtualizados
- Serviços de rede e infraestrutura
- Uso institucional ou pessoal
Removendo Kernel Antigo no Linux
https://wiki.projetoroot.com.br/index.php?title=Remover_Kernel_Linux_Antigo
Tabela impacto e o objetivo
Esta tabela descreve o impacto e o objetivo de cada grupo de ajustes aplicados diretamente no host, considerando estabilidade, segurança e isolamento entre VMs.
| Componente do host | Objetivo do hardening | Ajustes aplicados | Benefícios práticos | Cuidados / Observações |
|---|---|---|---|---|
| Kernel Linux | Reduzir superfície de ataque do host | Proteções de symlink e hardlink, restrição de dmesg, ptrace limitado, ASLR forçado | Dificulta escalonamento de privilégios e vazamento de informações do kernel | Pode impactar ferramentas de debug no host |
| Filesystem | Evitar abuso de recursos do sistema | fs.file-max elevado, desativação de core dumps setuid | Previne esgotamento de descritores e vazamento de memória sensível | Ajustes devem considerar capacidade real do host |
| Memória | Priorizar VMs em vez do host | swappiness baixo, mmap mínimo elevado | Reduz uso de swap no host e melhora previsibilidade | Swap ainda é necessária para estabilidade extrema |
| Scheduler | Evitar priorização automática indevida | Desativação de autogroup, ajuste de migration cost | Menos jitter e melhor previsibilidade para cargas de virtualização | Pode reduzir responsividade em sessões interativas |
| Rede IPv4 | Proteger o host contra ataques de rede | rp_filter, desativar redirects, source routing, log de pacotes inválidos | Reduz spoofing, ataques de rota e tráfego malformado | Não interfere no tráfego das VMs |
| Stack TCP | Estabilidade e proteção básica | SYN cookies, redução de retries, timeout controlado | Mitiga ataques de SYN flood e conexões zumbis | Host não deve ser usado como servidor de aplicação |
| ARP / Neighbor cache | Estabilidade em ambientes grandes | Limites elevados de gc_thresh, intervalos menores | Evita estouro de cache ARP em ambientes com muitas VMs | Valores devem crescer conforme número de VMs |
| IPv6 | Reduzir exposição desnecessária | Desativação de RA e redirects no host | Evita configuração automática indevida de rotas | Não afeta IPv6 interno das VMs |
| Virtualização | Isolamento entre guests | Kernel hardening padrão + KVM intacto | Reduz risco de impacto de uma VM comprometida | Não substitui atualizações de segurança |
Estrutura do projeto
O papel do prefixo 99:
Em sistemas Linux, os arquivos de configuração do sysctl em /etc/sysctl.d/ são carregados em ordem alfanumérica. Ou seja, o kernel aplica os parâmetros seguindo esta ordem:
1. /usr/lib/sysctl.d/*.conf 2. /run/sysctl.d/*.conf 3. /etc/sysctl.d/*.conf 4. /etc/sysctl.conf
Dentro de cada diretório, os arquivos são lidos do menor para o maior nome.
Usar 99- garante que esses arquivos sejam aplicados por último.
Eles sobrescrevam valores definidos por:
- Distribuição
- Pacotes instalados
- Outros arquivos genéricos de tuning
- O comportamento fique previsível e auditável
| Caminho | Descrição |
|---|---|
| /etc/sysctl/99-custom.conf | Ajustes de desempenho |
| /etc/sysctl/99-hardening.conf | Ajustes de segurança |
| /bin/sysctl-check.sh | Script de validação |
Decisões de segurança
- Mitigações de Meltdown e Spectre permanecem ativas
- Nenhum parâmetro depreciado ou removido é utilizado
- Hardening aplicado sem impacto relevante de desempenho
Aviso
Estas configurações devem ser testadas em ambiente controlado antes da aplicação em produção.
Script Projeto Root
Para facilitar deixamos um script para fazer todo o processo de forma automatizada, assim agilizando o processo de instalação, caso queira utilizar veja:
https://github.com/projetoroot/tuning-host
Para instalar automaticamente faça:
Acesse seu servidor/VM ( Linux que será aplicado o tuning ) por ssh com usuário root e execute a linha abaixo
wget https://raw.githubusercontent.com/projetoroot/tuning-host/refs/heads/main/install.sh && bash install.sh
Caso queira instalar manualmente veja abaixo os procedimentos
Kernel Tuning – sysctl
Crie o arquivo 99-custom.conf
nano /etc/sysctl.d/99-custom.conf
Arquivo: 99-custom.conf
Copie e cole o conteúdo abaixo no arquivo
############################ # Limites de arquivos ############################ # Define o número máximo de arquivos abertos no sistema fs.file-max = 1048576 ############################ # Gerenciamento de memória ############################ # Reduz uso de swap, priorizando memória RAM vm.swappiness = 1 ############################ # Portas efêmeras e conexões ############################ # Intervalo de portas locais para conexões de saída net.ipv4.ip_local_port_range = 10000 65000 # Número máximo de conexões pendentes no listen net.core.somaxconn = 65535 ############################ # Buffers globais de rede ############################ # Buffer máximo de recepção net.core.rmem_max = 16777216 # Buffer máximo de envio net.core.wmem_max = 16777216 # Buffer padrão de recepção net.core.rmem_default = 262144 # Buffer padrão de envio net.core.wmem_default = 262144 ############################ # Buffers TCP ############################ # Buffer TCP de recepção: min, default e max net.ipv4.tcp_rmem = 4096 87380 16777216 # Buffer TCP de envio: min, default e max net.ipv4.tcp_wmem = 4096 65536 16777216 ############################ # Filas e backlog ############################ # Fila máxima de pacotes por interface net.core.netdev_max_backlog = 50000 # Máximo de conexões SYN pendentes net.ipv4.tcp_max_syn_backlog = 32768 # Limite de conexões em TIME_WAIT net.ipv4.tcp_max_tw_buckets = 262144 ############################ # Otimizações TCP ############################ # Permite reutilização de conexões TIME_WAIT net.ipv4.tcp_tw_reuse = 1 # Reduz tempo de espera no fechamento TCP net.ipv4.tcp_fin_timeout = 10 # Evita reinício lento após ociosidade net.ipv4.tcp_slow_start_after_idle = 0 # Reduz tentativas de SYN net.ipv4.tcp_syn_retries = 3 # Reduz tentativas de SYN-ACK net.ipv4.tcp_synack_retries = 3 ############################ # Buffers UDP ############################ # Buffer mínimo de recepção UDP net.ipv4.udp_rmem_min = 8192 # Buffer mínimo de envio UDP net.ipv4.udp_wmem_min = 8192 ############################ # Ajustes de TCP ############################ # Ativa escalonamento de janela TCP net.ipv4.tcp_window_scaling = 1 ############################ # Hardening IPv4 ############################ # Não enviar redirecionamentos ICMP net.ipv4.conf.all.send_redirects = 0 # Não aceitar redirecionamentos ICMP net.ipv4.conf.all.accept_redirects = 0 # Não aceitar source routing net.ipv4.conf.all.accept_source_route = 0 # Logar pacotes inválidos net.ipv4.conf.all.log_martians = 1 ############################ # Scheduler do kernel ############################ # Reduz migração excessiva de processos entre CPUs kernel.sched_migration_cost_ns = 5000000 # Desativa agrupamento automático de processos kernel.sched_autogroup_enabled = 0 ############################ # Cache ARP ############################ # Intervalo de coleta de entradas ARP net.ipv4.neigh.default.gc_interval = 15 # Limite inicial do cache ARP net.ipv4.neigh.default.gc_thresh1 = 4096 # Limite intermediário do cache ARP net.ipv4.neigh.default.gc_thresh2 = 8192 # Limite máximo do cache ARP net.ipv4.neigh.default.gc_thresh3 = 16384
Observações
- Os valores priorizam estabilidade e throughput
- Não há impacto negativo em segurança
- Compatível com cargas de rede elevadas
Kernel Hardening – sysctl
Crie o arquivo 99-hardening.conf
nano /etc/sysctl.d/99-hardening.conf
Arquivo: 99-hardening.conf
Copie e cole o conteúdo abaixo no arquivo
########################### # Kernel hardening baseline ############################ # Proteção de links simbólicos e hardlinks fs.protected_hardlinks = 1 fs.protected_symlinks = 1 fs.protected_fifos = 1 fs.protected_regular = 1 # Restringir acesso ao dmesg kernel.dmesg_restrict = 1 # Restringir acesso a ponteiros do kernel kernel.kptr_restrict = 2 # Evitar core dumps de binários setuid fs.suid_dumpable = 0 # Endurecer uso de ptrace kernel.yama.ptrace_scope = 1 ############################ # Hardening de rede IPv4 ############################ # Proteção contra IP spoofing net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # Não aceitar redirecionamentos ICMP net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 # Não enviar redirecionamentos net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 # Não aceitar source routing net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # Ativar SYN cookies net.ipv4.tcp_syncookies = 1 # Ignorar ICMP suspeitos net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 # Logar pacotes inválidos net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 ############################ # Hardening IPv6 ############################ # Desabilitar redirects IPv6 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 # Não aceitar router advertisements se não for roteador net.ipv6.conf.all.accept_ra = 0 net.ipv6.conf.default.accept_ra = 0 ############################ # Memória e execução ############################ # Endurecer mmap em regiões baixas vm.mmap_min_addr = 65536 # Proteger contra execuções indevidas kernel.randomize_va_space = 2 ############################ # Controle de pacotes suspeitos ############################ # Ignorar pacotes com timestamp inválido net.ipv4.tcp_timestamps = 1 # Validar pacotes TCP net.ipv4.tcp_rfc1337 = 1
Aplicação das configurações sysctl
As configurações de tuning e hardening devem ser aplicadas por meio de arquivos no diretório /etc/sysctl.d/.
Não é recomendado editar diretamente o arquivo /etc/sysctl.conf.
Aplicação
Aplicar as configurações:
sysctl --system
Reboot não é obrigatório, mas recomendado em ambientes críticos.
Validação das configurações sysctl
O script sysctl-check.sh valida se os parâmetros definidos estão ativos no kernel em tempo de execução.
Script de validação
nano /bin/sysctl-check.sh
#!/bin/bash
echo "Validação de sysctl - tuning e hardening"
echo "Host: $(hostname)"
echo "Data: $(date)"
echo
FAIL=0
check() {
local key="$1"
local expected="$2"
current=$(sysctl -n "$key" 2>/dev/null)
if [ "$current" = "$expected" ]; then
printf "[ OK ] %-45s = %s\n" "$key" "$current"
else
printf "[FAIL] %-45s esperado: %s | atual: %s\n" "$key" "$expected" "${current:-N/A}"
FAIL=1
fi
}
echo "== Kernel hardening =="
check fs.protected_hardlinks 1
check fs.protected_symlinks 1
check fs.protected_fifos 1
check fs.protected_regular 1
check kernel.dmesg_restrict 1
check kernel.kptr_restrict 2
check fs.suid_dumpable 0
check kernel.yama.ptrace_scope 1
check kernel.randomize_va_space 2
check vm.mmap_min_addr 65536
echo
echo "== Rede IPv4 =="
check net.ipv4.conf.all.rp_filter 1
check net.ipv4.conf.default.rp_filter 1
check net.ipv4.conf.all.accept_redirects 0
check net.ipv4.conf.default.accept_redirects 0
check net.ipv4.conf.all.send_redirects 0
check net.ipv4.conf.default.send_redirects 0
check net.ipv4.conf.all.accept_source_route 0
check net.ipv4.conf.default.accept_source_route 0
check net.ipv4.tcp_syncookies 1
check net.ipv4.icmp_echo_ignore_broadcasts 1
check net.ipv4.icmp_ignore_bogus_error_responses 1
check net.ipv4.conf.all.log_martians 1
check net.ipv4.conf.default.log_martians 1
check net.ipv4.tcp_rfc1337 1
check net.ipv4.tcp_timestamps 1
echo
echo "== Rede IPv6 =="
check net.ipv6.conf.all.accept_redirects 0
check net.ipv6.conf.default.accept_redirects 0
check net.ipv6.conf.all.accept_ra 0
check net.ipv6.conf.default.accept_ra 0
echo
echo "== Tuning essencial =="
check fs.file-max 1048576
check vm.swappiness 1
check net.core.somaxconn 65535
check net.ipv4.tcp_fin_timeout 10
check net.ipv4.tcp_tw_reuse 1
check net.ipv4.tcp_slow_start_after_idle 0
echo
if [ $FAIL -eq 0 ]; then
echo "Resultado final: TODOS OS PARÂMETROS ESTÃO CORRETOS"
exit 0
else
echo "Resultado final: EXISTEM PARÂMETROS FORA DO PADRÃO"
exit 1
fi
Saia do arquivo e de permissão de execução.
chmod +x /bin/sysctl-check.sh
Executando:
sysctl-check.sh
Resultado
################################# Validação de sysctl - tuning e hardening Host: debian-base Data: qua 18 fev 2026 18:18:18 -03 == Kernel hardening == [ OK ] fs.protected_hardlinks = 1 [ OK ] fs.protected_symlinks = 1 [ OK ] fs.protected_fifos = 1 [ OK ] fs.protected_regular = 1 [ OK ] kernel.dmesg_restrict = 1 [ OK ] kernel.kptr_restrict = 2 [ OK ] fs.suid_dumpable = 0 [ OK ] kernel.yama.ptrace_scope = 1 [ OK ] kernel.randomize_va_space = 2 [ OK ] vm.mmap_min_addr = 65536 == Rede IPv4 == [ OK ] net.ipv4.conf.all.rp_filter = 1 [ OK ] net.ipv4.conf.default.rp_filter = 1 [ OK ] net.ipv4.conf.all.accept_redirects = 0 [ OK ] net.ipv4.conf.default.accept_redirects = 0 [ OK ] net.ipv4.conf.all.send_redirects = 0 [ OK ] net.ipv4.conf.default.send_redirects = 0 [ OK ] net.ipv4.conf.all.accept_source_route = 0 [ OK ] net.ipv4.conf.default.accept_source_route = 0 [ OK ] net.ipv4.tcp_syncookies = 1 [ OK ] net.ipv4.icmp_echo_ignore_broadcasts = 1 [ OK ] net.ipv4.icmp_ignore_bogus_error_responses = 1 [ OK ] net.ipv4.conf.all.log_martians = 1 [ OK ] net.ipv4.conf.default.log_martians = 1 [ OK ] net.ipv4.tcp_rfc1337 = 1 [ OK ] net.ipv4.tcp_timestamps = 1 == Rede IPv6 == [ OK ] net.ipv6.conf.all.accept_redirects = 0 [ OK ] net.ipv6.conf.default.accept_redirects = 0 [ OK ] net.ipv6.conf.all.accept_ra = 0 [ OK ] net.ipv6.conf.default.accept_ra = 0 == Tuning essencial == [ OK ] fs.file-max = 1048576 [ OK ] vm.swappiness = 1 [ OK ] net.core.somaxconn = 65535 [ OK ] net.ipv4.tcp_fin_timeout = 10 [ OK ] net.ipv4.tcp_tw_reuse = 1 [ OK ] net.ipv4.tcp_slow_start_after_idle = 0 Resultado final: TODOS OS PARÂMETROS ESTÃO CORRETOS #################################
O script pode ser usado em auditorias, automações ou validações periódicas.