Firewall Konfigurations-Änderungen automatisch umsetzen
Automatisierung von Firewall-Konfigurationen für OPNsense, Fortinet und Checkpoint
Ich arbeite mit großer Leidenschaft im Bereich der Netzwerksicherheit. Die frühzeitige Erkennung von Angriffen im Netzwerk ist für mich eine spannende und herausfordernde Aufgabe, die ich mit Begeisterung angehe.
Allerdings gehört auch die Umsetzung von Kundenanforderungen dazu – eine Aufgabe, die häufig von Sachbearbeitern oder Firewall-Administratoren übernommen wird. Sie ist oft eher monoton: Man erhält ein Dokument, in dem festgelegt ist, welche Ports für welche Systeme freigegeben werden müssen. Dieser Artikel beschreibt kurz die Weiterentwicklung einer alten Idee, die ich bereits Anfang 2021 vorgestellt habe:
Automatisierung der Firewall-Konfiguration aus Excel-Tabellen
Firewall-Regeln, Routen oder Interface-Konfigurationen werden vom Kunden häufig in Form einer Excel-Tabelle bereitgestellt – allerdings in stets unterschiedlicher Anordnung. Das manuelle Übertragen dieser Daten ist daher meist eintönig und bringt nur eine einzige Herausforderung mit sich: die oft uneinheitlichen und fehlerhaften Feldbezeichnungen in der ersten Zeile richtig zu interpretieren.
Mein Ansatz
Ich habe für mich entschieden, meine Zeit stärker der Netzwerksicherheit zu widmen, da das manuelle Abtippen von Excel-Tabellen für mich kaum eine Herausforderung darstellt.
Deshalb habe ich ein Tool entwickelt, das Konfigurationsanforderungen aus Excel-Tabellen automatisch in Command-Line-Befehle für die Plattformen OPNsense, Checkpoint und Fortinet übersetzt.
Wie wird die Anforderung übergeben
Wenn ich also eine Excel-Tabelle bekomme, werfe ich sie einfach in meine Nextcloud. Hier gibt es einen Ordner, der von inotify überwacht wird.

Sobald für fünf Sekunden keine Änderungen mehr in diesem Ordner erfolgen – also alle Datei-Uploads abgeschlossen sind – startet mein Skript.
Dieses nutzt KI, um die Tabellen zu analysieren und nach bestimmten Begriffen wie Destination-Port
, Service
oder Applikation
zu suchen. Anhand verwandter Begriffe wird die Spalte mit den angeforderten Protokollen automatisch erkannt.

