No description
  • PLSQL 78.3%
  • Shell 19.8%
  • Dockerfile 1.9%
Find a file
deko de40743972 fix(docker): resolvable hostname for Oracle container
PMON registers Oracle Net services under the container's own OS
hostname, not its IP. Without an explicit hostname, that's Docker's
random container ID, which nothing outside Docker can resolve - this
broke dynamic service registration with an external Oracle Connection
Manager (REMOTE_LISTENER). Setting a real, DNS-resolvable hostname
fixes registration without touching LOCAL_LISTENER.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 15:58:42 +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 fix(docker): resolvable hostname for Oracle container 2026-07-04 15:58:42 +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.