- Introdução ao Hardening em Ambientes Linux
- I. Particionamento e Configuração do Sistema de Arquivos
- 1. Criar Partições Dedicadas
- 2. Utilizar Opções de Montagem Seguras
- II. Gestão de Contas e Controle de Acesso
- 3. Desativar o Login Direto da Conta Root
- 4. Implementar uma Política de Senhas Fortes
- 5. Limitar o Uso do `sudo`
- 6. Expirar e Bloquear Contas Inativas
- 7. Auditar Contas e Grupos Regularmente
- III. Segurança de Rede e Serviços
- 8. Configurar um Firewall de Host
- 9. Desativar Serviços e Portas Desnecessários
- 10. Realizar Hardening do Serviço SSH
- 11. Proteger o Kernel com `sysctl`
- 12. Implementar Ferramentas Anti-Brute-Force
- IV. Gestão de Pacotes e Atualizações
- 13. Manter o Sistema Constantemente Atualizado
- 14. Remover Software e Pacotes Desnecessários
- 15. Verificar a Integridade dos Pacotes
- V. Logging, Monitoramento e Auditoria
- 16. Configurar e Centralizar Logs
- 17. Utilizar um Sistema de Detecção de Intrusão (HIDS)
- 18. Habilitar a Auditoria do Sistema com `auditd`
- 19. Monitorar Ativamente Processos e Conexões
- VI. Segurança do Sistema de Arquivos e Permissões
- 20. Aplicar Permissões de Arquivo Restritivas
- 21. Definir uma `umask` Padrão Segura
- 22. Encontrar Arquivos com Permissões Inseguras
- 23. Implementar um Sistema de Controle de Acesso Mandatório (MAC)
- VII. Segurança Física e de Inicialização
- 24. Proteger o Bootloader (GRUB)
- 25. Desabilitar Dispositivos e Módulos de Kernel Desnecessários
Hardening em Ambientes Linux
O termo “hardening” refere-se ao processo de proteger um sistema, reduzindo sua superfície de ataque. Em ambientes linux, que formam a espinha dorsal de grande parte da infraestrutura de TI global, este processo não é apenas uma recomendação, mas uma necessidade crítica. Um sistema Linux padrão, embora robusto, vem com configurações padrão projetadas para usabilidade e compatibilidade, não para segurança máxima. O hardening transforma essa configuração base em uma fortaleza digital, implementando controles rigorosos para mitigar vulnerabilidades, prevenir acessos não autorizados e garantir a integridade dos dados.
Para administradores de sistemas e profissionais de segurança, dominar as técnicas de hardening é fundamental. Ambientes críticos, como servidores web, bancos de dados e infraestruturas de nuvem, são alvos constantes de ameaças cibernéticas. Uma única configuração incorreta pode ser o ponto de entrada para um ataque devastador. Este artigo apresenta um checklist detalhado com 25 práticas essenciais de hardening, organizadas em categorias lógicas, para orientar a fortificação de seus servidores Linux de maneira metódica e eficaz.
I. Particionamento e Configuração do Sistema de Arquivos
A base de um sistema seguro começa na sua estrutura fundamental: o sistema de arquivos. Um particionamento estratégico impede que processos descontrolados em uma área afetem a estabilidade do sistema como um todo.
1. Criar Partições Dedicadas
Separar o sistema de arquivos em partições distintas é uma das primeiras e mais importantes etapas. Isso isola áreas críticas e previne cenários onde, por exemplo, logs descontrolados (/var) ou arquivos de usuários (/home) preencham 100% do disco, travando o sistema operacional. Considere partições separadas para: /, /home, /tmp, /var, e /opt.
2. Utilizar Opções de Montagem Seguras
Ao montar partições, especialmente aquelas que podem ser escritas por usuários ou processos não confiáveis, utilize flags de segurança no arquivo /etc/fstab. Para a partição /tmp, por exemplo, é crucial adicionar as opções nodev (impede a criação de dispositivos), nosuid (ignora o bit SUID, prevenindo escalonamento de privilégios) e noexec (impede a execução de binários).
II. Gestão de Contas e Controle de Acesso
A identidade e o acesso dos usuários são vetores de ataque primários. Um controle rigoroso sobre quem pode acessar o sistema e o que pode fazer é indispensável.
3. Desativar o Login Direto da Conta Root
A conta root é o alvo mais cobiçado. Desabilitar seu login direto, especialmente via SSH, força o uso de contas de usuário normais com privilégios elevados através do sudo. Isso garante que todas as ações administrativas sejam registradas e associadas a um usuário específico. Edite /etc/ssh/sshd_config e defina PermitRootLogin no.
4. Implementar uma Política de Senhas Fortes
Utilize módulos PAM (Pluggable Authentication Modules) como o pam_pwquality ou pam_cracklib para impor requisitos de complexidade para as senhas. Configure no arquivo /etc/security/pwquality.conf parâmetros como comprimento mínimo, exigência de caracteres maiúsculos, minúsculos, números e símbolos.
5. Limitar o Uso do `sudo`
O princípio do menor privilégio deve ser aplicado rigorosamente. Em vez de conceder acesso sudo irrestrito, edite o arquivo /etc/sudoers (usando o comando visudo) para permitir que usuários ou grupos executem apenas os comandos específicos necessários para suas funções.
6. Expirar e Bloquear Contas Inativas
Contas de usuários que não são mais utilizadas representam um risco de segurança. Configure políticas para bloquear automaticamente contas após um período de inatividade (ex: 90 dias) e estabeleça um processo para revisar e remover contas obsoletas periodicamente.
7. Auditar Contas e Grupos Regularmente
Realize auditorias periódicas em todas as contas de usuário e pertencimento a grupos. Verifique se existem contas não autorizadas, privilégios excessivos ou contas de serviço com senhas fracas. O comando cat /etc/passwd e cat /etc/group são pontos de partida.
III. Segurança de Rede e Serviços
A maior parte dos ataques se origina da rede. Reduzir a superfície de ataque de rede e proteger os serviços expostos é uma prioridade máxima.
8. Configurar um Firewall de Host
Todo servidor deve ter um firewall local ativado, como UFW (Uncomplicated Firewall) ou firewalld. A regra de ouro é bloquear todo o tráfego por padrão e permitir explicitamente apenas os serviços e portas necessários (ex: porta 22 para SSH, 80/443 para web).
9. Desativar Serviços e Portas Desnecessários
Cada serviço em execução é um potencial ponto de entrada. Use systemctl ou ss -tuln para listar todos os serviços e portas abertas. Desabilite e, se possível, desinstale qualquer serviço que não seja absolutamente essencial para a função do servidor.
10. Realizar Hardening do Serviço SSH
O acesso SSH é crítico e deve ser fortemente protegido. Além de desabilitar o login do root, considere as seguintes configurações em /etc/ssh/sshd_config:
- Mudar a porta padrão (22) para uma porta alta não utilizada.
- Desabilitar a autenticação por senha (
PasswordAuthentication no) e usar exclusivamente chaves SSH. - Limitar o acesso a usuários ou grupos específicos com as diretivas
AllowUserseAllowGroups. - Configurar um
ClientAliveIntervalpara desconectar sessões ociosas.
11. Proteger o Kernel com `sysctl`
Ajuste os parâmetros de rede do kernel no arquivo /etc/sysctl.conf para mitigar ataques de rede comuns. Configurações importantes incluem a proteção contra SYN floods (net.ipv4.tcp_syncookies = 1), a prevenção de IP spoofing (net.ipv4.conf.all.rp_filter = 1) e o bloqueio de redirecionamentos de pacotes ICMP (net.ipv4.conf.all.accept_redirects = 0).
12. Implementar Ferramentas Anti-Brute-Force
Instale e configure ferramentas como Fail2Ban ou SSHGuard. Elas monitoram os logs de autenticação de serviços como SSH, FTP e servidores de e-mail, e banem temporariamente os endereços IP que apresentam múltiplas tentativas de login falhas, frustrando ataques de força bruta.
IV. Gestão de Pacotes e Atualizações
Vulnerabilidades em softwares são descobertas diariamente. Manter o sistema atualizado é uma das defesas mais eficazes contra exploits conhecidos.
13. Manter o Sistema Constantemente Atualizado
Automatize ou crie uma rotina rigorosa para aplicar atualizações de segurança. Use apt update && apt upgrade (Debian/Ubuntu) ou yum update --security (CentOS/RHEL) regularmente para garantir que todas as correções de vulnerabilidades conhecidas sejam aplicadas.
14. Remover Software e Pacotes Desnecessários
Revise a lista de pacotes instalados (dpkg -l ou rpm -qa) e remova tudo o que não for estritamente necessário. Isso inclui compiladores (como o GCC), bibliotecas de desenvolvimento e outros utilitários que não são necessários em um ambiente de produção e que podem ser usados por um invasor para compilar exploits.
15. Verificar a Integridade dos Pacotes
Use ferramentas do próprio sistema de gerenciamento de pacotes para verificar se os arquivos não foram alterados indevidamente. Em sistemas baseados em Debian, o comando debsums pode ser usado para comparar os checksums dos arquivos instalados com os do pacote original. Em sistemas baseados em RPM, rpm -V cumpre a mesma função.
V. Logging, Monitoramento e Auditoria
Você não pode proteger o que não pode ver. Um sistema robusto de logging e monitoramento é essencial para detectar atividades suspeitas e responder a incidentes.
16. Configurar e Centralizar Logs
Garanta que serviços como rsyslog ou journald estejam configurados para capturar logs de sistema, autenticação e aplicações. Para maior segurança, configure o envio (streaming) desses logs para um servidor de log centralizado e seguro, onde eles não possam ser adulterados por um invasor que tenha comprometido o host.
17. Utilizar um Sistema de Detecção de Intrusão (HIDS)
Implemente um Host-based Intrusion Detection System (HIDS) como o AIDE (Advanced Intrusion Detection Environment) ou Tripwire. Essas ferramentas criam um banco de dados de checksums de arquivos críticos do sistema e o alertam sobre quaisquer modificações não autorizadas, o que pode indicar um comprometimento.
18. Habilitar a Auditoria do Sistema com `auditd`
O subsistema de auditoria do Linux (auditd) é extremamente poderoso. Configure regras em /etc/audit/rules.d/ para monitorar eventos críticos, como acesso a arquivos sensíveis (/etc/passwd, /etc/shadow), uso de chamadas de sistema perigosas e falhas de login.
19. Monitorar Ativamente Processos e Conexões
Familiarize-se com os processos normais do seu sistema usando ferramentas como top, htop e ps. Investigue qualquer processo desconhecido ou com alto consumo de recursos. Use netstat ou ss para monitorar conexões de rede ativas e identificar comunicações não autorizadas.
VI. Segurança do Sistema de Arquivos e Permissões
Permissões inadequadas no sistema de arquivos são uma porta de entrada comum para o escalonamento de privilégios e a movimentação lateral de um invasor.
20. Aplicar Permissões de Arquivo Restritivas
Garanta que arquivos e diretórios críticos tenham as permissões mais restritivas possíveis. Arquivos sensíveis como /etc/shadow devem ter permissão 600 (leitura e escrita apenas para o proprietário, root). Use o comando find para localizar e corrigir permissões excessivas.
21. Definir uma `umask` Padrão Segura
A umask define as permissões padrão para novos arquivos e diretórios. Configure uma umask restritiva, como 027, no arquivo /etc/profile ou /etc/login.defs. Isso fará com que novos arquivos sejam criados sem permissões para usuários de “outros” grupos, reduzindo a exposição acidental de informações.
22. Encontrar Arquivos com Permissões Inseguras
Use o comando find para procurar proativamente por configurações de permissão perigosas. Por exemplo, procure por arquivos “world-writable” (find / -type f -perm -0002) ou arquivos com SUID/SGID (find / -perm /6000) e avalie se essas permissões são realmente necessárias.
23. Implementar um Sistema de Controle de Acesso Mandatório (MAC)
Para ambientes de alta segurança, vá além do controle de acesso discricionário (DAC) padrão do Linux e implemente um sistema de Controle de Acesso Mandatório (MAC) como SELinux (Security-Enhanced Linux) ou AppArmor. Esses sistemas confinam cada processo a um conjunto estrito de ações permitidas, limitando drasticamente o dano que um processo comprometido pode causar.
VII. Segurança Física e de Inicialização
A segurança de um sistema pode ser contornada se um atacante tiver acesso físico ou puder manipular o processo de inicialização.
24. Proteger o Bootloader (GRUB)
Defina uma senha para o bootloader GRUB. Isso impede que um usuário com acesso ao console físico entre no modo de usuário único (single-user mode) para redefinir a senha de root ou alterar os parâmetros de inicialização do kernel, contornando outras medidas de segurança.
25. Desabilitar Dispositivos e Módulos de Kernel Desnecessários
Reduza a superfície de ataque físico e lógico desabilitando o carregamento automático de módulos de kernel para dispositivos não utilizados, como FireWire, Thunderbolt e USB (em servidores que não necessitam deles). Isso pode ser feito criando arquivos de configuração em /etc/modprobe.d/ para colocar na lista negra (blacklist) os módulos indesejados.
Sou um profissional na área de Tecnologia da informação, especializado em monitoramento de ambientes, Sysadmin e na cultura DevOps. Possuo certificações de Segurança, AWS e Zabbix.




