Linux Hardening: 10 Configurações de Segurança para Servidor em Produção
Um servidor Linux recém-instalado com root SSH habilitado e sem firewall recebe tentativas de login por força bruta em menos de 5 minutos após ganhar IP público. Este guia cobre as configurações mínimas que todo servidor em produção deve ter.
1. Criar Usuário Não-Root e Configurar sudo
# Criar usuário administrador
sudo adduser deploy
# Adicionar ao grupo sudo (Debian/Ubuntu)
sudo usermod -aG sudo deploy
# Em vez de acesso sudo irrestrito, conceder apenas o necessário
# Editar com visudo (valida sintaxe antes de salvar)
sudo visudo
# Adicionar no final do arquivo /etc/sudoers:
# deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt
2. Autenticação SSH com Chaves (Desativar Senha)
# Na sua máquina local, gerar par de chaves (se não tiver)
ssh-keygen -t ed25519 -C "deploy@meuservidor"
# Copiar chave pública para o servidor
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@SEU_IP
# Testar login com chave antes de desativar senha!
ssh -i ~/.ssh/id_ed25519 deploy@SEU_IP
# No servidor: editar /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
# Configurações de segurança SSH
Port 2222 # mudar a porta padrão (reduz bots)
PermitRootLogin no # nunca root direto
PasswordAuthentication no # somente chaves
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitEmptyPasswords no
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
AllowUsers deploy # whitelist de usuários
sudo sshd -t # validar config antes de recarregar
sudo systemctl reload sshd
3. Firewall com UFW
sudo apt install ufw -y
# Política padrão: bloquear tudo que entra, liberar tudo que sai
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Liberar apenas o necessário
sudo ufw allow 2222/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# Ativar (confirma com y)
sudo ufw enable
sudo ufw status verbose
4. Fail2ban: Bloqueio Automático por Força Bruta
sudo apt install fail2ban -y
# Criar configuração local (não edite .conf diretamente — será sobrescrita em upgrades)
sudo tee /etc/fail2ban/jail.local <<'EOF'
[DEFAULT]
bantime = 3600 # banir por 1 hora
findtime = 600 # janela de 10 minutos
maxretry = 5 # máximo de tentativas
[sshd]
enabled = true
port = 2222 # mesma porta do seu sshd_config
logpath = %(sshd_log)s
backend = %(sshd_backend)s
EOF
sudo systemctl enable --now fail2ban
# Ver IPs banidos
sudo fail2ban-client status sshd
5. Atualizações Automáticas de Segurança
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades
# Verificar configuração
cat /etc/apt/apt.conf.d/20auto-upgrades
# Deve conter:
# APT::Periodic::Update-Package-Lists "1";
# APT::Periodic::Unattended-Upgrade "1";
6. Desativar Serviços Desnecessários
# Ver serviços ativos
systemctl list-units --type=service --state=active
# Exemplos de serviços para desativar em servidor headless
sudo systemctl disable --now avahi-daemon # descoberta de rede local
sudo systemctl disable --now cups # impressão
sudo systemctl disable --now bluetooth # bluetooth
# Ver portas abertas
ss -tlnp
7. Configurar sysctl para Hardening de Rede
sudo tee /etc/sysctl.d/99-hardening.conf <<'EOF'
# Desativar redirecionamento de pacotes IP (não é roteador)
net.ipv4.ip_forward = 0
# Proteção contra SYN flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
# Ignorar pings de broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Proteção contra IP spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Não aceitar source routing
net.ipv4.conf.all.accept_source_route = 0
# Desativar magic sysrq (acesso de baixo nível)
kernel.sysrq = 0
EOF
sudo sysctl --system
8. Monitorar Logins e Atividade com auditd
sudo apt install auditd -y
sudo systemctl enable --now auditd
# Regras básicas de auditoria
sudo tee /etc/audit/rules.d/hardening.rules <<'EOF'
# Monitorar logins
-w /var/log/auth.log -p wa -k auth
# Monitorar mudanças em arquivos críticos
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k privilege_escalation
-w /etc/ssh/sshd_config -p wa -k sshd
# Monitorar execução de comandos privilegiados
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands
EOF
sudo augenrules --load
# Consultar eventos
sudo ausearch -k sshd
sudo ausearch -k privilege_escalation
9. Permissões de Arquivos Críticos
# Verificar arquivos com SUID/SGID (revisar periodicamente)
find / -perm /4000 -o -perm /2000 2>/dev/null | grep -v proc
# Proteger arquivos de senha
sudo chmod 640 /etc/shadow
sudo chmod 644 /etc/passwd
# Remover SUID de binários não essenciais (com cuidado)
# sudo chmod u-s /usr/bin/at # se não usar at jobs
# Arquivos sem dono são risco — encontrar e corrigir
sudo find / -nouser -o -nogroup 2>/dev/null | grep -v proc
10. Checklist Rápido Antes de Ir para Produção
- ✅ Usuário não-root criado e testado
- ✅ SSH na porta alternativa, root desabilitado, senha desabilitada
- ✅ Login por chave SSH testado (antes de fechar a sessão atual!)
- ✅ UFW ativo — apenas portas necessárias abertas
- ✅ Fail2ban configurado e ativo
- ✅ Atualizações automáticas de segurança habilitadas
- ✅ Serviços desnecessários desativados
- ✅ sysctl de rede aplicado
- ✅ auditd rodando com regras básicas
- ✅ Backup testado e restauração verificada
Hardening e a Certificação Linux
Segurança de servidores Linux é cobrada no LPIC-2 (tópico 212) e no CompTIA Linux+ (domínio Security). Mas mais do que passar na prova, aplicar hardening em ambientes reais é o que diferencia um sysadmin que "faz funcionar" de um que "faz funcionar de forma segura" — e é o que as vagas de SRE e DevOps exigem.