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:
+1
-1
@@ -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
|
||||||
|
|
||||||
@@ -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
@@ -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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user