Erkärungen ystemd-Unit: suricata.service
Version vom 4. August 2026, 12:35 Uhr von Thomas.will (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „=== Systemd-Unit: suricata.service === ;Beschreibung Definiert Suricata als systemd-verwalteten Hintergrunddienst (Inline-IPS via NFQUEUE 0), inklusive Start-…“)
Systemd-Unit: suricata.service
- Beschreibung
Definiert Suricata als systemd-verwalteten Hintergrunddienst (Inline-IPS via NFQUEUE 0), inklusive Start-Reihenfolge, Reload-/Stop-Verhalten und grundlegender Systemhärtung.
[Unit]
Description=Suricata IPS daemon
After=network.target network-online.target
Requires=network-online.target
Documentation=man:suricata(8) man:suricatasc(8)
Documentation=https://suricata-ids.org/docs/
[Service]
Type=forking
PIDFile=/run/suricata.pid
ExecStart=/usr/bin/suricata -D -q 0 -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid
ExecReload=/usr/bin/suricatasc -c reload-rules ; /bin/kill -HUP $MAINPID
ExecStop=/usr/bin/suricatasc -c shutdown
Restart=on-failure
ProtectSystem=full
ProtectHome=true
[Install]
WantedBy=multi-user.target
[Unit]
- Description – Kurzbeschreibung, erscheint u. a. in systemctl status
- After=network.target network-online.target – Suricata soll erst starten, nachdem das Netzwerk grundsätzlich verfügbar ist (reine Reihenfolge, kein hartes Erfordernis)
- Requires=network-online.target – im Gegensatz zu After ist dies eine harte Abhängigkeit: ohne funktionierendes Netzwerk wird der Dienst gar nicht erst gestartet (sinnvoll, da NFQUEUE ohne funktionierende Netzwerk-/Firewall-Konfiguration wirkungslos wäre)
- Documentation – zwei Einträge: Verweis auf die man-Pages sowie die Online-Dokumentation; beide werden bei systemctl status suricata angezeigt
[Service]
- Beschreibung
Steuert, wie systemd den Prozess startet, überwacht und beendet.
- Type=forking – Suricata startet im Vordergrund einen Kindprozess und beendet sich selbst (klassisches Daemon-Verhalten); systemd erwartet daher, dass der eigentliche laufende Prozess über die PIDFile identifiziert wird
- PIDFile=/run/suricata.pid – Pfad, unter dem Suricata seine PID hinterlegt, damit systemd den korrekten (geforkten) Hauptprozess tracken kann
- ExecStart – Startbefehl:
- -D → Daemon-Modus (forken)
- -q 0 → NFQUEUE-Nummer 0 lesen (korrespondiert mit der nftables-Regel queue num 0 aus der vorherigen Frage)
- -c /etc/suricata/suricata.yaml → Pfad zur Hauptkonfiguration
- --pidfile /run/suricata.pid → explizite Angabe des PID-Datei-Pfads
- ExecReload – wird bei systemctl reload suricata ausgeführt:
- suricatasc -c reload-rules → lädt die Regeln über das Unix-Command-Socket neu, ohne den Prozess neu zu starten (Verbindungs-/Sitzungsstatus bleibt erhalten)
- ; kill -HUP $MAINPID → zusätzlich wird ein HUP-Signal an den Hauptprozess gesendet (zwei Reload-Mechanismen kombiniert)
- ExecStop=/usr/bin/suricatasc -c shutdown – sauberes Herunterfahren über das Command-Socket statt eines einfachen SIGTERM, damit Suricata Puffer/Statistiken ordentlich flushen kann
- Restart=on-failure – automatischer Neustart nur bei einem Fehler (Absturz, Exit-Code ≠ 0), nicht bei explizitem systemctl stop
- ProtectSystem=full – systemd-Sandboxing: /usr, /boot und /etc werden read-only in den Dienst-Namespace gemountet (Suricata kann sein System nicht verändern)
- ProtectHome=true – /home, /root und /run/user werden dem Dienst komplett unzugänglich gemacht (nicht nötig für einen Netzwerk-IDS-Prozess, daher sinnvoll gehärtet)
- Hinweis
ProtectSystem und ProtectHome sind einfache, aber wirksame Bausteine zur Angriffsflächenreduktion – falls im Kurs später vertieft auf systemd-Sandboxing eingegangen wird, ließe sich das hier noch erweitern (z. B. NoNewPrivileges=true, PrivateTmp=true, CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW für die minimal nötigen Capabilities statt vollem Root).
[Install]
- WantedBy=multi-user.target – der Dienst wird beim Booten in den Standard-Multi-User-Runlevel (ohne grafische Oberfläche) eingebunden, aktiviert über systemctl enable suricata