- Veröffentlicht am
- • How2-Tipps
UFW-Firewall und Domains: Wie du Domainnamen trotzdem nutzen kannst
- Autor
-
-
- Benutzer
- tmueller
- Beiträge dieses Autors
- Beiträge dieses Autors
-

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:
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
#!/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
Speichere das Skript:
sudo nano /usr/local/bin/ufw-dns-allow.sh
Füge den oben stehenden Code ein.
Ausführbar machen:
sudo chmod +x /usr/local/bin/ufw-dns-allow.sh
Testen:
sudo /usr/local/bin/ufw-dns-allow.sh
Automatisch regelmäßig ausführen (per Cron):
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.