No description
  • PLSQL 78.3%
  • Shell 19.8%
  • Dockerfile 1.9%
Find a file
deko bde50d9283 Add APEX App 100 export as ZIP for direct import
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 16:11:46 +02:00
apex Add APEX App 100 export as ZIP for direct import 2026-04-17 16:11:46 +02:00
db Initial commit: Firewall Management App (Oracle APEX + PL/SQL) 2026-04-17 16:00:55 +02:00
docker Initial commit: Firewall Management App (Oracle APEX + PL/SQL) 2026-04-17 16:00:55 +02:00
docs Initial commit: Firewall Management App (Oracle APEX + PL/SQL) 2026-04-17 16:00:55 +02:00
.gitignore Initial commit: Firewall Management App (Oracle APEX + PL/SQL) 2026-04-17 16:00:55 +02:00
CLAUDE.md Initial commit: Firewall Management App (Oracle APEX + PL/SQL) 2026-04-17 16:00:55 +02:00
README.md Initial commit: Firewall Management App (Oracle APEX + PL/SQL) 2026-04-17 16:00:55 +02:00

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

  • 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:

  1. Migrationen db/migrations/V001-V011 der Reihe nach ausfuehren
  2. 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.