Problemstellung
Viele Admins und Home-Server-Betreiber kennen das Problem: Die öffentliche IP-Adresse ihres Internetanschlusses ändert sich regelmäßig, etwa bei DSL- oder Kabelanschlüssen mit dynamischer IP. Wer Server in der Hetzner Cloud betreibt, muss dann die Firewall-Regeln oft manuell anpassen, um den Zugriff über die neue IP zu erlauben. Das ist mühsam und fehleranfällig – hier hilft Automatisierung.
Was macht das Skript?
Unser Skript aktualisiert automatisch die Firewall-Regeln in der Hetzner Cloud, sodass die Zugriffskontrollen immer zur aktuellen, dynamischen IP passen. Damit bleibt der Server sicher erreichbar, ohne dass manuelle Eingriffe nötig sind.
Wie funktioniert das Skript?
- Automatische IP-Erkennung:
Das Skript ermittelt regelmäßig die aktuelle öffentliche IP, z. B. über einen DynDNS-Hostnamen oder externe Dienste wie https://ifconfig.co. - IP-Vergleich:
Es prüft, ob sich die IP-Adresse seit dem letzten Lauf geändert hat. - Firewall-Update:
Bei Änderung sendet das Skript einen API-Request an die Hetzner Cloud, um die Firewall-Regeln auf die neue IP anzupassen. Dabei werden nur die Ports und Protokolle freigegeben, die Sie definiert haben. - Sicher und effizient:
Nur bei tatsächlicher Änderung werden minimal-invasive Updates ausgeführt, was das Risiko von Fehlkonfigurationen minimiert und API-Rate-Limits berücksichtigt.
Technische Details & Beispiel
Beispielhafte API-Anfrage mit cURL
bashcurl -X PUT "https://api.hetzner.cloud/v1/firewalls/${FIREWALL_ID}/rules" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"rules": [
{
"direction": "in",
"source_ips": ["YOUR_CURRENT_IP/32"],
"protocol": "tcp",
"port": "22",
"description": "Auto-updated rule"
}
]
}'
Die API-Route ist PUT https://api.hetzner.cloud/v1/firewalls/{FIREWALL_ID}/rules, mit einem JSON-Payload, der nur die geänderten IP-Adressen enthält.
Beispiel-Python-Skript (Auszug)
import requests
import os
TOKEN = os.getenv("HETZNER_TOKEN")
FIREWALL_ID = os.getenv("FIREWALL_ID")
IP_SERVICE = "https://ifconfig.co"
def get_current_ip():
return requests.get(IP_SERVICE).text.strip()
def update_firewall(ip):
url = f"https://api.hetzner.cloud/v1/firewalls/{FIREWALL_ID}/rules"
headers = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
payload = {
"rules": [{
"direction": "in",
"source_ips": [f"{ip}/32"],
"protocol": "tcp",
"port": "22",
"description": "Automatischer Update"
}]
}
response = requests.put(url, json=payload, headers=headers)
print(f"Status: {response.status_code}, Antwort: {response.json()}")
if __name__ == "__main__":
ip = get_current_ip()
update_firewall(ip)
Für wen ist diese Lösung geeignet?
- Betreiber von Servern in der Hetzner Cloud mit dynamischen öffentlichen IP-Adressen
- Admins, die sich manuelle Firewall-Anpassungen ersparen wollen
- Ideal für Home-Lab, kleine Büros oder Einzel-VM-Setups
- Nicht als alleiniger Schutz für produktive Systeme ohne zusätzliche Security (z. B. VPN, MFA)
Voraussetzungen:
- API-Token mit Firewall-Zugriffsrechten
- DynDNS oder zuverlässiger IP-Check-Service
- Cron oder Systemd-Timer für regelmäßige Ausführung
Installation und Automatisierung
- Skript aus dem GitHub-Repo herunterladen:
https://github.com/example/hetzner-firewall-auto-updater - API-Token und Firewall-ID in einer
.env-Datei hinterlegen. - Cronjob einrichten, z. B. alle 5 Minuten:
*/5 * * * * /usr/bin/python3 /pfad/zum/script/updater.py >> /var/log/fw-update.log 2>&1
Alternativ kann ein systemd-Timer verwendet werden.
Sicherheitshinweise
- API-Token sicher und mit Least-Privilege-Prinzip aufbewahren
- Firewall-Regeln nur soweit öffnen wie nötig
- IP-Änderungen und Skriptläufe regelmäßig überwachen (Logs, Alerts)
- Backup-lösung für Firewall-Regeln einplanen
- Rate-Limitierung der API beachten und Errors behandeln
Troubleshooting
Firewall wird nicht aktualisiert:
- Prüfen, ob das Skript läuft (Cronjob/Systemd-Timer aktiv)
- API-Token und Firewall-ID auf korrekte Werte prüfen
- API-Antworten mit Fehlercodes in Logs analysieren
Rate-Limit-Fehler (HTTP 429):
- Skript-Ausführungsintervall erhöhen
- Backoff-Mechanismen implementieren
IP-Wechsel wird nicht erkannt:
- Prüfen, ob die aktuelle IP richtig abgefragt und gespeichert wird
- Schreibrechte für Speicherort sicherstellen
Weiterführende Links
Interesse an Support oder individueller Lösung?
Besuchen Sie unsere Kontaktseite oder schreiben Sie eine E-Mail an support@admin-intelligence.de. Wir helfen Ihnen gern weiter.
Weitere spannende Beiträge zum Thema Server-Administration finden Sie in unserem Admin Intelligence Blog.