
Snort 3 IDS → IPS Labor auf Kali. Benutzerdefinierte Erkennungsregeln + iptables-Durchsetzung gegen ICMP-Aufklärung, Nmap-SYN-Scans, Hydra FTP Brute-Force und vsftpd 2.3.4 Hintertür (CVE-2011-2523).
Eine vollständige Bereitstellung von Snort 3 sowohl als Intrusion Detection System (passives Monitoring) als auch als Intrusion Prevention System (aktive Blockierung über iptables), validiert gegen vier Angriffsvektoren über ein Drei-Maschinen-Virtuelles-Netzwerk auf Kali Linux.
Das Labor beweist den operativen Unterschied zwischen Erkennung und Prävention, indem es eine identische Vier-Vektor-Angriffskette zweimal ausführt – zuerst gegen ein IDS, das protokolliert, aber nicht blockieren kann, dann gegen eine IDS + iptables IPS-Schicht, die Angriffe selektiv verwirft, während legitimer Datenverkehr erhalten bleibt.
| Komponente | Details |
|---|---|
| Analysator / Router | Kali Linux — 3 Adapter: eth0 WAN (192.168.10.143, NAT), eth1 LAN1 (10.10.10.1, Host-only), eth2 LAN2 (192.168.50.1, Host-only) |
| Angreifer | Kali Linux — eth0 auf VMnet9 (10.10.10.10) — Standardgateway 10.10.10.1 |
| Ziel | Metasploitable 2 — eth0 auf VMnet10 (192.168.50.10) — Standardgateway 192.168.50.1 |
| Snort-Version | Snort++ 3.12.1.0-0kali1 (installiert auf Analysator) |
| Angriffswerkzeuge | Nmap 7.99, Hydra v9.6, Metasploit Framework (msfconsole) |
| Virtualisierung | VMware — VMnet9 = 10.10.10.0/24, VMnet10 = 192.168.50.0/24 (beide Host-only) |
Der gesamte Datenverkehr zwischen Angreifer und Metasploitable wird durch den Analysator geleitet, was ihn zum natürlichen Engpass sowohl für die Überwachung als auch für die Durchsetzung macht.
┌─────────────────────────┐
│ Analysator / Router │
│ Kali + Snort 3 │
│ │
Angreifer Kali ──VMnet9──┤ eth1: 10.10.10.1 │
10.10.10.10 │ │
│ eth0: 192.168.10.143 ───┼──> WAN (NAT)
│ │
Metasploitable 2 ─VMnet10┤ eth2: 192.168.50.1 │
192.168.50.10 │ │
└─────────────────────────┘
Ersetzen Sie diese ASCII-Skizze durch
screenshots/01-network-topology.png, sobald die Abbildung vorhanden ist:Topologie
Das Labor wird in zwei Phasen mit einer identischen Vier-Vektor-Angriffskette durchgeführt:
ping zur Host-Erkennungnmap -sS zur Port-Enumeration (1000 Ports)Phase 1 (IDS) führt Snort passiv auf dem Analysator mit fünf benutzerdefinierten Regeln aus – beobachten Sie die Alarme in Echtzeit, bestätigen Sie, dass der Angriff trotzdem erfolgreich ist.
Phase 2 (IPS) kombiniert Snort mit einer iptables-Durchsetzungsschicht mittels präziser Drop-Regeln – bestätigen Sie, dass Angriffe blockiert werden, während ICMP-Ping und legitime FTP-Anmeldung funktionsfähig bleiben.
MASQUERADE + FORWARD-Regeln hinzu, damit der Analysator zwischen Subnetzen und zum WAN routet – siehe scripts/router_config.sh.scripts/ping_check.sh, bevor Sie Snort installieren.Snort wird über den Kali-Paketmanager installiert (sudo apt install snort -y) und in /etc/snort/snort.conf konfiguriert:
HOME_NET = "10.10.10.0/24,192.168.50.0/24"
EXTERNAL_NET = "any"
ips = {
enable_builtin_rules = true,
include = "/etc/snort/rules/local.rules",
variables = default_variables
}
alert_fast = { file = true, packet = false }
HOME_NET deckt beide internen Subnetze ab, sodass Snort den gesamten verkehr zwischen Subnetzen auf dem Analysator als prüfenswert betrachtet. alert_fast erzeugt kompakte einzeilige Alarme (paketweise Protokollierung würde übermäßiges Volumen erzeugen).
Konfigurationsvalidierung:
sudo snort -T -c /etc/snort/snort.conf
# Ergebnis: 652 Regeln geladen (5 benutzerdefinierte Text + 647 integrierte), 0 Warnungen
Fünf Regeln in /etc/snort/rules/local.rules (vollständige Datei in scripts/local.rules):
| SID | Name | Auslöser |
|---|---|---|
| 1000001 | ICMP Ping erkannt | Jeglicher ICMP-Verkehr in beide Richtungen – fängt Aufklärungspings |
| 1000002 | FTP-Verbindungsversuch | Jegliche TCP-Verbindung zu Port 21 – fängt legitimen und Brute-Force-Verkehr |
| 1000003 | Möglicher Nmap SYN-Scan | TCP-Pakete mit nur gesetztem SYN-Flag (flags:S) – Signatur eines halboffenen Scans |
| 1000004 | VSFTPD 2.3.4 Backdoor-Versuch | content:":)" auf FTP-Port 21 – die exakte CVE-2011-2523-Triggerzeichenfolge |
| 1000005 | Möglicher Metasploit-Shellcode | `content:" |
Snort läuft im passiven Modus auf beiden internen Schnittstellen:
sudo snort -c /etc/snort/snort.conf -i eth1 -i eth2 \
-A alert_fast -l /var/log/snort/
# Alarme in einem zweiten Terminal beobachten:
sudo tail -f /var/log/snort/alert_fast.txt
Die Startausgabe bestätigt pcap DAQ configured to passive – Snort sieht jedes Paket, kann aber keines verwerfen oder modifizieren.
Nach Ausführung von scripts/attack_simulator.sh vom Angreifer:
| Angriff | Erkennung | Ergebnis |
|---|---|---|
| ICMP-Aufklärung | ✅ SID 1000001 – bidirektionale Alarme | Ping abgeschlossen |
| Nmap SYN-Scan | ✅ SID 1000003 – tausende Alarme in <1 Sekunde | 23 offene Ports ermittelt |
| Hydra FTP-Brute-Force | ✅ SID 1000002 – wiederholte FTP-Verbindungsalarme | Zugangsdaten msfadmin:msfadmin geknackt |
| vsftpd 2.3.4 Backdoor | ✅ SID 1000004 – :)-Inhaltsübereinstimmung ausgelöst | Root-Meterpreter-Shell erhalten |
Das IDS hat alles erkannt und nichts gestoppt. Dies ist die zentrale Lehre aus Phase 1: Ein funktionierendes IDS ohne Durchsetzung ist ein Alarmsystem, kein Schloss. Wenn ein menschlicher Analyst die Alarme liest, ist der Angreifer bereits Root.
Eine sekundäre Beobachtung: Snorts integrierte Regeln (116:408, 116:414) schlagen bei DHCP-Broadcast-Verkehr an – nicht böswillig, aber in einer Produktionsumgebung bräuchte es Unterdrückungsregeln, um das Alarmprotokoll handhabbar zu halten.
Die IPS-Schicht wird mit scripts/ips_setup.sh bereitgestellt, welche:
-D) für fortlaufende Protokollierung startet| Regel | Wirkung |
|---|---|
ACCEPT icmp | Erlaubt explizit allen ICMP – bewahrt Konnektivitätsprüfungen |
DROP tcp dpt:21 STRING ":)" | Verwirft Pakete, die den vsftpd 2.3.4 Backdoor-Trigger auf Port 21 enthalten |
ACCEPT tcp --syn -m limit --limit 10/s --limit-burst 20 | Erlaubt normale TCP-Handshakes innerhalb der Ratenbegrenzung |
DROP tcp --syn (nach limit) | Verwirft SYN-Fluten, die 10/s überschreiten – besiegt Nmap SYN-Scans |
DROP tcp dpt:21 -m connlimit --connlimit-above 5 --connlimit-mask 32 | Blockiert > 5 gleichzeitige FTP-Verbindungen pro Quelle – besiegt Hydras Parallelität |
ACCEPT eth1→eth0, ACCEPT eth2→eth0 | Normales Egress-Routing |
ACCEPT -m conntrack --ctstate RELATED,ESTABLISHED | Zustandsbehaftet – bewahrt bestehende Sitzungen |
Das gleiche Angriffsskript wurde erneut vom Angreifer ausgeführt:
| Angriff | Ergebnis Phase 2 |
|---|---|
| ICMP-Aufklärung | ✅ Erlaubt (absichtlich) |
| Nmap SYN-Scan | ❌ Blockiert – 1000 gefilterte tcp-Ports (keine Antwort), Scan dauerte 21,71 s statt <1 s |
| Hydra FTP-Brute-Force | ❌ Blockiert – alle Kinder wurden aufgrund zu vieler Verbindungsfehler deaktiviert – 0 gültige Passwörter gefunden |
| vsftpd-Backdoor | ❌ Blockiert – Rex::ConnectionTimeout – Exploit abgeschlossen, aber keine Sitzung erstellt |
Zwei manuelle Überprüfungen bestätigten die selektive Durchsetzung:
ping -c 4 192.168.50.10 → 4 Pakete gesendet, 4 empfangen, 0% Verlustftp 192.168.50.10 mit msfadmin:msfadmin → 220 (vsFTPd 2.3.4) … 230 Login successfulQuantitativer Nachweis aus iptables-Paketzählern während des Laufs: 2051 Pakete akzeptiert, 12 Pakete durch die FTP-Connlimit-Regel verworfen, 808 ICMP-Pakete akzeptiert – selektive Durchsetzung in Zahlen.
Selbst im IPS-Modus löste Snort weiterhin SID 1000002 / 1000003-Alarme bei Paketen aus, die seinen passiven Inspektionspunkt erreichten, bevor iptables nachfolgende Pakete verwarf – das bedeutet, iptables sorgt für Durchsetzung, während Snort für Audit-Protokollierung sorgt, und beide arbeiten zusammen.
| Angriff / Verkehr | Phase 1 (nur IDS) | Phase 2 (IDS + iptables IPS) |
|---|---|---|
| ICMP-Ping | Erkannt ✅ | Erlaubt ✅ (absichtlich) |
| Nmap SYN-Scan | Erkannt – 23 offene Ports gefunden | Blockiert – 1000 gefiltert |
| Hydra FTP-Brute-Force | Erkannt – msfadmin:msfadmin geknackt | Blockiert – 0 Passwörter gefunden |
| vsftpd 2.3.4 Exploit | Erkannt – Root-Meterpreter-Shell | Blockiert – Verbindungszeitüberschreitung |
| Legitime FTP-Anmeldung | n/v | Erhalten (230 Login successful) |
Ja – jede der SIDs 1000001–1000004 feuerte während der Angriffssimulation korrekt:
:)-Inhaltsübereinstimmung erfasste die exakte Exploit-Bytesequenz.Aber Erkennung ≠ Prävention. Der vsftpd-Exploit öffnete eine Root-Meterpreter-Shell, während alle Alarme feuerten. Ein SOC-Analyst, der das IDS in Echtzeit beobachtet, hätte die Kompromittierung gesehen – aber mit dem Angreifer bereits innerhalb von Sekunden als Root reicht allein das Alarmieren nicht. Dies ist der operative Kern, warum IPS existiert.
Die Implementierung erreichte eine vollständige Angriffsminderung ohne beobachtbare Auswirkungen auf legitimen Verkehr. Die Effektivität beruht auf präzisem Regeldesign – jede iptables-Regel zielt auf eine Verhaltenssignatur, nicht auf ein breites Protokoll:
connlimit pro Quelle blockiert die Parallelität von Brute-Force-Werkzeugen, ohne Einzelsitzungs-FTP zu unterbrechen.STRING-Übereinstimmung verwirft die exakte Exploit-Payload, ohne legitimen FTP-Anmeldeverkehr zu filtern.Eine anerkannte Einschränkung: ICMP ist vollständig erlaubt, was bedeutet, dass ein Angreifer immer noch bestätigen kann, dass Metasploitable lebt. In einer Umgebung mit höheren Sicherheitsanforderungen würde dies ratenbegrenzt oder auf vertrauenswürdige Quellen beschränkt. In diesem Labor ist ICMP der primäre Konnektivitätsprüfmechanismus, daher bleibt es offen.
Dieses Labor verwendet eine dedizierte Snort-Maschine. Im Vergleich zur Ausführung von Snort als Plugin in einer Firewall-Appliance wie pfSense oder OPNsense:
Vorteile des dedizierten Ansatzes:
Kompromisse:
Die dedizierte Snort-Maschine ist die richtige Wahl für Unternehmensumgebungen, die Leistung, Positionierung und Anpassung benötigen. Der pfSense/OPNsense-Plugin-Ansatz ist sinnvoller für kleine Unternehmen oder Heimlabor-Umgebungen, die Benutzerfreundlichkeit priorisieren.
Phase 2 ist technisch passives Snort + iptables-Durchsetzung, nicht Snort im echten Inline-Modus – Snort selbst protokolliert (pcap DAQ configured to passive), und iptables führt das Verwerfen basierend auf Ratenbegrenzungen, String-Übereinstimmungen und Verbindungszahlen durch.
Dies ist ein legitimes und verbreitetes Bereitstellungsmuster (so arbeiten viele reale Linux-basierte IDS/IPS-Stapel). Ein natürlicher nächster Schritt wäre die Migration von Phase 2 zu einer echten Inline-Konfiguration mit snort --daq nfq (oder afpacket im Inline-Modus) mit Snorts reject / drop-Regelaktionen, sodass Snort selbst das Verwerfen basierend auf vollständiger Signaturübereinstimmung durchführt, anstatt es an iptables zu delegieren.
snort-ids-ips-lab/
├── README.md ← diese Datei
├── report/
│ ├── Snort-IDS-IPS-Report.pdf ← vollständiger Laborbericht
│ └── Snort-IDS-IPS-Report.docx ← bearbeitbare Quelle
├── scripts/
│ ├── router_config.sh ← IP-Weiterleitung + iptables-Routing
│ ├── ping_check.sh ← Konnektivitätsprüfung
│ ├── attack_simulator.sh ← 4-Vektor-Angriffskette
│ ├── ips_setup.sh ← IPS iptables-Regeln + Snort-Daemon
│ └── local.rules ← 5 benutzerdefinierte Snort-Regeln (SID 1000001-1000005)
├── screenshots/ ← Abbildungen des Berichts
├── .gitignore
└── LICENSE
⚠️ Nur für Laboreinsatz. Diese Skripte führen echte Exploits und Brute-Force-Werkzeuge gegen ein absichtlich verwundbares Ziel aus. Führen Sie sie nicht gegen ein System aus, das Sie nicht besitzen und für das Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben.
scripts/router_config.sh aus, dann scripts/ping_check.sh, um die vollständige Konnektivität zu bestätigen.sudo apt update && sudo apt install snort -y
scripts/local.rules unter /etc/snort/rules/local.rules und setzen Sie HOME_NET = "10.10.10.0/24,192.168.50.0/24" in /etc/snort/snort.conf.sudo snort -T -c /etc/snort/snort.conf – erwarten Sie 652 geladene Regeln, 0 Warnungen.sudo snort -c /etc/snort/snort.conf -i eth1 -i eth2 -A alert_fast -l /var/log/snort/
# In einem anderen Terminal:
sudo tail -f /var/log/snort/alert_fast.txt
sudo ./scripts/attack_simulator.sh – beobachten Sie, wie Alarme ausgelöst werden und die Meterpreter-Shell erscheint.sudo ./scripts/ips_setup.sh ausführen, dann erneut die Angriffskette auf dem Angreifer ausführen. Bestätigen Sie die Blockierungen, dann manuell testen:
ping -c 4 192.168.50.10 # sollte erfolgreich sein
ftp 192.168.50.10 # msfadmin / msfadmin – sollte erfolgreich sein
Alle in diesem Repository dokumentierten Aktivitäten wurden ausschließlich innerhalb einer eigenständigen VMware-Virtualisierungslaborumgebung für beaufsichtigte akademische Lernzwecke durchgeführt. Es wurden keine externen, produktions- oder realen Systeme anvisiert, gescannt oder in irgendeiner Weise beeinflusst. Metasploitable 2 ist eine absichtlich verwundbare virtuelle Maschine, die speziell für Sicherheitstrainings entwickelt wurde.
Dieses Material darf nicht verwendet werden, um diese Aktivitäten gegen ein reales System zu replizieren, ohne eine ausdrückliche schriftliche Genehmigung des Systemeigentümers. Unautorisierte Portscans, Zugangsdatenangriffe oder die Ausnutzung von Netzwerkdiensten sind in den meisten Rechtsordnungen illegal.
MIT — siehe LICENSE. Der Laborbericht selbst wird zu Bildungszwecken bereitgestellt.