Lynis: auditoria de segurança e hardening do VPS
Lynis é um scanner de segurança open-source que avalia centenas de controles de segurança no seu sistema Linux — configurações do kernel, permissões de arquivos, serviços desnecessários, configurações de rede e muito mais. Gera um relatório com score e recomendações priorizadas, tornando o hardening sistemático em vez de ad-hoc.
Instalação e primeiro audit
Instalar Lynis e executar auditoria completa do sistema:
# Instalar Lynis (repositório oficial para versão mais recente):
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C80E383C3DE9F082
echo "deb https://packages.cisofy.com/community/lynis/deb/ stable main" | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list
sudo apt update && sudo apt install lynis
# Ou instalar versão do Ubuntu (pode ser mais antiga):
sudo apt install lynis
# Executar auditoria completa do sistema:
sudo lynis audit system
# Modo não-interativo (para automação):
sudo lynis audit system --quick
# Auditoria com perfil customizado:
sudo lynis audit system --profile /etc/lynis/custom.prf
# O relatório é salvo em:
# /var/log/lynis.log → log detalhado de cada verificação
# /var/log/lynis-report.dat → dados do relatório em formato de chave=valorInterpretar o relatório do Lynis
Entender o score e as recomendações:
# Ao final do scan, o Lynis mostra:
# Hardening index: 67 [############# ]
# Tests performed: 248
# Plugins enabled: 1
# Categorias de resultado:
# [OK] → verificação passou
# [WARNING] → problema que precisa de atenção
# [SUGGEST] → melhoria recomendada mas não crítica
# Extrair warnings do log:
sudo grep "Warning" /var/log/lynis.log | head -30
# Extrair sugestões de hardening:
sudo grep "[suggestion]" /var/log/lynis-report.dat
# Extrair dados do relatório para análise:
sudo grep "hardening_index" /var/log/lynis-report.dat
# Ver o que foi verificado por categoria:
sudo grep "^[" /var/log/lynis.log | grep -c "OK" # quantos passou
sudo grep "^[" /var/log/lynis.log | grep -c "WARNING" # quantos falhou
# Warnings típicos e o que significam:
# "SSH: PermitRootLogin is set to yes" → desabilitar root login
# "No firewall active" → ativar UFW
# "Found some information disclosure in SMTP banner" → ocultar versão do mail server
# "PHP exposing version info" → php.ini: expose_php = OffImplementar as recomendações do Lynis
Correções para os warnings mais comuns:
# Warnings comuns e como corrigir:
# 1. Parâmetros de kernel (sysctl):
sudo tee /etc/sysctl.d/99-hardening.conf << 'EOF'
# Proteção contra ataques de rede:
net.ipv4.tcp_syncookies = 1 # proteção SYN flood
net.ipv4.conf.all.rp_filter = 1 # filtro de pacotes spoofed
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0 # não aceitar redirects ICMP
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1 # ignorar broadcast ping
# Proteção de memória:
kernel.randomize_va_space = 2 # ASLR habilitado
kernel.dmesg_restrict = 1 # restringir dmesg a root
kernel.kptr_restrict = 2 # ocultar ponteiros do kernel
# Proteção IPv6:
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
EOF
sudo sysctl --system
# 2. Desabilitar serviços desnecessários:
sudo systemctl disable avahi-daemon # mDNS — desnecessário em VPS
sudo systemctl disable cups # sistema de impressão
sudo systemctl disable bluetooth # Bluetooth
sudo systemctl stop avahi-daemon cups bluetooth 2>/dev/null
# 3. Configurar umask mais restritivo:
echo "umask 027" | sudo tee -a /etc/profile # 750 por padrão (antes era 022)
# 4. Restringir compiladores (evitar compilação após comprometimento):
sudo chmod o-rx /usr/bin/gcc /usr/bin/cc /usr/bin/make 2>/dev/null || truePerfil customizado do Lynis
Criar perfil para ignorar checks irrelevantes ao seu ambiente:
# /etc/lynis/custom.prf — customizar verificações:
sudo tee /etc/lynis/custom.prf << 'EOF'
# Ignorar verificações não aplicáveis ao ambiente:
# VPS não tem impressora — desabilitar check de CUPS:
skip-test=PRNT-2307
# Ambiente de containers — pular alguns checks de kernel:
skip-test=KRNL-5820
# Banco de dados não está neste servidor — pular checks de MySQL:
skip-test=DBS-1816
skip-test=DBS-1818
# Ajustar threshold de score:
minimum-package-manager-answer=5
# Definir perfil de compliance:
# compliance=hipaa # ou: pci-dss, iso27001
# Notificação por email ao encontrar warnings:
# log-tests-with-wrong-phase=yes
EOF
# Executar com o perfil customizado:
sudo lynis audit system --profile /etc/lynis/custom.prf --quick
# Comparar score ao longo do tempo:
# Armazenar score diário:
sudo grep "hardening_index" /var/log/lynis-report.dat >> /var/log/lynis-scores.log
echo "$(date '+%Y-%m-%d') $(sudo grep hardening_index /var/log/lynis-report.dat | cut -d= -f2)" >> /var/log/lynis-scores.logIntegrar Lynis em pipeline CI/CD
Executar auditoria de segurança automaticamente em servidor de staging:
# .github/workflows/security-audit.yml:
name: Security Audit
on:
schedule:
- cron: '0 2 * * 1' # toda segunda-feira às 2h
workflow_dispatch:
jobs:
lynis:
runs-on: ubuntu-latest
steps:
- name: Install Lynis
run: sudo apt-get install -y lynis
- name: Run Lynis audit
run: |
sudo lynis audit system --quick --no-colors 2>&1 | tee lynis-output.txt
SCORE=$(grep "Hardening index" lynis-output.txt | grep -oP 'd+(?= [)')
echo "LYNIS_SCORE=$SCORE" >> $GITHUB_ENV
- name: Check minimum score
run: |
if [ "$LYNIS_SCORE" -lt 70 ]; then
echo "❌ Score de hardening ($LYNIS_SCORE) abaixo do mínimo (70)"
exit 1
fi
echo "✅ Score de hardening: $LYNIS_SCORE"
- name: Upload report
uses: actions/upload-artifact@v4
with:
name: lynis-report
path: lynis-output.txt
# Script para execução no VPS de staging:
sudo lynis audit system --quick 2>/dev/null && sudo grep "hardening_index" /var/log/lynis-report.dat$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS Linux em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.