Firewall-Konfigurationsserver für einen internationalen Handelskonzern
Im Zuge eines neuen IP-Konzeptes werden die Filialen eines internationalen Handelskonzerns mit neuen Firewalls ausgestattet. Um der schieren Menge an neuen Konfigurationen gerecht zu werden, habe ich einen Server geschrieben, der die richtigen Dateien für die jeweiligen Standorte generiert.
Einsatzgebiet
Der Server ist nur Konzern-intern verfügbar und soll für drei unterschiedliche Szenarien verwendet werden:
- Initial werden alle neuen Firewalls mit der generierten Konfiguration bespielt und dann an die Standorte ausgeliefert.
-
Im Servicefall kann ein Techniker die Konfiguration für das Ersatzgerät ermitteln.
-
Sollten Änderungen an den Konfigurationen nötig werden, ist dies der zentrale Ort, an dem die Änderungen eingepflegt werden.
Schnittstellen
Der Server stellt verschiedene Schnittstellen bereit, über die die Konfigurationsdateien und Metadaten ermittelt werden können:
-
Die Webseite eines Standortes mit Konfigurationen und Zusatzinformation wie Öffnungszeiten und Adresse.
-
Der Download vieler Konfigurationen auf einmal als ZIP-Archiv, wobei die Eingabe mittels Upload einer simplen CSV-Datei stattfindet.
-
Eine HTTP-GET API, über die Konfigurationen und Metadaten direkt ermittelt werden können.
-
Ein Maintenance-/Debugging-Interface, das via AJAX und JavaScript eine SNMP-Abfrage stellt und das Ergebnis filterbar darstellt.
Das richtige Werkzeug
Der Server ist in Python geschrieben. Als Webframework habe ich das leichtgewichtige Flask verwendet. Die benötigten Daten werden aus verschiedenen Quellen ermittelt: DNS, LDAP, SNMP, ein HTTP-PUSH basiertes System – über das Daten als XML empfangen, mit XSD validiert und aktualisiert werden – sowie weitere, lokal vorliegende Daten.
Administration
Auch die Serverkonfiguration kommt von mir. Der Apache2 Webserver liefert die Seite mit mod_wsgi, mod_authz_ldap und mod_ssl aus. Dabei ist der Zugriff beschränkt via LDAP-Gruppen und stets verschlüsselt mit HTTPS.
Screenshot
die Gestaltung ist auf das Wesentliche beschränkt und erklärt die bestehenden Möglichkeiten.