Die neue Sophos UTM REST API

Jeder Admin kennt es und „liebt“ es: das händische Anlegen von mehreren hundert Objekten und Firewall-Regeln im Rahmen einer Firewall Migration. Das kostet eine Menge Zeit (und somit Geld), Fehler werden im schlimmsten Fall zu einem großen Sicherheits-Problem und vor allem ist es ziemlich langweilig und nervig.

Mit der Sophos API kann man sich als Admin das Leben hier deutlich einfacher machen.

Aber von Anfang an. Ich bin in einem Projekt im Moment mit der Migration einer Firewall beschäftigt. Nachdem der Kunde viele sog. UTM-Features benutzen möchte, wird von einer Juniper SRX auf eine Sophos UTM migriert. Selbstverständlich kann man genauso gut automatisiert von einer UTM auf eine SRX migrieren.

Eigentlich alle Firewall-Hersteller ermöglichen das Anlegen von Objekten/Gruppen mit Namen, damit statt unzähliger IPs leichter zugeordnet werden können. Juniper nennt dies „Address-Book“, Sophos „Network Definitions“. Oft sind diese jedoch nicht einheitlich oder schlecht gepflegt und aufgrund der Anzahl der Server in einem Netzwerk sehr aufwändig zu migrieren. Im Prinzip müsste man jeden Host-Namen und IP Kombination einzeln anlegen, einen DNS-Lookup machen und im Falle einer Sophos-Firewall in die rechts abgebildete Maske kopieren.

Anhand dieses Beispiels möchte ich aufzeigen, wie man sich diese Sisyphusarbeit mit der neuen Sophos Rest API, welche Sophos seit Version 9.5 im Mai implementiert hat, vereinfachen kann.

Ich habe dazu ein paar kleine Scripte gebastelt, welches im Prinzip folgende Schritte automatisiert haben:

  1. Auslesen aller Host-Objekte aus einer SRX
  2. Aufbereiten dieser Daten
  3. Reverse DNS-Abfrage, damit das Objekt einen Namen bekommt
  4. Anlegen des Host-Objektes in der Sophos UTM mittels API

Vorarbeiten

Bevor es jedoch ans Scripten geht, müssen wir noch ein paar Hausaufgaben machen. Und zwar gilt es herauszufinden, wie diese neue API überhaupt funktioniert. Nachdem das Feature ziemlich neu ist, fällt eine Suche im Internet ziemlich mau aus. Also: Doku wälzen.

Erfreulicherweise ist das ganze sehr einfach und intuitiv gehalten. Zunächst muss man die API in der Web-Gui einschalten  und einen API-Token generieren.

Danach muss man sich die passenden API-Calls über eine sog. Swagger IO Gui generieren. Einfach https://<sophos>:444/api/ aufrufen und mit dem Token einloggen. Diese GUI liefert nicht nur eine ausführliche Doku, sondern man kann auch direkt interaktiv Objekte anlegen und bekommt einen passenden API-Call als Beispiel angezeigt. Damit haben wir alles, was wir brauchen.

 

Die Automatisierung

Also los geht’s:

Step 1) Bestandsdaten auslesen:

Im folgenden Beispiel lesen wir die Daten aus einer Juniper SRX aus. Dazu loggen wir uns mit ssh auf der srx ein, nutzen das „cli“ Kommando und geben über „-c“ den auszuführenden Befehl mit.

Step 2) Ausgabe aufbereiten:

O.g. Kommando liefert die entsprechenden Zeilen der Konfiguration – wir wollen aber nur die IPs. Daher müssen wir diesen String etwas zerlegen. Ferner könnte es ja sein, dass eine IP mehrfach vorhanden ist; daher wird mit „uniq“ noch sichergestellt, dass wir am Ende IP nur einmal migrieren. Davon ausgehend, dass die o.g. Ausgabe in einer Datei mit dem Namen „ip.txt“ gespeichert ist, mache ich das wie folgt:

Step 3) DNS-Abfrage

Jetzt, da wir die IP haben, können wir einen DNS-Server unserer Wahl nutzen, um den kompletten Namen des Servers, welcher sich hinter der IP versteckt, rauszufinden. Am Ende haben wir dann ein  File mit IPs und Namen. Dazu lesen wir wieder die Daten aus der Datei „ip.txt“ ein.

Step 4) Objekt anlegen

Im Prinzip sind wir fast fertig. Wir haben den Namen, die IP in einem Format, welches einfach auszuwerten ist und kennen den API-Aufruf. Folgendes kleines „Mini Script“ liest die Daten aus und legt die Objekte entsprechend an.

Step 5) Ergebnis prüfen

Nachdem dieses Feature noch ganz neu ist, gibt es noch ein paar kleine Schönheitsfehler in der API. Daher ist eine kurze Kontrolle wichtig, damit wir sicherstellen können, dass der Automatismus auch sauber funktioniert hat. Das Anlegen von doppelten Objekten (mit gleichem Namen) führt zur Zeit z.B. zum Neustart des API-Dienstes und somit zum Abbruch des Scriptes. Daher muss man etwas aufpassen und dem Script noch etwas mehr Intelligenz verpassen. Einen entsprechenden Bug-Report habe ich natürlich bereits beim Hersteller eröffnet.

Fazit

Dank dieser API konnte ich unserem Kunden (und mir :-)) tagelange kostenintensive Copy- und Paste-Arbeit ersparen und die Qualität des Ergebnisses steigern, da Tipfehler so ausgeschlossen sind. Die o.g. Kommandos muss man lediglich noch in eine kleine Schleife verpacken und schon kann man alle Hosts auf Knopfdruck von einer SRX auf eine Sophos UTM migrieren. Andersrum geht das natürlich genauso :-).

Das Ganze ist ein erster Versuch diese API zu nutzen, daher sind alle Angaben ohne Gewähr; natürlich kann man noch deutlich mehr und umfangreichere Aufgaben abbilden.

Zu Risiken, Nebenwirkungen und weiteren Fragen, können Sie uns selbstverständlich jederzeit kontaktieren.

Patrick Müller

Patrick Müller ist seit 2015 für die Proact Deutschland GmbH in Nürnberg tätig. Er beschäftigt sich hauptsächlich mit der Konzeption, Weiterentwicklung und dem Betrieb der Proact Cloud Services, ist aber auch als Consultant im Bereich Open Source und Netzwerk unterwegs. Vor seiner Zeit bei Proact war Patrick für ein Bankrechenzentrum tätig.

 
Kommentare

Hi

im übrigen bietet die SRX auch eine Restful Schnittstelle an , es muss nur der HTTP/HTTPS Service aktiv sein.

Holger

Hinterlassen Sie einen Kommentar an Holger