From f149b0989252b97ffd696136eafbac196ca7bd0f Mon Sep 17 00:00:00 2001 From: Christoph Date: Sat, 27 Jun 2026 22:38:12 +0200 Subject: [PATCH] Refactor ipt-server role: update migration and README for hostname variable usage; remove obsolete ipt-server.yml for cloud-01.oopen.de --- .../ipt-server.yml | 2 +- roles/ipt-server/MIGRATION.md | 44 +++++++++++-------- roles/ipt-server/README.md | 26 ++++++----- 3 files changed, 41 insertions(+), 31 deletions(-) rename host_vars/{cloud-01.oopen.de => cl-01.oopen.de}/ipt-server.yml (93%) diff --git a/host_vars/cloud-01.oopen.de/ipt-server.yml b/host_vars/cl-01.oopen.de/ipt-server.yml similarity index 93% rename from host_vars/cloud-01.oopen.de/ipt-server.yml rename to host_vars/cl-01.oopen.de/ipt-server.yml index efa8b1e..9bc7b79 100644 --- a/host_vars/cloud-01.oopen.de/ipt-server.yml +++ b/host_vars/cl-01.oopen.de/ipt-server.yml @@ -1,5 +1,5 @@ --- -# ipt-firewall configuration for cloud-01.oopen.de +# ipt-firewall configuration for cl-01.oopen.de # Generated by extract-fw-host-vars.py - review before committing! # Place in: host_vars//ipt_firewall.yml diff --git a/roles/ipt-server/MIGRATION.md b/roles/ipt-server/MIGRATION.md index 1ab20c5..b5ab050 100644 --- a/roles/ipt-server/MIGRATION.md +++ b/roles/ipt-server/MIGRATION.md @@ -15,7 +15,7 @@ Das alte Verfahren: - Änderungen direkt in `/etc/ipt-firewall/` auf dem Host. Das neue Verfahren: -- Alle Firewall-Einstellungen liegen in `host_vars//ipt-server.yml`. +- Alle Firewall-Einstellungen liegen in `host_vars/${HOSTNAME}/ipt-server.yml`. - Ansible deployt die Config-Dateien aus Jinja2-Templates. - Direktes Editieren auf dem Host ist nicht mehr vorgesehen. @@ -32,9 +32,10 @@ mappt alle Variablen auf die `fw_*`-Ansible-Variablen und schreibt eine fertige ```bash cd /path/to/ansible/oopen-server +HOSTNAME= -./extract-fw-host-vars.py --sudo \ - -o host_vars//ipt-server.yml +./extract-fw-host-vars.py ${HOSTNAME} --sudo \ + -o host_vars/${HOSTNAME}/ipt-server.yml ``` Das Skript fragt einmalig nach dem `sudo`-Passwort. @@ -42,7 +43,7 @@ Das Skript fragt einmalig nach dem `sudo`-Passwort. **Ergebnis prüfen:** ```bash -cat host_vars//ipt-server.yml +cat host_vars/${HOSTNAME}/ipt-server.yml ``` Kontrollpunkte: @@ -65,11 +66,13 @@ installiert: - Systemd-Units → `/etc/systemd/system/` ```bash +HOSTNAME= + # Vorschau: -ansible-playbook ipt-server.yml --limit --check --diff +ansible-playbook ipt-server.yml --limit ${HOSTNAME} --check --diff # Ausrollen: -ansible-playbook ipt-server.yml --limit +ansible-playbook ipt-server.yml --limit ${HOSTNAME} ``` Die Firewall wird dabei **nicht neu gestartet** — die bestehenden Config-Dateien @@ -84,7 +87,9 @@ laufenden Firewall-Rules gesichert. Das ist der Referenzwert für den späteren Vergleich. ```bash -ssh ' +HOSTNAME= + +ssh ${HOSTNAME} ' iptables-save | grep -v "^#" | sed "s/\[[0-9]*:[0-9]*\]/[0:0]/g" \ > /tmp/fw_before_v4.rules ip6tables-save | grep -v "^#" | sed "s/\[[0-9]*:[0-9]*\]/[0:0]/g" \ @@ -101,7 +106,7 @@ Jetzt wird `fw_manage_config: true` gesetzt, damit Ansible die vier host-spezifischen Config-Dateien aus den Templates schreibt: ```yaml -# host_vars//ipt-server.yml +# host_vars/${HOSTNAME}/ipt-server.yml --- fw_manage_config: true # ← hinzufügen / auf true setzen @@ -114,20 +119,22 @@ fw_ext_interfaces: sorgfältig prüfen, ob die neuen Werte den alten entsprechen: ```bash -ansible-playbook ipt-server.yml --limit --check --diff +HOSTNAME= + +ansible-playbook ipt-server.yml --limit ${HOSTNAME} --check --diff ``` **Anwenden:** Ansible schreibt die neuen Config-Dateien und startet die Firewall automatisch neu (da sich die Dateien geändert haben): ```bash -ansible-playbook ipt-server.yml --limit +ansible-playbook ipt-server.yml --limit ${HOSTNAME} ``` **Verifizieren:** Jetzt die neuen Rules mit dem gesicherten Stand vergleichen: ```bash -ssh ' +ssh ${HOSTNAME} ' iptables-save | grep -v "^#" | sed "s/\[[0-9]*:[0-9]*\]/[0:0]/g" \ > /tmp/fw_after_v4.rules ip6tables-save | grep -v "^#" | sed "s/\[[0-9]*:[0-9]*\]/[0:0]/g" \ @@ -144,7 +151,7 @@ Config-Dateien produzieren exakt dieselben Rules wie die bisher händisch verwalteten. Falls Unterschiede erscheinen: die abweichenden Rules identifizieren, die -entsprechenden Variablen in `host_vars//ipt-server.yml` nachpflegen, +entsprechenden Variablen in `host_vars/${HOSTNAME}/ipt-server.yml` nachpflegen, erneut ausrollen und den Diff wiederholen. Ab jetzt: @@ -171,7 +178,9 @@ Das Repository `/usr/local/src/ipt-server` wird von der neuen Rolle nicht mehr benötigt. Es kann entfernt werden: ```bash -ssh 'rm -rf /usr/local/src/ipt-server' +HOSTNAME= + +ssh ${HOSTNAME} 'rm -rf /usr/local/src/ipt-server' ``` Vorher prüfen, ob das Verzeichnis noch anderweitig verwendet wird. @@ -180,14 +189,13 @@ Vorher prüfen, ob das Verzeichnis noch anderweitig verwendet wird. Da `fw_manage_config: true` gesetzt ist, werden direkte Änderungen in `/etc/ipt-firewall/` beim nächsten Ansible-Run überschrieben. Als zusätzliche -Absicherung kann eine kurze Warnung oben in die Config-Dateien geschrieben -werden — das erledigt Ansible automatisch über den `{{ ansible_managed }}`-Kommentar -am Anfang jedes generierten Templates: +Absicherung enthält jede von Ansible generierte Config-Datei oben folgenden +Hinweis (via `{{ ansible_managed }}`): -```bash +``` # Ansible managed # DO NOT EDIT - changes will be overwritten on the next Ansible run. -# Edit host_vars//ipt-server.yml instead. +# Edit host_vars/${HOSTNAME}/ipt-server.yml instead. ``` --- diff --git a/roles/ipt-server/README.md b/roles/ipt-server/README.md index a49bc5c..374c3de 100644 --- a/roles/ipt-server/README.md +++ b/roles/ipt-server/README.md @@ -42,7 +42,7 @@ roles/ipt-server/ Host-spezifische Konfiguration liegt ausschließlich in: ``` -host_vars//ipt-server.yml +host_vars/${HOSTNAME}/ipt-server.yml ``` --- @@ -53,17 +53,15 @@ host_vars//ipt-server.yml - Host ist im Ansible-Inventory (`hosts`) eingetragen. - SSH-Zugang mit `sudo`-Rechten ist vorhanden. -- `git` ist auf dem Host installiert (wird für keinen anderen Zweck gebraucht — - die Rolle selbst benötigt kein git auf dem Host). ### Schritt 1 — host_vars anlegen ```bash cd /path/to/ansible/oopen-server +HOSTNAME= -# Interfaces und IPs von Hand in die Datei eintragen: -mkdir -p host_vars/ -cat > host_vars//ipt-server.yml << 'EOF' +mkdir -p host_vars/${HOSTNAME} +cat > host_vars/${HOSTNAME}/ipt-server.yml << 'EOF' --- fw_manage_config: true @@ -85,7 +83,9 @@ Für eine vollständige Variablenreferenz: `defaults/main.yml`. ### Schritt 2 — Dry-run ```bash -ansible-playbook ipt-server.yml --limit --check --diff +HOSTNAME= + +ansible-playbook ipt-server.yml --limit ${HOSTNAME} --check --diff ``` Der Diff zeigt genau, welche Dateien angelegt und welche Config-Werte gesetzt @@ -94,7 +94,7 @@ werden. Prüfen, ob Interfaces, IPs und Dienste stimmen. ### Schritt 3 — Scharf stellen ```bash -ansible-playbook ipt-server.yml --limit +ansible-playbook ipt-server.yml --limit ${HOSTNAME} ``` Was passiert: @@ -111,17 +111,19 @@ Was passiert: Alle Änderungen erfolgen ausschließlich in der host_vars-Datei des Hosts: ``` -host_vars//ipt-server.yml +host_vars/${HOSTNAME}/ipt-server.yml ``` Danach: ```bash +HOSTNAME= + # Vorschau: -ansible-playbook ipt-server.yml --limit --check --diff +ansible-playbook ipt-server.yml --limit ${HOSTNAME} --check --diff # Anwenden (ändert Config, startet Firewall bei Änderungen neu): -ansible-playbook ipt-server.yml --limit +ansible-playbook ipt-server.yml --limit ${HOSTNAME} ``` Ansible erkennt automatisch, ob sich eine Config-Datei geändert hat. Nur bei @@ -130,7 +132,7 @@ tatsächlichen Änderungen wird die Firewall neu gestartet. ### Beispiel: HTTP-Server aktivieren ```yaml -# host_vars//ipt-server.yml +# host_vars/${HOSTNAME}/ipt-server.yml fw_http_server_ips: "$ext_ips" # oder konkrete IP ```