Programming lesson
SDN-Firewall mit POX: Schritt-für-Schritt-Tutorial für OMSCS/OMSCY (Fall 2025)
Lerne, wie du mit POX und OpenFlow eine konfigurierbare SDN-Firewall implementierst – inklusive praktischer Tipps zu Mininet, Wireshark und Fehlerbehebung. Ideal für OMSCS/OMSCY-Studierende.
Einführung in die SDN-Firewall mit POX
Software-Defined Networking (SDN) revolutioniert die Art und Weise, wie Netzwerke gesteuert werden. In diesem Tutorial erfährst du, wie du mit dem POX-Controller eine konfigurierbare Firewall für ein OpenFlow-fähiges Switch-Netzwerk erstellst. Das Projekt basiert auf der OMSCS/OMSCY-Aufgabe „SDN Firewall with POX Fall 2025“ und ist ideal, um die Grundlagen von SDN, OpenFlow und Netzwerksicherheit zu verstehen.
Projektübersicht und Ziele
In diesem Projekt implementierst du eine Firewall, die den Datenverkehr zwischen Hosts in einer Mininet-Topologie filtert. Du wirst:
- Die Konfigurationsdatei
configure.polerstellen, die die Firewall-Regeln definiert. - Den Python-Code in
sdn-firewall.pyschreiben, der die Regeln auswertet und Flow-Mod-Nachrichten an den Switch sendet. - Mit Wireshark und tshark den Netzwerkverkehr analysieren und die Firewall testen.
- Die Kommunikation zwischen Hosts wie us1, us2, europe1 und europe2 steuern.
Voraussetzungen und Setup
Stelle sicher, dass du die neueste POX-Version verwendest. Führe dazu folgende Befehle in deiner VM aus:
cd /home/mininet/pox
git pull
git checkout ichthyosaur
chown -R mininet:mininet ~/poxEntpacke dann die Projektdatei SDNFirewall-Fall2025.zip in dein Home-Verzeichnis:
unzip SDNFirewall-Fall2025.zip -d ~/SDNFirewallWechsle in das Verzeichnis und mache dich mit der Dateistruktur vertraut:
sdn-topology.py– Startet die Mininet-Topologiesdn-firewall.py– Deine Firewall-Implementierungconfigure.pol– Regeln für die Firewallrun.sh– Startet POX mit der Firewallclean.sh– Bereinigt die Umgebung
Firewall-Implementierung im Detail
Teil 1: Die Konfigurationsdatei configure.pol
Die Datei configure.pol definiert die Firewall-Regeln im Format rule<nummer>:<aktion>:<src-ip>:<dst-ip>:<protokoll>:<src-port>:<dst-port>. Eine beispielhafte Regel könnte so aussehen:
rule1:allow:10.0.0.1:10.0.0.2:TCP:80:*Diese Regel erlaubt TCP-Verkehr von Host 10.0.0.1 zu 10.0.0.2 auf Port 80. Die Aktion kann allow oder deny sein. Fehlende Felder werden mit * als Platzhalter gekennzeichnet.
Teil 2: Der Python-Code sdn-firewall.py
In dieser Datei implementierst du die Logik, die eingehende Pakete mit den Regeln abgleicht. Der POX-Controller ruft bei jedem neuen Flow den Event-Handler _handle_PacketIn auf. Dein Code muss:
- Die Regeln aus
configure.polparsen. - Die Paket-Header (IP, Ports, Protokoll) extrahieren.
- Prüfen, ob eine Regel zutrifft.
- Bei
alloweine Flow-Mod-Nachricht mitofp_action_outputsenden, beidenydas Paket verwerfen (keine Aktion).
Ein minimales Grundgerüst könnte so aussehen:
from pox.core import core
import pox.openflow.libopenflow_01 as of
from pox.lib.packet import ipv4, tcp, udp
rules = [] # Wird beim Start geladen
def _handle_PacketIn(event):
packet = event.parsed
# Extrahiere IP- und Transport-Header
# Prüfe gegen rules
# Sende Flow-Mod oder verwerfe
core.openflow.addListenerByName("PacketIn", _handle_PacketIn)Teil 3: Testen mit Mininet und Wireshark
Starte die Topologie mit:
sudo python sdn-topology.pyÖffne dann ein xterm für jeden Host:
mininet> xterm us1 us2 europe1 europe2Um den Datenverkehr zu analysieren, starte tshark auf us1:
sudo tshark -i us1-eth0 -w /tmp/packetcapture.pcapFühre einen Ping von us1 zu us2 aus und beobachte, ob die Firewall greift. Öffne die PCAP-Datei in Wireshark, um die Pakete im Detail zu sehen.
Häufige Fehler und Lösungen
- POX startet nicht: Stelle sicher, dass der Pfad zu POX korrekt ist und führe
clean.shaus. - Firewall-Regeln werden ignoriert: Überprüfe, ob
configure.polim richtigen Format ist und keine Leerzeichen enthält. - Flow-Mod wird nicht gesendet: Verwende
event.connection.send(msg)und setzemsg.buffer_idkorrekt. - Wireshark zeigt keine Pakete: Starte tshark mit
sudound wähle das richtige Interface.
Best Practices und Tipps
- Teste jede Regel einzeln, bevor du mehrere kombinierst.
- Nutze die POX-API aus Appendix C des Projekts, um Flow-Mod-Objekte korrekt zu erstellen.
- Verwende
print-Anweisungen im Code, um den Regelabgleich zu debuggen. - Halte die Firewall-Regeln so spezifisch wie möglich, um Fehlkonfigurationen zu vermeiden.
Zusammenfassung
Mit diesem Tutorial hast du die Grundlagen für die Implementierung einer SDN-Firewall mit POX gelernt. Du kannst jetzt:
- Regeln in
configure.poldefinieren, - den Python-Code für die Firewall schreiben,
- das Verhalten mit Mininet und Wireshark testen.
Diese Fähigkeiten sind nicht nur für die OMSCS/OMSCY-Aufgabe relevant, sondern auch für reale Anwendungen in Cloud-Netzwerken, IoT-Sicherheit und Datencenter-Automatisierung. Viel Erfolg!