Lynis ist ein umfassendes Security-Auditing-Tool für Unix-basierte Systeme. Es prüft Hunderte von Sicherheitsaspekten und gibt konkrete Hardening-Empfehlungen.
Was prüft Lynis?
Kategorien
- Boot und Services
- Kernel-Sicherheit
- Speicher und Prozesse
- Benutzer und Gruppen
- Shells und Login
- Dateisystem
- USB-Geräte
- Netzwerk
- Firewalls
- SSH
- SNMP
- Datenbanken
- LDAP
- PHP
- Webserver
- Mail-Server
- Logging
- Cron
- Kryptographie
- Virtualisierung
- Container
Hardening-Index
0-49: Kritisch
50-69: Verbesserungsbedürftig
70-84: Gut
85-100: Ausgezeichnet
Installation
Debian/Ubuntu
apt install lynis
CentOS/RHEL
dnf install epel-release
dnf install lynis
Aktuellste Version (Git)
cd /opt
git clone https://github.com/CISOfy/lynis
cd lynis
./lynis audit system
Version prüfen
lynis --version
lynis update info
Grundlegende Nutzung
System-Audit
lynis audit system
Schneller Scan
lynis audit system --quick
Ohne Interaktion
lynis audit system --no-colors --quiet
Mit Cronjob-Modus
lynis audit system --cronjob
Ausgabe verstehen
Farbcodierung
| Farbe | Bedeutung |
|---|
| Grün | OK |
| Gelb | Empfehlung |
| Orange | Warnung |
| Rot | Kritisch |
Ergebnis-Typen
[OK] - Test bestanden
[WARNING] - Sicherheitsproblem
[SUGGESTION]- Verbesserungsvorschlag
[SKIPPED] - Test übersprungen
[FOUND] - Element gefunden
[NOT FOUND] - Element nicht gefunden
Hardening-Index
================================================================================
Lynis security scan details:
Hardening index : 67 [############# ]
Tests performed : 256
Plugins enabled : 0
================================================================================
Reports
Report-Datei
# Speicherort
/var/log/lynis.log
/var/log/lynis-report.dat
HTML-Report generieren
# Mit lynis-reporter (Python)
pip install lynis-reporter
lynis-reporter /var/log/lynis-report.dat -o report.html
JSON-Output
lynis audit system --report-file /tmp/lynis-report.dat
cat /var/log/lynis-report.dat | grep "hardening_index"
Report auswerten
# Warnungen extrahieren
grep "warning\[\]" /var/log/lynis-report.dat
# Empfehlungen extrahieren
grep "suggestion\[\]" /var/log/lynis-report.dat
Profile
Standard-Profile
# Profile anzeigen
lynis show profiles
# Mit Profil scannen
lynis audit system --profile /etc/lynis/default.prf
Eigenes Profil
# /etc/lynis/custom.prf
# Generelle Einstellungen
config:quick_mode:yes
config:show_only_warnings:yes
# Tests überspringen
skip-test:FILE-6354
skip-test:KRNL-5677
# Plugins
plugin:enabled:yes
Tests überspringen
# In Profil-Datei
skip-test:SSH-7408
skip-test:NETW-2705
# Oder per Kommandozeile
lynis audit system --skip-test SSH-7408 --skip-test NETW-2705
Automatisierung
Cron-Job
#!/bin/bash
# /usr/local/bin/lynis-audit.sh
MAILTO=admin@example.de
REPORT_DIR=/var/log/lynis
DATE=$(date +%Y-%m-%d)
# Verzeichnis erstellen
mkdir -p $REPORT_DIR
# Audit durchführen
lynis audit system --cronjob --report-file $REPORT_DIR/lynis-$DATE.dat > $REPORT_DIR/lynis-$DATE.log 2>&1
# Hardening-Index extrahieren
INDEX=$(grep "hardening_index" $REPORT_DIR/lynis-$DATE.dat | cut -d= -f2)
# Bei niedrigem Index warnen
if [ "$INDEX" -lt 70 ]; then
echo "Hardening Index: $INDEX" | mail -s "[Lynis] Low Security Score on $(hostname)" $MAILTO
fi
Systemd-Timer
# /etc/systemd/system/lynis-audit.service
[Unit]
Description=Lynis Security Audit
[Service]
Type=oneshot
ExecStart=/usr/local/bin/lynis-audit.sh
# /etc/systemd/system/lynis-audit.timer
[Unit]
Description=Weekly Lynis Audit
[Timer]
OnCalendar=Sun 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
Wichtige Prüfungen
SSH-Hardening
SSH-7408: SSH root login
SSH-7412: SSH protocol version
SSH-7416: SSH password authentication
SSH-7440: SSH AllowUsers/AllowGroups
Kernel-Sicherheit
KRNL-5677: kernel hardening sysctl
KRNL-5820: exec-shield
KRNL-5830: ASLR
KRNL-6000: Kernel modules
Dateisystem
FILE-6310: /tmp mounted separately
FILE-6330: /tmp mount options (noexec,nosuid)
FILE-6354: Sticky bit on world-writable dirs
FILE-6374: umask in /etc/profile
Firewalls
FIRE-4512: iptables installed
FIRE-4513: nftables installed
FIRE-4590: firewall enabled
Hardening umsetzen
SSH-Konfiguration
# /etc/ssh/sshd_config
# SSH-7408: Root-Login deaktivieren
PermitRootLogin no
# SSH-7416: Passwort-Auth deaktivieren
PasswordAuthentication no
# SSH-7440: Benutzer einschränken
AllowUsers admin deploy
# Protokoll und Cipher
Protocol 2
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
Kernel-Hardening
# /etc/sysctl.d/99-hardening.conf
# ASLR aktivieren
kernel.randomize_va_space = 2
# Exec-Shield
kernel.exec-shield = 1
# Core-Dumps deaktivieren
fs.suid_dumpable = 0
# SYN-Flood-Schutz
net.ipv4.tcp_syncookies = 1
# Source-Routing deaktivieren
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# ICMP-Redirects ignorieren
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# IP-Spoofing-Schutz
net.ipv4.conf.all.rp_filter = 1
sysctl --system
Dateisystem-Sicherheit
# /etc/fstab
# /tmp mit noexec,nosuid
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0
# Remount
mount -o remount /tmp
Berechtigungen
# Sticky-Bit auf World-Writable
find / -type d -perm -0002 -exec chmod +t {} \;
# Umask verschärfen
echo "umask 027" >> /etc/profile
Compliance-Checks
CIS-Benchmark
# Mit CIS-Profil
lynis audit system --profile /etc/lynis/cis.prf
PCI-DSS
lynis audit system --pentest
Audit-Kategorien
# Nur bestimmte Kategorien
lynis audit system --tests-from-category "firewalls ssh"
# Kategorien anzeigen
lynis show categories
Vergleich über Zeit
Baseline erstellen
lynis audit system --cronjob
cp /var/log/lynis-report.dat /var/log/lynis-baseline.dat
Vergleichen
# Hardening-Index vergleichen
BASELINE=$(grep hardening_index /var/log/lynis-baseline.dat | cut -d= -f2)
CURRENT=$(grep hardening_index /var/log/lynis-report.dat | cut -d= -f2)
echo "Baseline: $BASELINE, Current: $CURRENT"
Monitoring-Integration
Prometheus-Metriken
#!/bin/bash
# /usr/local/bin/lynis-metrics.sh
PROM_FILE=/var/lib/prometheus/lynis.prom
# Audit durchführen
lynis audit system --cronjob > /dev/null 2>&1
# Metriken extrahieren
INDEX=$(grep "hardening_index" /var/log/lynis-report.dat | cut -d= -f2)
WARNINGS=$(grep -c "warning\[\]" /var/log/lynis-report.dat)
SUGGESTIONS=$(grep -c "suggestion\[\]" /var/log/lynis-report.dat)
cat > $PROM_FILE << EOF
# HELP lynis_hardening_index Lynis hardening index
# TYPE lynis_hardening_index gauge
lynis_hardening_index $INDEX
# HELP lynis_warnings Number of warnings
# TYPE lynis_warnings gauge
lynis_warnings $WARNINGS
# HELP lynis_suggestions Number of suggestions
# TYPE lynis_suggestions gauge
lynis_suggestions $SUGGESTIONS
# HELP lynis_last_audit_timestamp Last audit timestamp
# TYPE lynis_last_audit_timestamp gauge
lynis_last_audit_timestamp $(date +%s)
EOF
Nagios/Icinga
#!/bin/bash
# /usr/lib/nagios/plugins/check_lynis
INDEX=$(grep "hardening_index" /var/log/lynis-report.dat 2>/dev/null | cut -d= -f2)
if [ -z "$INDEX" ]; then
echo "UNKNOWN - Could not read lynis report"
exit 3
elif [ "$INDEX" -lt 50 ]; then
echo "CRITICAL - Hardening index: $INDEX"
exit 2
elif [ "$INDEX" -lt 70 ]; then
echo "WARNING - Hardening index: $INDEX"
exit 1
else
echo "OK - Hardening index: $INDEX"
exit 0
fi
Zusammenfassung
| Befehl | Funktion |
|---|
| lynis audit system | System-Audit |
| lynis show commands | Verfügbare Befehle |
| lynis show profiles | Profile anzeigen |
| lynis show categories | Kategorien anzeigen |
| lynis update info | Update-Status |
| Option | Wirkung |
|---|
| --quick | Schneller Scan |
| --cronjob | Für Automatisierung |
| --pentest | Pentest-Modus |
| --skip-test | Test überspringen |
| Datei | Funktion |
|---|
| /var/log/lynis.log | Scan-Log |
| /var/log/lynis-report.dat | Report-Daten |
| /etc/lynis/default.prf | Standard-Profil |
Fazit
Lynis ist das umfassendste Open-Source-Tool für Linux-Security-Audits. Der Hardening-Index gibt einen schnellen Überblick über den Sicherheitszustand. Die konkreten Empfehlungen ermöglichen systematisches Hardening. Regelmäßige Audits helfen, den Sicherheitsstatus über Zeit zu verfolgen. Für Compliance-Anforderungen wie CIS oder PCI-DSS ist Lynis ein wertvolles Werkzeug.