Tuning e Hardening - Host

De Wiki Projeto Root
Revisão de 21h03min de 19 de fevereiro de 2026 por Diegocosta (discussão | contribs) (→‎Kernel Tuning e Hardening)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

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.