Refactor ipt-server role: update migration and README for hostname variable usage; remove obsolete ipt-server.yml for cloud-01.oopen.de

This commit is contained in:
2026-06-27 22:38:12 +02:00
parent 7db2b7ee9b
commit f149b09892
3 changed files with 41 additions and 31 deletions
@@ -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! # Generated by extract-fw-host-vars.py - review before committing!
# Place in: host_vars/<hostname>/ipt_firewall.yml # Place in: host_vars/<hostname>/ipt_firewall.yml
+26 -18
View File
@@ -15,7 +15,7 @@ Das alte Verfahren:
- Änderungen direkt in `/etc/ipt-firewall/` auf dem Host. - Änderungen direkt in `/etc/ipt-firewall/` auf dem Host.
Das neue Verfahren: Das neue Verfahren:
- Alle Firewall-Einstellungen liegen in `host_vars/<hostname>/ipt-server.yml`. - Alle Firewall-Einstellungen liegen in `host_vars/${HOSTNAME}/ipt-server.yml`.
- Ansible deployt die Config-Dateien aus Jinja2-Templates. - Ansible deployt die Config-Dateien aus Jinja2-Templates.
- Direktes Editieren auf dem Host ist nicht mehr vorgesehen. - 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 ```bash
cd /path/to/ansible/oopen-server cd /path/to/ansible/oopen-server
HOSTNAME=<hostname>
./extract-fw-host-vars.py <hostname> --sudo \ ./extract-fw-host-vars.py ${HOSTNAME} --sudo \
-o host_vars/<hostname>/ipt-server.yml -o host_vars/${HOSTNAME}/ipt-server.yml
``` ```
Das Skript fragt einmalig nach dem `sudo`-Passwort. Das Skript fragt einmalig nach dem `sudo`-Passwort.
@@ -42,7 +43,7 @@ Das Skript fragt einmalig nach dem `sudo`-Passwort.
**Ergebnis prüfen:** **Ergebnis prüfen:**
```bash ```bash
cat host_vars/<hostname>/ipt-server.yml cat host_vars/${HOSTNAME}/ipt-server.yml
``` ```
Kontrollpunkte: Kontrollpunkte:
@@ -65,11 +66,13 @@ installiert:
- Systemd-Units → `/etc/systemd/system/` - Systemd-Units → `/etc/systemd/system/`
```bash ```bash
HOSTNAME=<hostname>
# Vorschau: # Vorschau:
ansible-playbook ipt-server.yml --limit <hostname> --check --diff ansible-playbook ipt-server.yml --limit ${HOSTNAME} --check --diff
# Ausrollen: # Ausrollen:
ansible-playbook ipt-server.yml --limit <hostname> ansible-playbook ipt-server.yml --limit ${HOSTNAME}
``` ```
Die Firewall wird dabei **nicht neu gestartet** — die bestehenden Config-Dateien 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. Vergleich.
```bash ```bash
ssh <hostname> ' HOSTNAME=<hostname>
ssh ${HOSTNAME} '
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" \
@@ -101,7 +106,7 @@ Jetzt wird `fw_manage_config: true` gesetzt, damit Ansible die vier
host-spezifischen Config-Dateien aus den Templates schreibt: host-spezifischen Config-Dateien aus den Templates schreibt:
```yaml ```yaml
# host_vars/<hostname>/ipt-server.yml # host_vars/${HOSTNAME}/ipt-server.yml
--- ---
fw_manage_config: true # ← hinzufügen / auf true setzen 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: sorgfältig prüfen, ob die neuen Werte den alten entsprechen:
```bash ```bash
ansible-playbook ipt-server.yml --limit <hostname> --check --diff HOSTNAME=<hostname>
ansible-playbook ipt-server.yml --limit ${HOSTNAME} --check --diff
``` ```
**Anwenden:** Ansible schreibt die neuen Config-Dateien und startet die Firewall **Anwenden:** Ansible schreibt die neuen Config-Dateien und startet die Firewall
automatisch neu (da sich die Dateien geändert haben): automatisch neu (da sich die Dateien geändert haben):
```bash ```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: **Verifizieren:** Jetzt die neuen Rules mit dem gesicherten Stand vergleichen:
```bash ```bash
ssh <hostname> ' ssh ${HOSTNAME} '
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_after_v4.rules > /tmp/fw_after_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" \
@@ -144,7 +151,7 @@ Config-Dateien produzieren exakt dieselben Rules wie die bisher händisch
verwalteten. verwalteten.
Falls Unterschiede erscheinen: die abweichenden Rules identifizieren, die Falls Unterschiede erscheinen: die abweichenden Rules identifizieren, die
entsprechenden Variablen in `host_vars/<hostname>/ipt-server.yml` nachpflegen, entsprechenden Variablen in `host_vars/${HOSTNAME}/ipt-server.yml` nachpflegen,
erneut ausrollen und den Diff wiederholen. erneut ausrollen und den Diff wiederholen.
Ab jetzt: 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: benötigt. Es kann entfernt werden:
```bash ```bash
ssh <hostname> 'rm -rf /usr/local/src/ipt-server' HOSTNAME=<hostname>
ssh ${HOSTNAME} 'rm -rf /usr/local/src/ipt-server'
``` ```
Vorher prüfen, ob das Verzeichnis noch anderweitig verwendet wird. 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 Da `fw_manage_config: true` gesetzt ist, werden direkte Änderungen in
`/etc/ipt-firewall/` beim nächsten Ansible-Run überschrieben. Als zusätzliche `/etc/ipt-firewall/` beim nächsten Ansible-Run überschrieben. Als zusätzliche
Absicherung kann eine kurze Warnung oben in die Config-Dateien geschrieben Absicherung enthält jede von Ansible generierte Config-Datei oben folgenden
werden — das erledigt Ansible automatisch über den `{{ ansible_managed }}`-Kommentar Hinweis (via `{{ ansible_managed }}`):
am Anfang jedes generierten Templates:
```bash ```
# Ansible managed # Ansible managed
# DO NOT EDIT - changes will be overwritten on the next Ansible run. # DO NOT EDIT - changes will be overwritten on the next Ansible run.
# Edit host_vars/<hostname>/ipt-server.yml instead. # Edit host_vars/${HOSTNAME}/ipt-server.yml instead.
``` ```
--- ---
+14 -12
View File
@@ -42,7 +42,7 @@ roles/ipt-server/
Host-spezifische Konfiguration liegt ausschließlich in: Host-spezifische Konfiguration liegt ausschließlich in:
``` ```
host_vars/<hostname>/ipt-server.yml host_vars/${HOSTNAME}/ipt-server.yml
``` ```
--- ---
@@ -53,17 +53,15 @@ host_vars/<hostname>/ipt-server.yml
- Host ist im Ansible-Inventory (`hosts`) eingetragen. - Host ist im Ansible-Inventory (`hosts`) eingetragen.
- SSH-Zugang mit `sudo`-Rechten ist vorhanden. - 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 ### Schritt 1 — host_vars anlegen
```bash ```bash
cd /path/to/ansible/oopen-server cd /path/to/ansible/oopen-server
HOSTNAME=<hostname>
# Interfaces und IPs von Hand in die Datei eintragen: mkdir -p host_vars/${HOSTNAME}
mkdir -p host_vars/<hostname> cat > host_vars/${HOSTNAME}/ipt-server.yml << 'EOF'
cat > host_vars/<hostname>/ipt-server.yml << 'EOF'
--- ---
fw_manage_config: true fw_manage_config: true
@@ -85,7 +83,9 @@ Für eine vollständige Variablenreferenz: `defaults/main.yml`.
### Schritt 2 — Dry-run ### Schritt 2 — Dry-run
```bash ```bash
ansible-playbook ipt-server.yml --limit <hostname> --check --diff HOSTNAME=<hostname>
ansible-playbook ipt-server.yml --limit ${HOSTNAME} --check --diff
``` ```
Der Diff zeigt genau, welche Dateien angelegt und welche Config-Werte gesetzt 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 ### Schritt 3 — Scharf stellen
```bash ```bash
ansible-playbook ipt-server.yml --limit <hostname> ansible-playbook ipt-server.yml --limit ${HOSTNAME}
``` ```
Was passiert: Was passiert:
@@ -111,17 +111,19 @@ Was passiert:
Alle Änderungen erfolgen ausschließlich in der host_vars-Datei des Hosts: Alle Änderungen erfolgen ausschließlich in der host_vars-Datei des Hosts:
``` ```
host_vars/<hostname>/ipt-server.yml host_vars/${HOSTNAME}/ipt-server.yml
``` ```
Danach: Danach:
```bash ```bash
HOSTNAME=<hostname>
# Vorschau: # Vorschau:
ansible-playbook ipt-server.yml --limit <hostname> --check --diff ansible-playbook ipt-server.yml --limit ${HOSTNAME} --check --diff
# Anwenden (ändert Config, startet Firewall bei Änderungen neu): # Anwenden (ändert Config, startet Firewall bei Änderungen neu):
ansible-playbook ipt-server.yml --limit <hostname> ansible-playbook ipt-server.yml --limit ${HOSTNAME}
``` ```
Ansible erkennt automatisch, ob sich eine Config-Datei geändert hat. Nur bei 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 ### Beispiel: HTTP-Server aktivieren
```yaml ```yaml
# host_vars/<hostname>/ipt-server.yml # host_vars/${HOSTNAME}/ipt-server.yml
fw_http_server_ips: "$ext_ips" # oder konkrete IP fw_http_server_ips: "$ext_ips" # oder konkrete IP
``` ```