Nie sądzę, aby było to możliwe ufw
. ufw
jest tylko nakładką, iptables
której również brakuje tej funkcji, więc jednym z podejść byłoby utworzenie wpisu pliku crontab, który okresowo uruchamiałby się i sprawdzał, czy adres IP się zmienił. Jeśli tak, zaktualizuje go.
Możesz mieć ochotę to zrobić:
$ iptables -A INPUT -p tcp --src mydomain.dyndns.org --dport 22 -j ACCEPT
Ale to rozwiąże nazwę hosta na adres IP i użyje go w regule, więc jeśli adres IP później się zmieni, reguła stanie się nieważna.
Alternatywny pomysł
Możesz stworzyć taki skrypt, tzw iptables_update.bash
.
#!/bin/bash
#allow a dyndns name
HOSTNAME=HOST_NAME_HERE
LOGFILE=LOGFILE_NAME_HERE
Current_IP=$(host $HOSTNAME | cut -f4 -d' ')
if [ $LOGFILE = "" ] ; then
iptables -I INPUT -i eth1 -s $Current_IP -j ACCEPT
echo $Current_IP > $LOGFILE
else
Old_IP=$(cat $LOGFILE)
if [ "$Current_IP" = "$Old_IP" ] ; then
echo IP address has not changed
else
iptables -D INPUT -i eth1 -s $Old_IP -j ACCEPT
iptables -I INPUT -i eth1 -s $Current_IP -j ACCEPT
/etc/init.d/iptables save
echo $Current_IP > $LOGFILE
echo iptables have been updated
fi
fi
źródło: Używanie IPTables z dynamicznymi nazwami hostów IP, takimi jak dyndns.org
Po zapisaniu tego skryptu możesz utworzyć wpis pliku crontab w pliku /etc/crontab
:
*/5 * * * * root /etc/iptables_update.bash > /dev/null 2>&1
Wpis ten uruchamiałby następnie skrypt co 5 minut, sprawdzając, czy adres IP przypisany do nazwy hosta się zmienił. Jeśli tak, to utworzy nową regułę, pozwalając na to, jednocześnie usuwając starą regułę dla starego adresu IP.
Current_IP=$(host $HOSTNAME | cut -f4 -d' ')
naCurrent_IP=$(host $HOSTNAME | head -n1 | cut -f4 -d ' ')
Wiem, że to stare, ale natknąłem się na to i ostatecznie skończyłem z tym rozwiązaniem, które wydaje się jeszcze lepsze, ponieważ nie jest potrzebny plik dziennika i bardzo łatwo można dodać dodatkowe hosty w razie potrzeby. Działa jak marzenie!
Źródło: http://rdstash.blogspot.ch/2013/09/allow-host-with-dynamic-ip-through.html
źródło
Na podstawie poprzednich odpowiedzi zaktualizowałem następujący skrypt bash, który działa na Debian Jessie
źródło
cron
okresowo działało samodzielnie.LOGFILE=$HOME/ufw.log
abyLOGFILE=$HOME/ufw.$HOSTNAME.log
zezwalać na uruchamianie więcej niż jednego skryptu w tym samym czasieNa podstawie wszystkich odpowiedzi, zanim je połączyłem. Plik dziennika nie jest wymagany. Testowane na Ubuntu 18.04
Możesz dodać port do reguł za pomocą parametru „port”. na przykład:
źródło