Suricata IDS IPS Einrichten Anleitung
Suricata IDS/IPS auf Ubuntu einrichten – Anleitung
Suricata ist ein modernes, hochperformantes Open-Source IDS/IPS-System. Es analysiert Netzverkehr in Echtzeit, erkennt verdächtige Aktivitäten und kann Angriffe blockieren. Diese Anleitung zeigt die komplette Installation auf Ubuntu/Debian.
IDS vs IPS – Der Unterschied
| Aspekt | IDS (Intrusion Detection System) | IPS (Intrusion Prevention System) |
|---|---|---|
| Funktion | Erkennt nur verdächtige Aktivitäten | Erkennt UND blockiert Angriffe |
| Modus | Monitoring/Logging (passiv) | Aktiv blockierend |
| Performance-Impact | Niedrig (passiv) | Höher (aktives Blockieren) |
| False Positives | Weniger kritisch (nur Alerts) | Kritisch (könnte legitimen Traffic blockieren) |
| Einsatz | Netzwerk-Monitoring, Logging | Proaktive Verteidigung, Firewall-Ergänzung |
Schritt 1: Installation auf Ubuntu 22.04/Debian
System-Voraussetzungen:
- Ubuntu 22.04 LTS oder Debian 11+
- Mindestens 2 CPU Kerne
- Mindestens 2GB RAM (4GB+ empfohlen)
- Root oder sudo-Berechtigung
Installation:
#!/bin/bash # Suricata Installation auf Ubuntu 22.04 # 1. Paketquellen aktualisieren sudo apt-get update sudo apt-get upgrade -y # 2. Abhängigkeiten installieren sudo apt-get install -y build-essential pkg-config git \ libpcre3 libpcre3-dev libnet1-dev \ libnetfilter-queue-dev libnetfilter-queue1 \ libnfnetlink-dev libluajit-5.1-dev libhtp-dev # 3. Suricata vom Official Ubuntu Repository installieren sudo apt-get install -y suricata suricata-update # 4. Installation überprüfen suricata --version sudo suricata --version
Schritt 2: Netzwerk-Interface konfigurieren
Das Monitoring-Interface bestimmen:
#!/bin/bash # Verfügbare Netzwerk-Interfaces anschauen ip link show # Beispiel Output zeigt: eth0 (unser Monitoring-Interface) # Interface in Promiscuous Mode setzen (um ALLE Pakete zu sehen) sudo ip link set eth0 promisc on # Status überprüfen ip link show eth0 | grep PROMISC
Schritt 3: Suricata Haupt-Konfiguration
Hauptkonfiguration editieren:
sudo nano /etc/suricata/suricata.yaml
# Wichtige Konfigurationsabschnitte:
# 1. HOME_NET definieren (interne Netzwerke)
HOME_NET: "[192.168.0.0/16,10.0.0.0/8]"
# 2. EXTERNAL_NET definieren (alles andere)
EXTERNAL_NET: "!$HOME_NET"
# 3. Listening Interface
af-packet:
- interface: eth0
cluster-id: 99
cluster-type: cluster_flow
defrag: yes
# 4. Output Konfiguration
outputs:
- eve-log:
enabled: yes
filename: eve.json
types:
- alert
- http
- dns
- tls
- files
- filedata
Schritt 4: Rulesets herunterladen und aktualisieren
ET Open Rules (kostenlos von Proofpoint):
#!/bin/bash # Regeln aktualisieren # 1. Suricata-Update Tool verwenden sudo suricata-update update-sources # 2. ET Open Rules hinzufügen sudo suricata-update enable-source et/open # 3. Rules herunterladen und installieren sudo suricata-update # 4. Status überprüfen sudo suricata-update list-enabled-sources # 5. Regeln in Standard-Verzeichnis ls -la /var/lib/suricata/rules/ # 6. Konfigurationen prüfen sudo suricata -c /etc/suricata/suricata.yaml -T # Output sollte "Configuration provided was successful" zeigen
Schritt 5: Basis-Rule-Syntax verstehen
Suricata Rules Aufbau:
action protocol source_ip source_port direction dest_ip dest_port (content: "pattern"; sid: 1000001;) # Beispiel: HTTP GET Request alert http any any -> any 80 (msg:"HTTP GET detected"; content:"GET"; http_method; flow:established,to_server; classtype:webapplication-activity; sid:1000001;) # Beispiel: Port Scanning Detection alert tcp any any -> $HOME_NET any (msg:"Port Scan Detected"; flags:S,12; threshold:type both,track by_src,count 10,seconds 60; classtype:network-scan; sid:1000002;) # Beispiel: Shellcode Pattern alert tcp any any -> any any (msg:"Possible Shellcode"; content:"|90 90 90|"; classtype:suspicious-shellcode; sid:1000003;) # Wichtige Modifier: # - content: Suchtext oder Byte-Pattern # - msg: Beschreibung des Alerts # - sid: Eindeutige Regel-ID (muss > 1000000 sein) # - rev: Revision Number # - classtype: Klassifikation (suspicious-activity, attempted-admin, etc.) # - priority: 1 (höchst) bis 4 (niedrig) # - flow: Datenfluss-Richtung und Status # - threshold: Häufigkeit/Rate der Alerts
Schritt 6: IPS-Modus mit NFQueue aktivieren
IPS-Betrieb ermöglicht aktives Blockieren von Angriffen. Dies erfordert NFQueue (Netfilter Queue):
#!/bin/bash
# NFQueue Installation und Konfiguration
# 1. NFQueue Tools installieren
sudo apt-get install -y nfqueue-bindings-python3 \
libnetfilter-queue-dev libnetfilter-queue1
# 2. IP Tables Rules konfigurieren (Traffic zu NFQueue leiten)
# Alle TCP/UDP Pakete zum Port 1:16 Queue weiterleiten
sudo iptables -I INPUT -p tcp -j NFQUEUE --queue-num 0
sudo iptables -I FORWARD -p tcp -j NFQUEUE --queue-num 0
sudo iptables -I OUTPUT -p tcp -j NFQUEUE --queue-num 0
# 3. iptables-persistent installieren (um Rules zu speichern)
sudo apt-get install -y iptables-persistent
sudo iptables-save | sudo tee /etc/iptables/rules.v4
# 4. Suricata Config für IPS/NFQueue editieren
sudo nano /etc/suricata/suricata.yaml
# Hinzufügen:
nfq:
- number: 0
mode: repeat
reuseport: false
# 5. Suricata im IPS-Modus starten
sudo systemctl stop suricata
sudo suricata -c /etc/suricata/suricata.yaml -q 0
# 6. Konfiguration prüfen
sudo suricata -c /etc/suricata/suricata.yaml -T
Schritt 7: Tests mit curl durchführen
Suricata mit Test-Traffic verifizieren:
#!/bin/bash # Test-Alerts auslösen # 1. Suricata starten (im IDS-Modus) sudo systemctl start suricata sudo systemctl status suricata # 2. Einfache HTTP Request (sollte Normal sein) curl http://google.com # 3. SQL Injection Test (sollte Alert auslösen) curl "http://testphp.vulnweb.com/artists.php?artist=1 AND 1=1" # 4. Cross-Site Scripting Test curl "http://example.com/search?q=" # 5. Port Scan simulieren (mit nmap - nur auf autorisiertem System!) # sudo nmap -sT 192.168.1.100 # 6. Alerts überprüfen sudo tail -f /var/log/suricata/eve.json | jq . # 7. Spezifische Alert-Typ filtern sudo jq 'select(.event_type=="alert")' /var/log/suricata/eve.json | tail -20
Schritt 8: Alert-Logs anschauen und analysieren
Eve-Log Format (JSON):
#!/bin/bash
# Alerts in verschiedenen Formaten anschauen
# 1. Alle Alerts anzeigen
sudo tail -100 /var/log/suricata/eve.json | jq .
# 2. Nur spezifische Alerts filtern
sudo jq 'select(.alert.action=="alert")' /var/log/suricata/eve.json | jq .alert
# 3. Alerts nach Source-IP gruppieren
sudo jq 'select(.event_type=="alert") | .src_ip' /var/log/suricata/eve.json | sort | uniq -c | sort -rn
# 4. Häufigste Alert-Signaturen
sudo jq 'select(.event_type=="alert") | .alert.signature' /var/log/suricata/eve.json | sort | uniq -c | sort -rn | head -20
# 5. HTTP Requests von verdächtigen IPs
sudo jq 'select(.event_type=="http" and .src_ip=="192.168.1.100")' /var/log/suricata/eve.json
# 6. DNS Queries überwachen
sudo jq 'select(.event_type=="dns")' /var/log/suricata/eve.json | jq '.dns | {query, answers, authority}'
# 7. TLS Certificate Informationen
sudo jq 'select(.event_type=="tls")' /var/log/suricata/eve.json | jq '.tls'
Schritt 9: Syslog Integration einrichten
Suricata Alerts zu Syslog senden für zentrale Überwachung:
#!/bin/bash # Suricata mit Syslog konfigurieren # 1. Syslog-ng oder rsyslog überprüfen sudo systemctl status rsyslog # 2. Suricata für Syslog Output konfigurieren sudo nano /etc/suricata/suricata.yaml # Konfiguration hinzufügen: # outputs: # - syslog: # enabled: yes # facility: LOG_LOCAL0 # level: INFO # 3. Rsyslog für Suricata Logs konfigurieren sudo nano /etc/rsyslog.d/30-suricata.conf # Hinzufügen: # :programname, isequal, "suricata" /var/log/suricata/suricata-syslog.log # & stop # 4. Rsyslog neustarten sudo systemctl restart rsyslog # 5. Logs überprüfen sudo tail -f /var/log/suricata/suricata-syslog.log
Schritt 10: Systemd Service starten und enablen
Suricata automatisch beim Booten starten:
#!/bin/bash # Systemd Service konfigurieren # 1. Systemd Service Datei prüfen sudo systemctl cat suricata # 2. Service starten sudo systemctl start suricata # 3. Status überprüfen sudo systemctl status suricata # 4. Beim Booten automatisch starten sudo systemctl enable suricata # 5. Logs anschauen sudo journalctl -u suricata -f # 6. Service neu starten (nach Konfigurationsänderungen) sudo systemctl restart suricata # 7. Konfiguration validieren vor Restart sudo suricata -c /etc/suricata/suricata.yaml -T
Schritt 11: Performance-Optimierung
Suricata für hohe Durchsatzraten optimieren:
#!/bin/bash # Performance-Tuning für Suricata # 1. CPU Affinity für bessere Performance # In suricata.yaml: # threading: # set-cpu-affinity: yes # cpu-affinity: # - management-cpu-set: # cpu: [ 0 ] # - detect-cpu-set: # cpu: [ 1, 2, 3 ] # - receive-cpu-set: # cpu: [ 0 ] # - decode-cpu-set: # cpu: [ 0 ] # 2. Anzahl der Detect Threads anpassen (für Multi-Core) # 1 Thread pro CPU-Core (minus 1-2 für andere Tasks) # 3. Memory-Einstellungen # memcap: Maximale Speichernutzung für Stream-Tracking # flow: # memcap: 128mb # hash-size: 65536 # 4. Packet Capture Buffer erhöhen # af-packet: # - interface: eth0 # buffer-size: 32768 # 5. Performance testen sudo suricata -c /etc/suricata/suricata.yaml --pcap /path/to/pcap.file # 6. Stats anschauen sudo tail -f /var/log/suricata/stats.log
Häufige Probleme und Lösungen
| Problem | Ursache | Lösung |
|---|---|---|
| Keine Alerts erscheinen | Falsch konfiguriertes Interface oder Regeln laden nicht | Interface mit promisc überprüfen, Regeln validieren mit -T |
| Hohe CPU-Auslastung | Zu viele aktive Regeln oder falsche Threading-Config | CPU-Affinity aktivieren, Ruleset optimieren, nur nötige Regeln |
| Paketverluste in IPS Mode | NFQueue Bottleneck oder zu komplexe Regeln | Queue-Größe erhöhen, zu strenge Regeln deaktivieren |
| Eve-Log wächst zu schnell | Zu viele Events werden geloggt | Event-Logging selektiv konfigurieren, unwichtige Typen ausschalten |
| Service startet nicht | Konfigurationsfehler oder Rechte-Problem | suricata -T ausführen, sudo-Berechtigungen überprüfen |
Monitoring und Alerting
Suricata mit ELK Stack (Elasticsearch, Logstash, Kibana) integrieren:
#!/bin/bash
# Eve-Log zu Elasticsearch senden mit Filebeat
# 1. Filebeat installieren
sudo apt-get install -y filebeat
# 2. Filebeat konfigurieren
sudo nano /etc/filebeat/filebeat.yml
# Konfiguration:
# filebeat.inputs:
# - type: log
# enabled: true
# paths:
# - /var/log/suricata/eve.json
# json.message_key: message
# json.keys_under_root: true
# json.add_error_key: true
# output.elasticsearch:
# hosts: ["localhost:9200"]
# index: "suricata-%{+yyyy.MM.dd}"
# 3. Filebeat starten
sudo systemctl start filebeat
sudo systemctl enable filebeat
# 4. Kibana öffnen und Dashboards erstellen
# http://localhost:5601
Verwandte Artikel
- 📖 Fail2Ban – Brute-Force-Angriffe abwehren
- 📖 UFW Firewall unter Linux einrichten
- 📖 Linux Server absichern – Sicherheits-Hardening
- 🔧 Sichere Server bei Enjyn mieten
- 🔧 Enjyn Crawler – Website auf Sicherheit prüfen