- PLSQL 78.3%
- Shell 19.8%
- Dockerfile 1.9%
|
|
||
|---|---|---|
| apex | ||
| db | ||
| docker | ||
| docs | ||
| .gitignore | ||
| CLAUDE.md | ||
| README.md | ||
fw-mgmt -- Firewall Rule Management
Anwendung zur Dokumentation und Verwaltung von Firewall-Regeln. Die App dient nicht der Konfiguration von Firewalls -- das erledigt das Netzwerk-Team. Stattdessen bietet sie eine zentrale Stelle, um Regeln zu erfassen, zu recherchieren und den Status-Workflow zu verfolgen.
Stack: Oracle APEX (UI) + PL/SQL (Business Logic) auf Oracle 19c/21c
Inhaltsverzeichnis
- Voraussetzungen
- Downloads (einmalig)
- Setup
- Taeglicher Betrieb
- Testdaten
- Projektstruktur
- Datenmodell
- Rollenmodell
- APEX-Seiten
- Deployment (Produktion)
- Troubleshooting
Voraussetzungen
- Docker und Docker Compose
- ca. 6 GB Festplatte (Oracle XE Image + Daten)
- ca. 4 GB RAM fuer den Oracle-Container
- Kein Oracle-Account noetig fuer die Downloads
Downloads (einmalig)
Zwei ZIP-Dateien muessen manuell heruntergeladen werden (kein Oracle-Account noetig):
| Datei | Quelle | Ziel |
|---|---|---|
| ORDS | https://www.oracle.com/database/technologies/appdev/rest.html | docker/ords/ords-latest.zip |
| APEX | https://www.oracle.com/tools/apex/all-apex-downloads.html | Entpacken nach docker/apex/ (Ergebnis: docker/apex/apex/apexins.sql) |
Setup
1. Umgebung konfigurieren
cp docker/.env.example docker/.env
# Optional: Passwoerter in docker/.env anpassen
2. ORDS-Image bauen und Oracle starten
cd docker
docker compose build ords
docker compose up oracle -d
# Warten bis Oracle healthy ist (ca. 2 Minuten beim ersten Start)
docker compose ps
3. APEX installieren (einmalig, ca. 5-10 Minuten)
bash docker/scripts/install_apex.sh
Das Skript installiert APEX in die Datenbank, legt den Workspace FW_MGMT an und erstellt den APEX-Benutzer ADMIN. Das Passwort wird am Ende ausgegeben.
4. ORDS starten
cd docker
docker compose up ords -d
# Warten bis "Oracle REST Data Services initialized" in den Logs erscheint
docker compose logs -f ords
5. Datenbankschema einrichten
bash docker/scripts/setup_schema.sh
Fuehrt alle Migrationen (V001-V011) aus: Tabellen, Packages, Views, Trigger, Seed-Daten.
6. APEX-App importieren
bash docker/scripts/install_apex_app.sh
Importiert die Shared Components (Auth-Schemas, LOVs, Navigation, Theme) und die Basis-Seiten (Login, Dashboard, Global Page).
7. APEX-App im Builder fertigstellen
Die Interactive-Grid-Seiten (20, 30, 40, 50, 100) muessen manuell im APEX Builder angelegt werden. Der Import-Mechanismus hat einen bekannten Bug, bei dem IG-Inserts still fehlschlagen.
APEX Builder oeffnen: http://localhost:8080/ords/apex
| Login | Wert |
|---|---|
| Workspace | FW_MGMT |
| Benutzer | ADMIN |
| Passwort | (aus Schritt 3) |
Konfigurationsreferenz fuer jede Seite: apex/f100/application/pages/page_000XX.sql
Alternativ: Den aktuellen Export in apex/f100/ als vollstaendigen Import nutzen -- allerdings muessen die IG-Seiten anschliessend geloescht und im Builder neu gebaut werden (siehe User Guide).
8. Ersten Benutzer anlegen
Nach dem Login als ADMIN auf Seite 100 (Benutzerverwaltung) den eigenen Benutzer anlegen:
| Feld | Wert |
|---|---|
| Username | (gleich wie APEX-Login) |
| Rolle | ADMIN |
| Aktiv | Ja |
Taeglicher Betrieb
cd docker
# Starten
docker compose up -d
# Stoppen
docker compose down
# Logs
docker compose logs -f oracle
docker compose logs -f ords
# Kompletter Reset (loescht ALLE Daten!)
bash scripts/reset_dev.sh
Zugriff
| URL | Zweck |
|---|---|
| http://localhost:8080/ords/r/fw_mgmt/firewall-management | Anwendung |
| http://localhost:8080/ords/apex | APEX Builder / Admin |
Datenbankverbindung
| Parameter | Wert |
|---|---|
| Host | localhost |
| Port | 1521 |
| Service | XEPDB1 |
| Schema | FW_MGMT |
| Passwort | (aus .env) |
Testdaten
Fuer Demos und PoC koennen realistische Testdaten generiert werden:
# Im Container ausfuehren:
docker cp db/testdata/generate_testdata.sql fw-mgmt-db:/tmp/
docker exec -i fw-mgmt-db sqlplus -s "sys/PASSWORT@localhost:1521/XEPDB1 as sysdba" @/tmp/generate_testdata.sql
Das Skript legt an:
- 20 Netzwerkzonen (DMZ, LAN, Serverzone Prod/Test/Dev, PCI, Cloud, etc.)
- 15 Firewalls (Palo Alto, Fortinet, Check Point, Cisco)
- 41 Services (Web, Mail, DB, SAP, Citrix, VPN, etc.)
- ~850 Systeme mit IP-Adressen
- ~200 Firewall-Regeln mit realistischen Quell-/Ziel-/Service-Zuordnungen
- 8 Benutzer (Admin, PLTL, User)
Achtung: Das Skript loescht alle bestehenden Daten!
Projektstruktur
fw-mgmt/
db/
migrations/ V001-V011: Schema, Seed-Daten, Packages, Views, Trigger
packages/ PL/SQL Package Specs (.pks) und Bodies (.pkb)
views/ Views und LOV-Views
testdata/ Testdaten-Generator
apex/
create_app.sql Erstellt App-Shell (Auth, LOVs, Navigation)
f100/ Export-Snapshot der APEX-App (Referenz / Versionskontrolle)
docker/
docker-compose.yml
.env.example Vorlage fuer Umgebungsvariablen
oracle/init/ SQL-Skripte beim ersten Container-Start
ords/ ORDS Dockerfile + Entrypoint
scripts/ Setup- und Hilfs-Skripte
Datenmodell
FW_ZONE Netzwerkzonen (DMZ, LAN, WAN, MGMT, ...)
FW_FIREWALL Firewall-Geraete
FW_SYSTEM Adress-Objekte (Hosts, Netze, Servergruppen)
FW_SYSTEM_ADDR IPs / CIDRs pro System (1:n)
FW_SERVICE Dienste (Name + Protokoll + Port)
FW_RULE Firewall-Regeln mit Status-Workflow
FW_RULE_SRC n:m Regel <-> Quell-Systeme
FW_RULE_DST n:m Regel <-> Ziel-Systeme
FW_RULE_SVC n:m Regel <-> Services
FW_RULE_HIST Aenderungshistorie (JSON-Snapshots)
FW_APP_USER Benutzer mit Rollen
Status-Workflow: NEW -> IMPLEMENTED | REJECTED | ROLLED_BACK
Rollenmodell
| Rolle | Beschreibung |
|---|---|
ADMIN |
Vollzugriff, Benutzerverwaltung |
PLTL |
Regeln erstellen, bearbeiten, Status aendern |
USER |
Nur lesen (automatisch fuer jeden eingeloggten Benutzer) |
Benutzer, die sich anmelden koennen (APEX-Account oder LDAP), erhalten automatisch Leserechte (USER). Fuer hoehere Berechtigungen muss ein Eintrag in der Benutzerverwaltung (Seite 100) angelegt werden.
Rollenpruefungen laufen zentral ueber FW_AUTH_PKG -- nicht in APEX dupliziert.
APEX-Seiten
| Seite | Inhalt | Berechtigung |
|---|---|---|
| 1 | Dashboard | Alle |
| 10 | Regeluebersicht (Interactive Report) | Alle |
| 11 | Regel anlegen / bearbeiten (Form) | PLTL, ADMIN |
| 12 | Regeldetail + Aenderungshistorie | Alle (Status aendern: PLTL, ADMIN) |
| 20 | Systeme / Adress-Objekte (IG) | Lesen: Alle / Schreiben: PLTL, ADMIN |
| 30 | Services (IG) | Lesen: Alle / Schreiben: PLTL, ADMIN |
| 40 | Firewalls (IG) | Lesen: Alle / Schreiben: PLTL, ADMIN |
| 50 | Zonen (IG) | Lesen: Alle / Schreiben: PLTL, ADMIN |
| 100 | Benutzerverwaltung (IG) | Nur ADMIN |
| 9999 | Login | Oeffentlich |
Deployment (Produktion)
Die Produktivumgebung laeuft auf einer bestehenden Oracle-Datenbank.
Datenbank:
- Migrationen
db/migrations/V001-V011der Reihe nach ausfuehren - Packages kompilieren:
@db/migrations/V003__compile_packages.sql
APEX:
Die App wird im APEX Builder der Zielumgebung manuell aufgebaut (nicht per Import). Der Export in apex/f100/ dient als Referenz.
Troubleshooting
Oracle-Container startet nicht
docker compose logs oracle
# Pruefen ob genug RAM/Disk vorhanden ist
# Beim ersten Start dauert es ca. 2 Minuten
ORDS startet nicht / "pool_config not found"
# ORDS komplett zuruecksetzen:
docker compose down ords
docker exec -it --entrypoint bash fw-mgmt-ords -c "ords uninstall"
docker volume rm docker_ords-config
docker compose up ords -d
Login funktioniert nicht (Klick passiert nichts)
Pruefen ob der Benutzer in FW_APP_USER eingetragen ist:
SELECT username, role, active FROM fw_app_user;
Interactive Grid INSERT funktioniert nicht (stiller Fehler)
Die IG-Seiten (20, 30, 40, 50, 100) muessen im APEX Builder manuell angelegt werden. Der Import-Mechanismus (wwv_flow_imp_page.create_*) hat einen bekannten Bug, bei dem INSERT-Operationen still uebersprungen werden.
Loesung: Seite im Builder loeschen und neu anlegen. Konfigurationsreferenz: apex/f100/application/pages/page_000XX.sql
ORA-00942: table or view does not exist
Views oder Packages sind nicht kompiliert:
-- Als SYS:
EXEC DBMS_UTILITY.COMPILE_SCHEMA(schema=>'FW_MGMT', compile_all=>FALSE);
21-slim Image funktioniert nicht
APEX benoetigt Oracle XML Database (XDB), die im slim-Image als INVALID markiert ist. Immer gvenzl/oracle-xe:21-full verwenden.