Hetzner Cloud Firewall automatisch mit dynamischer IP aktualisieren

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?

  1. 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.
  2. IP-Vergleich:
    Es prüft, ob sich die IP-Adresse seit dem letzten Lauf geändert hat.
  3. 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.
  4. 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

  1. Skript aus dem GitHub-Repo herunterladen:
    https://github.com/example/hetzner-firewall-auto-updater
  2. API-Token und Firewall-ID in einer .env-Datei hinterlegen.
  3. 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

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.