Non credo che questo sia possibile ufw
. ufw
è solo un frontend a iptables
cui manca questa funzionalità, quindi un approccio sarebbe quello di creare una voce crontab che verrebbe periodicamente eseguita e verificherà se l'indirizzo IP è cambiato. Se lo ha, lo aggiornerà.
Potresti essere tentato di farlo:
$ iptables -A INPUT -p tcp --src mydomain.dyndns.org --dport 22 -j ACCEPT
Ma questo risolverà il nome host in un IP e lo userà per la regola, quindi se l'IP cambia successivamente questa regola diventerà non valida.
Idea alternativa
È possibile creare uno script in questo modo, chiamato 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
fonte: utilizzo di IPTables con nomi host IP dinamici come dyndns.org
Con questo script salvato è possibile creare una voce crontab come nel file /etc/crontab
:
*/5 * * * * root /etc/iptables_update.bash > /dev/null 2>&1
Questa voce eseguirà quindi lo script ogni 5 minuti, verificando se l'indirizzo IP assegnato al nome host è cambiato. In tal caso, creerà una nuova regola che lo consente, eliminando la vecchia regola per il vecchio indirizzo IP.