From 7db2b7ee9bd1c864f6e2986ed49ce8cfe1b40a4f Mon Sep 17 00:00:00 2001 From: Christoph Date: Sat, 27 Jun 2026 22:23:49 +0200 Subject: [PATCH] Update ipt-server role: specify hosts in ipt-server.yml and add configuration for cloud-01.oopen.de --- host_vars/cloud-01.oopen.de/ipt-server.yml | 33 +++++++++ ipt-server.yml | 2 +- roles/ipt-server/MIGRATION.md | 79 ++++++++++++---------- 3 files changed, 76 insertions(+), 38 deletions(-) create mode 100644 host_vars/cloud-01.oopen.de/ipt-server.yml diff --git a/host_vars/cloud-01.oopen.de/ipt-server.yml b/host_vars/cloud-01.oopen.de/ipt-server.yml new file mode 100644 index 0000000..efa8b1e --- /dev/null +++ b/host_vars/cloud-01.oopen.de/ipt-server.yml @@ -0,0 +1,33 @@ +--- +# ipt-firewall configuration for cloud-01.oopen.de +# Generated by extract-fw-host-vars.py - review before committing! +# Place in: host_vars//ipt_firewall.yml + +# --- Network +fw_ext_interfaces: + - "eth0" +fw_ext_ips_v4: + - "162.55.82.74" +fw_ext_ips_v6: + - "2a01:4f8:271:1266::74" + +# --- Munin +munin_remote_ipv4: 37.27.121.227 +munin_remote_ipv6: "2a01:4f9:3070:2bda::227" + +# --- HTTP +fw_http_server_ips: $ext_1_ip + +# --- Mail +fw_mail_client_ips: $ext_1_ip + +# --- Jitsi +fw_jitsi_tcp_ports: $standard_jitsi_tcp_ports +fw_jitsi_udp_port_range: $standard_jitsi_udp_port_range + +# --- Block +fw_blocked_ips: 222.184.0.0/13 61.160.0.0/16 116.8.0.0/14 + +# --- Other +fw_jitsi_tcp_ports_out: "$standard_turn_service_ports,4443,4444,4445,4446" +fw_jitsi_udp_ports_out: "$standard_http_ports,$standard_turn_service_ports,4443,4444,4445,4446" diff --git a/ipt-server.yml b/ipt-server.yml index 8d346a4..7576b79 100644 --- a/ipt-server.yml +++ b/ipt-server.yml @@ -1,5 +1,5 @@ --- -- hosts: all +- hosts: oopen_server:warenform_server:!no_ipt_firewall roles: - ipt-server diff --git a/roles/ipt-server/MIGRATION.md b/roles/ipt-server/MIGRATION.md index 0e15a54..1ab20c5 100644 --- a/roles/ipt-server/MIGRATION.md +++ b/roles/ipt-server/MIGRATION.md @@ -77,50 +77,28 @@ bleiben unangetastet. --- -## Schritt 3 — Verifizieren: sind die Rules identisch? +## Schritt 3 — Aktuellen Stand einfrieren -Dieser Schritt prüft, ob ein Neustart der Firewall mit den neuen Skripten und -den bestehenden Config-Dateien exakt dieselben iptables-Rules erzeugt wie aktuell -geladen. +Bevor Ansible die Config-Dateien überschreibt, wird der aktuelle Zustand der +laufenden Firewall-Rules gesichert. Das ist der Referenzwert für den späteren +Vergleich. ```bash ssh ' - # Aktuellen Stand einfrieren (Timestamps und Zähler normalisieren) 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" \ > /tmp/fw_before_v6.rules - - # Firewall neu starten - systemctl restart ipt-firewall - systemctl restart ip6t-firewall - - # Neuen Stand einfrieren - 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" \ - > /tmp/fw_after_v6.rules - - # Vergleichen - echo "=== IPv4 diff ===" - diff /tmp/fw_before_v4.rules /tmp/fw_after_v4.rules - echo "=== IPv6 diff ===" - diff /tmp/fw_before_v6.rules /tmp/fw_after_v6.rules + echo "Stand gesichert." ' ``` -**Erwartetes Ergebnis:** Beide Diffs sind leer. - -Falls Unterschiede erscheinen: die abweichenden Rules identifizieren, die -entsprechenden Variablen in `host_vars//ipt-server.yml` nachpflegen -und den Diff wiederholen bevor weitergemacht wird. - --- -## Schritt 4 — Ansible als autoritative Quelle freischalten +## Schritt 4 — Ansible als autoritative Quelle freischalten und verifizieren -Erst wenn Schritt 3 erfolgreich war (leere Diffs), wird die Migration abgeschlossen. -Dazu `fw_manage_config: true` in der host_vars-Datei setzen: +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 @@ -132,16 +110,43 @@ fw_ext_interfaces: # ... ``` -Dann erneut ausrollen: +**Vorschau:** Zeigt genau, was in den Config-Dateien geändert wird — hier +sorgfältig prüfen, ob die neuen Werte den alten entsprechen: ```bash -# Vorschau — zeigt jetzt auch die Config-Dateien im Diff: ansible-playbook ipt-server.yml --limit --check --diff +``` -# Anwenden: +**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 ``` +**Verifizieren:** Jetzt die neuen Rules mit dem gesicherten Stand vergleichen: + +```bash +ssh ' + 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" \ + > /tmp/fw_after_v6.rules + echo "=== IPv4 diff ===" + diff /tmp/fw_before_v4.rules /tmp/fw_after_v4.rules + echo "=== IPv6 diff ===" + diff /tmp/fw_before_v6.rules /tmp/fw_after_v6.rules +' +``` + +**Erwartetes Ergebnis:** Beide Diffs sind leer — die Ansible-generierten +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, +erneut ausrollen und den Diff wiederholen. + Ab jetzt: - Ansible überschreibt die vier Config-Dateien bei jedem Run aus den Templates. - Bei Änderungen an Templates oder host_vars wird die Firewall automatisch @@ -191,9 +196,9 @@ am Anfang jedes generierten Templates: | Schritt | Befehl / Aktion | Wann | |---|---|---| -| 1 | `extract-fw-host-vars.py` ausführen | Einmalig pro Host | -| 2 | `ansible-playbook ... --check --diff` + ausrollen | Einmalig pro Host | -| 3 | iptables-Rules vergleichen (vor/nach Restart) | Einmalig pro Host | -| 4 | `fw_manage_config: true` setzen + ausrollen | Einmalig pro Host | +| 1 | `extract-fw-host-vars.py` ausführen, Ergebnis prüfen | Einmalig pro Host | +| 2 | Erste Ausrollung (Safety-Guard aktiv) — Skripte + Units | Einmalig pro Host | +| 3 | Aktuellen Rules-Stand auf dem Host sichern | Einmalig pro Host | +| 4 | `fw_manage_config: true` + `--check --diff` + ausrollen + Rules vergleichen | Einmalig pro Host | | 5 | Alte Rolle deaktivieren, git-Repo auf Host entfernen | Einmalig pro Host | | — | Änderungen: host_vars editieren + `ansible-playbook` | Ab jetzt immer so |