Bash Scripts para Automação do Hardening de Segurança no Linux

A segurança de servidores Linux é um aspecto essencial para qualquer equipe de DevOps. O hardening consiste em uma série de práticas que reduzem vulnerabilidades e minimizam a superfície de ataque, tornando os sistemas mais resistentes contra invasões. Uma maneira eficaz de garantir um ambiente seguro é através da automação dessas práticas com scripts Bash.

A seguir, exploramos dez medidas de hardening para servidores Linux, apresentando scripts Bash que ajudam a aplicar essas configurações automaticamente. Desde a restrição de permissões até a configuração de firewall, esses procedimentos são essenciais para qualquer infraestrutura segura.

1. Garantindo Permissões Adequadas para Arquivos Críticos

Arquivos críticos, como /etc/passwd e /etc/shadow, armazenam informações essenciais do sistema e senhas de usuários. Garantir que apenas o usuário root tenha permissões de escrita nesses arquivos reduz riscos de adulteração e ataques internos.

Script:

#!/bin/bash
# Define permissões e proprietários corretos para arquivos críticos
sudo chown root:root /etc/passwd
sudo chmod 644 /etc/passwd
sudo chown root:root /etc/shadow
sudo chmod 600 /etc/shadow
# Verifica permissões aplicadas
ls -l /etc/passwd /etc/shadow

Explicação:

  • chown root:root garante que os arquivos sejam de propriedade do root.
  • chmod 644 permite que todos leiam /etc/passwd, mas apenas root possa modificá-lo.
  • chmod 600 restringe /etc/shadow apenas ao root.

2. Detectando e Removendo Arquivos SUID/SGID Suspeitos

Os arquivos com SUID e SGID podem permitir que usuários comuns executem processos com privilégios elevados. Identificar e remover arquivos desnecessários com essas permissões reduz riscos de exploração.

Script:

#!/bin/bash
# Lista arquivos com SUID e SGID
echo "Buscando arquivos com SUID e SGID..."
find / -type f -executable -perm /4000 -o -perm /2000

# (Opcional) Remove os arquivos inseguros
# find / -type f -executable -perm /4000 -o -perm /2000 -exec rm -f {} \;

Explicação:

  • find busca arquivos com bit SUID (/4000) ou SGID (/2000).
  • Se necessário, a linha comentada pode ser ativada para remover arquivos suspeitos.

3. Bloqueando Contas Após Múltiplas Tentativas de Login

Impedir força bruta contra contas de usuários é essencial. Podemos configurar o pam_tally2 para bloquear usuários após um número excessivo de tentativas falhas.

Script:

#!/bin/bash
# Instalação do módulo necessário
sudo apt-get install libpam-modules -y
# Configuração do bloqueio após 5 tentativas
echo "auth required pam_tally2.so onerr=fail deny=5" | sudo tee -a /etc/pam.d/common-auth
# Reseta contadores de falhas
sudo pam_tally2 --user * --reset

Explicação:

  • O pam_tally2.so monitora falhas de login e bloqueia usuários após 5 tentativas.
  • O comando pam_tally2 --reset pode ser usado para liberar contas bloqueadas.

4. Configurando Rotação de Logs

A acumulação de logs pode consumir espaço e expor informações sensíveis. Logrotate permite gerenciar logs automaticamente, removendo arquivos antigos e compactando logs antigos.

Script:

#!/bin/bash
# Instala logrotate
sudo apt-get install logrotate -y
# Cria uma configuração personalizada para rotação de logs
echo "/var/log/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root root
}" | sudo tee /etc/logrotate.d/custom_logs
# Testa a configuração
sudo logrotate --debug /etc/logrotate.conf

5. Configurando um Firewall com UFW

Controlar o tráfego de rede é fundamental para impedir acessos não autorizados. O UFW (Uncomplicated Firewall) simplifica essa tarefa.

Script:

#!/bin/bash
# Ativa o UFW
sudo ufw enable
# Permite tráfego apenas em portas essenciais
sudo ufw allow 22  # SSH
sudo ufw allow 80  # HTTP
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Exibe status do firewall
sudo ufw status

6. Protegendo Permissões de Arquivos Sensíveis

Definir permissões rigorosas para arquivos do sistema previne acessos não autorizados.

Script:

#!/bin/bash
# Define permissões corretas
sudo chmod 644 /etc/passwd
sudo chmod 000 /etc/shadow

7. Bloqueando Acesso Root via SSH

Permitir login direto de root no SSH expõe o servidor a ataques. O ideal é desativar esse acesso.

Script:

#!/bin/bash
# Edita configuração do SSH para negar login root
sudo sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
# Reinicia o SSH
sudo systemctl restart sshd

8. Aplicando Políticas de Senha Segura

Senhas fracas são uma grande vulnerabilidade. Podemos aplicar políticas mais restritivas no sistema.

Script:

#!/bin/bash
# Instala ferramenta para reforçar políticas de senha
sudo apt-get install libpam-pwquality -y
# Define requisitos mínimos de senha
sudo sed -i 's/# minlen = 8/minlen = 12/' /etc/security/pwquality.conf
sudo sed -i 's/# minclass = 1/minclass = 4/' /etc/security/pwquality.conf
# Aplica a política no PAM
echo "password requisite pam_pwquality.so retry=3" | sudo tee -a /etc/pam.d/common-password

9. Desativando Serviços Desnecessários

Serviços não utilizados podem ser explorados por atacantes. Desativar esses serviços reduz riscos.

Script:

#!/bin/bash
# Lista serviços ativos
echo "Listando serviços ativos:"
sudo systemctl list-units --type=service --state=active
# Desativa Apache e MySQL como exemplo
echo "Desativando serviços desnecessários..."
sudo systemctl stop apache2
sudo systemctl disable apache2
sudo systemctl stop mysql
sudo systemctl disable mysql

10. Habilitando Atualizações Automáticas

Manter o sistema atualizado fecha vulnerabilidades conhecidas.

Script:

#!/bin/bash
# Atualiza pacotes e instala updates de segurança
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install unattended-upgrades -y
# Ativa atualizações automáticas
sudo dpkg-reconfigure --priority=low unattended-upgrades

Automatizar o hardening de servidores Linux com scripts Bash permite fortalecer a segurança de forma eficaz. Essas medidas reduzem riscos e garantem que sua infraestrutura esteja protegida contra ameaças cibernéticas.