How2-Tipps

UFW-Firewall und Domains: Wie du Domainnamen trotzdem nutzen kannst

UFW basiert intern auf `iptables` (bzw. `nftables`) und arbeitet auf der Netzwerkebene, wo nur IP-Adressen eine Rolle spielen.

1 min Lesezeit
UFW-Firewall und Domains: Wie du Domainnamen trotzdem nutzen kannst

Die Uncomplicated Firewall (kurz UFW) ist unter Linux ein beliebtes Tool, um Firewalleinstellungen einfach zu verwalten. Doch eine Frage taucht immer wieder auf:

Kann UFW auch mit Domainnamen wie example.com arbeiten – oder nur mit IP-Adressen?

Die kurze Antwort lautet leider: Nein, UFW unterstützt keine Domainnamen. Aber keine Sorge – in diesem Artikel zeige ich dir, warum das so ist und wie du mit einem cleveren Bash-Skript trotzdem dynamische Domain-Zugriffe verwalten kannst.

Warum keine Domainnamen?

UFW basiert intern auf iptables (bzw. nftables) und arbeitet auf der Netzwerkebene, wo nur IP-Adressen eine Rolle spielen. Domainnamen sind eine Sache der Anwendungsebene und müssen über DNS aufgelöst werden. Doch UFW selbst kann das nicht automatisch oder dynamisch – es würde:

  • nur einmal auflösen (z. B. beim Hinzufügen der Regel),
  • keine IP-Änderungen später mitbekommen,
  • fehlschlagen, wenn die Domain mehrere IPs oder IPv6-Adressen liefert.

Versuchst du also Folgendes:

``bash sudo ufw allow from example.com ``

… dann schlägt das fehl oder tut nichts Sinnvolles.

Die Lösung: Ein Bash-Skript, das Domains regelmäßig in IPs umwandelt

Um UFW trotzdem mit Domains „kompatibel“ zu machen, kannst du dir ein kleines Hilfsskript bauen, das:

  • regelmäßig die IPs einer oder mehrerer Domains auflöst,
  • alte Regeln entfernt,
  • neue IPs als UFW-Regeln einträgt – inkl. Kommentar zur Nachverfolgung.

🔧 Das Skript: ufw-dns-allow.sh

```bash #!/bin/bash

-----------------------------

Konfiguration

-----------------------------

DOMAINS=( "example.com" "sub.domain.net" ) PORT=443 PROTO="tcp" TAG="ufw-dns-auto"

-----------------------------

Funktion: IPs für Domain holen

-----------------------------

resolve_ips() { local domain="$1" dig +short "$domain" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' }

-----------------------------

Alte Regeln mit TAG entfernen

-----------------------------

clear_old_rules() { ufw status numbered | grep "$TAG" | awk -F'[][]' '{print $2}' | tac | while read -r rule_num; do echo "Lösche Regel $rule_num ($TAG)" yes | ufw delete "$rule_num" done }

-----------------------------

Neue Regeln hinzufügen

-----------------------------

add_new_rules() { for domain in "${DOMAINS[@]}"; do echo "Bearbeite Domain: $domain" for ip in $(resolve_ips "$domain"); do echo "Erlaube Zugriff von $ip für Port $PORT/$PROTO ($domain)" ufw allow from "$ip" to any port "$PORT" proto "$PROTO" comment "$TAG $domain" done done }

-----------------------------

Hauptlogik

-----------------------------

echo "== UFW-DNS-Auto == ($(date))" clear_old_rules add_new_rules echo "== Fertig ==" ```

Einrichtung

  1. Speichere das Skript:

``bash sudo nano /usr/local/bin/ufw-dns-allow.sh ``

Füge den oben stehenden Code ein.

  1. Ausführbar machen:

``bash sudo chmod +x /usr/local/bin/ufw-dns-allow.sh ``

  1. Testen:

``bash sudo /usr/local/bin/ufw-dns-allow.sh ``

  1. Automatisch regelmäßig ausführen (per Cron):

``bash sudo crontab -e ``

Dann z. B.:

`` 0 /usr/local/bin/ufw-dns-allow.sh ``

Führt das Skript jede Stunde aus und hält die IP-Liste aktuell.

Vorteile

  • Keine veralteten IP-Regeln
  • Keine manuelle Auflösung nötig
  • Perfekt für APIs, CDNs oder dynamische Ziele
  • Volle Kontrolle durch Kommentare (ufw status)

Fazit

Auch wenn UFW keine Domainnamen direkt versteht – mit einem kleinen Script wird aus der Schwäche eine Stärke. Du kannst so gezielt Zugriffe erlauben, etwa:

  • nur von api.example.com auf Port 443,
  • oder bestimmte Cloud-Dienste (z. B. hook.integromat.com) zulassen.