Nach dem gleichen Prinzip analysiere ich auch Routing-Tabellen. Taucht das Wort Next-Hop
oder ein ähnlicher Begriff auf, werden die relevanten Spalten entsprechend ausgewertet.
Auch bei Cluster-Interfaces hochverfügbarer Firewalls erkennt das Skript automatisch, welche IP zur ersten Firewall gehört, welche zur zweiten und welche die Cluster-IP ist. All diese Informationen werden in Arrays gespeichert – jeweils für jeden Auftrag.
Nun muss nur noch bestimmt werden, für welche Zielplattform die Anforderungen umgesetzt werden sollen, da jede Firewall ihre eigene Konfigurationssprache hat.
Seitdem OPNsense-Firewalls über eine API verfügen, kann ich einfach Befehle vorbereiten, die direkt in die Konsole kopiert werden können. Nach dem gleichen Prinzip funktioniert es auch für alle anderen Plattformen.
Grundsätzliche Funktionsweise meines Scriptes
- Überwachung des Verzeichnisses: Das Skript verwendet
inotifywait
, um das angegebene Verzeichnis (WATCH_DIR
) auf neue Excel-Dateien zu überwachen. - Verarbeitung der Excel-Datei: Wenn eine neue Datei erkannt wird, wartet das Skript eine konfigurierbare Zeit (
DELAY
), um sicherzustellen, dass die Datei vollständig geschrieben wurde. Anschließend wird die Datei mitin2csv
in das CSV-Format konvertiert. - Extrahieren der Konfigurationsdaten: Das Skript extrahiert Interface-, Routing- und Regel-Konfigurationen aus dem CSV-Inhalt und erkennt mittels ollama, in welcher Spalte die für die Konfiguration erforderlichen Informationen zu finden sind.
- Generierung der Firewall-Konfiguration: Basierend auf den extrahierten Daten generiert das Skript die entsprechenden Konfigurationsbefehle für die verschiedenen Firewall-Plattformen (OPNsense, Checkpoint und Fortinet).
- Ausgabe in eine Markdown-Datei: Die generierten Konfigurationsanweisungen werden in einer Markdown-Datei gespeichert, die leicht in die Konsole kopiert werden kann.
Automatisierte Firewall-Regel-Erstellung am Beispiel der OPNsense-API
Für OPNsense-Firewalls kann die API verwendet werden, um Firewall-Regeln automatisiert hinzuzufügen. Dies ermöglicht eine sichere und effiziente Verwaltung der Firewall-Konfiguration.
Schritt 1: API-Zugriff auf OPNsense konfigurieren
- API-Nutzer erstellen:
- An der OPNsense-Weboberfläche anmelden.
- Zu
System
>Zugriff
>Benutzer
navigieren. - Auf das
+
-Symbol klicken, um einen neuen Benutzer hinzuzufügen. - Einen Benutzernamen (z.B.
api_user
) und ein sicheres Passwort eingeben. - Den Benutzer der Gruppe
admins
zuweisen, um ihm die erforderlichen Berechtigungen zu erteilen. - Die Einstellungen speichern.
- API-Schlüssel generieren:
- Den soeben erstellten Benutzer bearbeiten.
- Nach unten zum Abschnitt
API-Schlüssel
scrollen. - Auf das
+
-Symbol klicken, um einen neuen API-Schlüssel zu erstellen. - Den angezeigten
Key
undSecret
sicher speichern, da sie nach dem Verlassen der Seite nicht erneut angezeigt werden.
Schritt 2: Firewall-Regel über die API hinzufügen
Mit den generierten API-Zugangsdaten kann ein Bash-Skript erstellt werden, das eine neue Firewall-Regel hinzufügt. Dieses Skript nutzt curl
, um HTTP-Anfragen an die OPNsense-API zu senden.
Beispiel-Skript, um die KI ermittelten Werte an die OPNsense zu senden:
# API-Zugangsdaten
API_KEY="Mein_API_Key"
API_SECRET="Mein_API_Secret"
OPNSENSE_HOST="Die_OPNsense_IP"
# JSON-Payload für die API-Anfrage
PAYLOAD=$(cat <<EOF
{
"rule": {
"interface": "$INTERFACE",
"source": {
"network": "$SOURCE_NET"
},
"destination": {
"network": "$DEST_NET",
"port": "$DEST_PORT"
},
"protocol": "$PROTOCOL",
"action": "$ACTION",
"description": "$DESCRIPTION",
"enabled": "1"
}
}
EOF
)
# API-Anfrage zum Hinzufügen der Firewall-Regel
curl -X POST -u "$API_KEY:$API_SECRET" \
-H "Content-Type: application/json" \
-d "$PAYLOAD" \
"https://$OPNSENSE_HOST/api/firewall/rule/addRule"
# Änderungen anwenden
curl -X POST -u "$API_KEY:$API_SECRET" \
"https://$OPNSENSE_HOST/api/firewall/apply"
Das Ergebnis
Nachdem ich die Tabellen einfach in meinen Auftrags-Ordner verschoben habe, wechsle ich in den Tab meiner Notizen – und siehe da: Alles, was für die Umsetzung erforderlich ist, wird übersichtlich und sauber aufbereitet dargestellt.

Ich muss nur noch auf das Clipboard-Symbol klicken und anschließend in der Firewall auf das Konsolen-Symbol – dort kann ich die Konfiguration direkt einfügen.

Sind die zwei Klicks gemacht, klicke ich in der Notiz noch auf erledigt
und markiere dadurch, falls ich einmal abgelenkt wurde, was bereits umgesetzt wurde. Die Fertigstellung einer Kundenanforderung dauert für mich nun nur noch wenige Minuten am Tag.
Ich könnte diese Aufgabe auch vollautomatisch erledigen lassen. Best Practise im Bereich der Netzwerk-Sicherheit ist aber, immer selbst ein Auge darauf zu haben, ob die Umsetzung plausiebel ist.
So kann ich mich endlich wieder voll auf die Sicherheit der Netze konzentrieren, die mir anvertraut wurden.

Fazit
Natürlich müssen die Kundenanforderungen berücksichtigt werden, auch wenn das der weniger spannende Teil der Arbeit ist. Früher nahm diese Aufgabe fast meinen gesamten Arbeitstag in Anspruch – heute erledige ich sie in etwa einer halben Stunde.
Mit technischem Verständnis und der richtigen Erfahrung lassen sich solche Geschäftsprozesse erheblich optimieren. Gleichzeitig reduziert sich das Risiko von Fehlern, die beim manuellen Abtippen unvermeidlich wären.