O que é hardening
Hardening é o processo de configurar um servidor para minimizar sua superfície de ataque. Um servidor Linux recém-instalado já vem com muitas configurações seguras por padrão, mas ainda há uma série de ajustes que fazem diferença real em um ambiente de produção.
O princípio fundamental é o least privilege (menor privilégio): cada usuário, serviço e processo deve ter acesso apenas ao que é estritamente necessário para sua função.
Aplique hardening em um ambiente de teste antes de produção. Algumas configurações, se mal aplicadas, podem bloquear seu próprio acesso ao servidor. Tenha sempre um console de acesso alternativo (ex: acesso via painel do provedor cloud) antes de modificar configurações de SSH.
Protegendo o SSH
O SSH é a porta de entrada mais visada em servidores Linux. A configuração correta reduz drasticamente o risco de acesso não autorizado.
# /etc/ssh/sshd_config — configurações recomendadas # Desabilitar login como root PermitRootLogin no # Desabilitar autenticação por senha (apenas chaves) PasswordAuthentication no PubkeyAuthentication yes # Desabilitar métodos inseguros PermitEmptyPasswords no ChallengeResponseAuthentication no UsePAM yes # Restringir a usuários específicos (opcional) AllowUsers deploy admin # Timeout de sessão inativa ClientAliveInterval 300 ClientAliveCountMax 2 # Porta alternativa (dificulta scans automáticos) Port 2222 # Após editar, reiniciar: # systemctl restart sshd
Autenticação por chave SSH
# Gerar par de chaves no cliente ssh-keygen -t ed25519 -C "[email protected]" # Copiar chave pública para o servidor ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor # Verificar permissões no servidor chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
Usuários e permissões
# Listar usuários com shell válido
awk -F: '$7 !~ /nologin|false/ {print $1}' /etc/passwd
# Verificar usuários com UID 0 (root equivalente)
awk -F: '$3 == 0 {print $1}' /etc/passwd
# Bloquear conta de usuário inativo
usermod -L usuario_inativo
usermod -s /usr/sbin/nologin usuario_inativo
# Verificar sudo sem senha (inseguro)
grep -r NOPASSWD /etc/sudoers /etc/sudoers.d/
Boas práticas
- Nunca use o root diretamente — crie um usuário administrativo com sudo
- Remova ou bloqueie contas de usuários que saíram da equipe imediatamente
- Use grupos para gerenciar permissões de acesso a recursos
- Audite permissões SUID/SGID periodicamente:
find / -perm /6000 -type f
Firewall básico
# UFW (Ubuntu) — configuração básica ufw default deny incoming ufw default allow outgoing ufw allow 2222/tcp # SSH (porta customizada) ufw allow 80/tcp # HTTP ufw allow 443/tcp # HTTPS ufw enable # Verificar regras ufw status verbose
fail2ban — proteção contra força bruta
# Instalar e configurar fail2ban apt install fail2ban # /etc/fail2ban/jail.local [DEFAULT] bantime = 3600 findtime = 600 maxretry = 5 backend = systemd [sshd] enabled = true port = 2222 logpath = %(sshd_log)s systemctl enable --now fail2ban
Desabilitar serviços desnecessários
# Listar serviços ativos systemctl list-units --type=service --state=running # Desabilitar serviço desnecessário systemctl disable --now nome-do-servico # Listar portas em escuta ss -tlnp # Verificar o que está abrindo cada porta ss -tlnp | grep LISTEN
Em uma instalação limpa de Ubuntu Server, os únicos serviços que devem estar escutando em portas são os que você instalou intencionalmente. Qualquer porta aberta sem explicação é um sinal de alerta.
Auditoria e logs
# Instalar auditd para auditoria de sistema apt install auditd audispd-plugins systemctl enable --now auditd # Regras básicas de auditoria auditctl -w /etc/passwd -p wa -k passwd_changes auditctl -w /etc/sudoers -p wa -k sudoers_changes auditctl -w /var/log/auth.log -p r -k auth_log_access # Verificar tentativas de login falhas grep "Failed password" /var/log/auth.log | tail -20 # Verificar logins bem-sucedidos last -n 20
Conclusão
Hardening não é uma tarefa única — é um processo contínuo. As configurações acima representam o mínimo recomendado para um servidor Linux de produção. A WSUL aplica hardening em todos os servidores que administra como parte do processo padrão de onboarding, com checklist documentado e revisão periódica.