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.
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.