Update ipt-server role: specify hosts in ipt-server.yml and add configuration for cloud-01.oopen.de

This commit is contained in:
2026-06-27 22:23:49 +02:00
parent 5a98895b66
commit 7db2b7ee9b
3 changed files with 76 additions and 38 deletions
@@ -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/<hostname>/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"
+1 -1
View File
@@ -1,5 +1,5 @@
--- ---
- hosts: all - hosts: oopen_server:warenform_server:!no_ipt_firewall
roles: roles:
- ipt-server - ipt-server
+42 -37
View File
@@ -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 Bevor Ansible die Config-Dateien überschreibt, wird der aktuelle Zustand der
den bestehenden Config-Dateien exakt dieselben iptables-Rules erzeugt wie aktuell laufenden Firewall-Rules gesichert. Das ist der Referenzwert für den späteren
geladen. Vergleich.
```bash ```bash
ssh <hostname> ' ssh <hostname> '
# Aktuellen Stand einfrieren (Timestamps und Zähler normalisieren)
iptables-save | grep -v "^#" | sed "s/\[[0-9]*:[0-9]*\]/[0:0]/g" \ iptables-save | grep -v "^#" | sed "s/\[[0-9]*:[0-9]*\]/[0:0]/g" \
> /tmp/fw_before_v4.rules > /tmp/fw_before_v4.rules
ip6tables-save | grep -v "^#" | sed "s/\[[0-9]*:[0-9]*\]/[0:0]/g" \ ip6tables-save | grep -v "^#" | sed "s/\[[0-9]*:[0-9]*\]/[0:0]/g" \
> /tmp/fw_before_v6.rules > /tmp/fw_before_v6.rules
echo "Stand gesichert."
# 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
' '
``` ```
**Erwartetes Ergebnis:** Beide Diffs sind leer.
Falls Unterschiede erscheinen: die abweichenden Rules identifizieren, die
entsprechenden Variablen in `host_vars/<hostname>/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. Jetzt wird `fw_manage_config: true` gesetzt, damit Ansible die vier
Dazu `fw_manage_config: true` in der host_vars-Datei setzen: host-spezifischen Config-Dateien aus den Templates schreibt:
```yaml ```yaml
# host_vars/<hostname>/ipt-server.yml # host_vars/<hostname>/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 ```bash
# Vorschau — zeigt jetzt auch die Config-Dateien im Diff:
ansible-playbook ipt-server.yml --limit <hostname> --check --diff ansible-playbook ipt-server.yml --limit <hostname> --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 <hostname> ansible-playbook ipt-server.yml --limit <hostname>
``` ```
**Verifizieren:** Jetzt die neuen Rules mit dem gesicherten Stand vergleichen:
```bash
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" \
> /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/<hostname>/ipt-server.yml` nachpflegen,
erneut ausrollen und den Diff wiederholen.
Ab jetzt: Ab jetzt:
- Ansible überschreibt die vier Config-Dateien bei jedem Run aus den Templates. - Ansible überschreibt die vier Config-Dateien bei jedem Run aus den Templates.
- Bei Änderungen an Templates oder host_vars wird die Firewall automatisch - Bei Änderungen an Templates oder host_vars wird die Firewall automatisch
@@ -191,9 +196,9 @@ am Anfang jedes generierten Templates:
| Schritt | Befehl / Aktion | Wann | | Schritt | Befehl / Aktion | Wann |
|---|---|---| |---|---|---|
| 1 | `extract-fw-host-vars.py` ausführen | Einmalig pro Host | | 1 | `extract-fw-host-vars.py` ausführen, Ergebnis prüfen | Einmalig pro Host |
| 2 | `ansible-playbook ... --check --diff` + ausrollen | Einmalig pro Host | | 2 | Erste Ausrollung (Safety-Guard aktiv) — Skripte + Units | Einmalig pro Host |
| 3 | iptables-Rules vergleichen (vor/nach Restart) | Einmalig pro Host | | 3 | Aktuellen Rules-Stand auf dem Host sichern | Einmalig pro Host |
| 4 | `fw_manage_config: true` setzen + ausrollen | 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 | | 5 | Alte Rolle deaktivieren, git-Repo auf Host entfernen | Einmalig pro Host |
| — | Änderungen: host_vars editieren + `ansible-playbook` | Ab jetzt immer so | | — | Änderungen: host_vars editieren + `ansible-playbook` | Ab jetzt immer so |