
Die Linux Kernel Firewall iptables unterstützt keine FQDN und DDNS Namen in den Ketten, deshalb habe ich hierfür ein einfaches Script erstellt, dieses ein DDNS A Record auflöst und die IPv4 Adresse in die Kette als append chain einfügt.
#!/bin/sh
iptables="/etc/sysconfig/iptables"
sed -i '/#DDNSIP/d' $iptables
lookup="$(grep -i "#MyDDNS" $iptables)"
select=( $lookup )
ddns="${select[2]}"
echo $select $ddns
ip="$(host $ddns)"
if [ "$ip" == "${ip%% has address *}" ]; then
continue;
fi
ip="${ip##* has address }"
sed -i 's/^\('"$lookup"'\)$/\1\n-A RH-Firewall-1-INPUT -i eth0 -p udp -m udp -s '"$ip"' -m comment --comment #DDNSIP -j ACCEPT/' $iptables
service iptables restart
Dieses Shell Skript ist auf einem CentOS geschrieben, ist aber mit kleinen Änderungen auf anderen Linux distributionen einsetzbar, bei Zeile 3 wird der entsprechende Pfad zu iptables angepasst, z.B. für Debian /etc/defaut.
Das Commad host ist Teil der BIND-Dienstprogramme, sodass diese installiert sein müssen. Dazu führt man folgende yum Installation auf der Console aus, um die BIND-Dienstprogramme zu installieren:
sudo yum -y install bind-utils
Es wird eine Zeile mit dem DDNS-Hostnamen in die Konfigurationsdatei iptables eingetragen, der Tag #MyDDNS dient als Marke und muss in der Konfigurationsdatei iptables eingetragen werden:
#Allow from myhost.dyndns.org #MyDDNS
-A RH-Firewall-1-INPUT -i eth0 -p udp -m udp -s 123.456.789.101 -m comment --comment #DDNSIP -j ACCEPT
Die Kette wird mit Parameter -A (Append) automatisch bei der ersten ausführung angehängt. Nicht zu vergessen ist, das Script ausführbar machen:
chmod +x /usr/bin/allow_myhost.sh
Die Quellen IP-Adresse wird automatisch alle 15 Minuten aufgelöst. Die iptables-Kette erlaubt das UDP Protokoll, dieses beispielsweise einem IP-Telefon ermöglicht mit der PBX zu kommunizieren. Die Regel kann beliebig angepasst werden, wobei die Kommentar option –comment vorhanden sein muss.
Für die kontinuierliche Aktualisierung erstellt man ein Cron-Job:
*/15 * * * * root /usr/bin/allow_myhost.sh >/dev/null 2>&1
Dieser Beitrag ist auch auf gist donkey/allow_myhost.md