Segurança

Hardening de servidores Linux

Passo a passo para reduzir a superfície de ataque em servidores Linux de produção com configurações práticas.

Por WSUL Tecnologia — 2 de abril de 2025  ·  10 min de leitura

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.

Antes de começar

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.

Sua infraestrutura tem esses riscos?

Solicite um diagnóstico gratuito e descubra em quais pontos seu ambiente pode ser melhorado.