Voraussetzungen
Die Methode, die ich hier zeige, wurde auf einem Server mit Ubuntu 20.04. als Betriebssystem implementiert. Die verwendete Firewall ist uncomplicated firewall (UFW), ein benutzerfreundliches Frontend für Iptables. Zudem wird eine (Sub-)Domain benötigt, für dessen A-Eintrag man eine generelle „allow“-Regel in der Firewall installieren möchte. Dies kann entweder eine Domain sein, dessen Eintrag man im Fall der Fälle manuell ändert, oder eine Domain dessen DNS-Eintrag sich automatisch ändert. Beispielsweise von einem DynDNS-Service. In meinem Fall habe ich hierfür eine spezielle subdomain, lifeline.baltic-lab.com. Ich bin schon jetzt gespannt, wie viele DNS-Anfragen ich in den Logs meines DNS-Servers nach dem Posten dieses Artikels finden werde… 🙂
Bash Skript
The installed IP address will be logged to a text file named „example.com.log“ located in /var/log/. If the logfile already exists, the script will compare the IP address retrieved from the DNS record with the already installed rule. If they match, the comment is updated to the current time. That way the functionality can easily be verified by viewing the current firewall rules, for instance by executing the command „ufw status“. In case the IP has changed, the new IP will be installed and the old rule will be removed.
Das Skript fragt zunächst den A-Eintrag der angegebenen Domain ab. Sofern das Skript für die angegebene Domain das erste mal aufgerufen wird, legt es sofort eine „ufw prepend allow“-Regel für die IP-Adresse an. Der „prepend“-Teil stellt sicher, dass die Regel an erster Stelle steht. Das ist wichtig, da UFW die Regeln der Reihenfolge nach abarbeitet und bei der ersten zutreffenden Regel diese ausführt und keine weiteren Regeln zu dem Vorgang mehr bearbeitet. Mit dem „prepend“-Statement wird also sichergestellt, dass die „allow“-Regel auch tatsächlich die erste Regel ist, die von UFW zu der IP gefunden wird. Die IP-Adresse wird dann unter /var/log/example.com.log in einer Textdatei abgelegt. Dabei steht example.com stellvertretend für den tatsächlichen Domainnamen. Bei zukünftigen Aufrufen vergleicht das Skript die aktuelle IP aus dem A-Eintrag mit der IP in der Logdatei. Sofern beide gleich sind, wird lediglich der Kommentar mit dem aktuellen Datum und der Uhrzeit aktualisiert. Hierdurch kann man sich durch einen Blick in die aktuellen Firewall-Regeln jederzeit vergewissern, dass das Skript auch brav im Hintergrund seine Arbeit macht. Sofern sich die IP-Adresse zwischenzeitlich geändert hat, legt das Skript eine neue „ufw allow prepend“-Regel an und löscht die Regel mit der alten IP. Die neue IP wird dann natürlich auch noch in der Log-Datei hinterlegt.
#!/bin/bash
HOSTNAME=lifeline.example.com
LOGFILE=/var/log/$HOSTNAME.log
Time=$(date '+%d/%m/%Y %H:%M:%S');
Current_IP=$(host $HOSTNAME | tail -n1 | cut -f4 -d ' ')
if [ $LOGFILE = "" ] ; then
ufw prepend allow from $Current_IP comment 'lifeline.example.com'
echo $Current_IP > $LOGFILE
else
Old_IP=$(cat $LOGFILE)
if [ "$Current_IP" = "$Old_IP" ] ; then
ufw allow from $Current_IP comment "lifeline.example.com (Validated: $Time)"
else
ufw delete allow from $Old_IP
ufw prepend allow from $Current_IP comment 'lifeline.example.com'
echo $Current_IP > $LOGFILE
echo Firewall rules for $HOSTNAME have been updated
fi
fi
Damit das Skript eigenständig im Hintergrund seine Arbeit verrichtet muss dieses lediglich in die Crontab-Datei vom User root eingetragen werden. Sofern alles korrekt installiert wurde, kann man durch einen Blick auf „ufw status“ sehen, wie die Regeln dynamisch aktualisiert werden. Ob man das Skript nun benutzt um in seinem eigenen Systemen quasi eine manuelle Hintertür als Vorsichtsmaßnahme gegen eigene Unachtsamkeiten einbaut oder es als nützliches Tool für Zugriffe von Anschlüssen mit dynamischer IP-Adresse verwendet sei jedem selbst überlassen. Sofern man ohnehin eine DynDNS-Domain dem eigenen Internetanschluss zugeordnet hat, so kann man damit zum Beispiel den SSH-Zugang nur vom eigenen Anschluss aus erlauben. Sofern man unterwegs dann doch mal einen Notfall hat und schnell an den Server kommen muss, kann der DNS-Eintrag dann immer noch händisch verändert werden.
S. Westerhold: UFW Firewall Regeln mit (dynamischen) DNS Hostnamen (2025), in: Baltic Labor Blog für Hochfrequenz- und Messtechnik, ISSN (Online): 2751-806X, URL: https://baltic-labor.de/2025/01/ufw-firewall-regeln-mit-dynamischen-dns-hostnamen/ (Stand: 14.01.2025).
- Automatische WebP-Konvertierung ohne Plugin - 14.01.2025
- UFW Firewall Regeln mit (dynamischen) DNS Hostnamen - 14.01.2025
- IP-Adressen hinter Proxy wiederherstellen - 26.12.2024