No creo que esto sea posible con ufw
. ufw
es solo una interfaz a la iptables
que también le falta esta característica, por lo que un enfoque sería crear una entrada crontab que se ejecute periódicamente y verifique si la dirección IP ha cambiado. Si es así, lo actualizará.
Puede sentirse tentado a hacer esto:
$ iptables -A INPUT -p tcp --src mydomain.dyndns.org --dport 22 -j ACCEPT
Pero esto resolverá el nombre de host en una IP y lo usará para la regla, por lo que si la IP cambia más adelante, esta regla dejará de ser válida.
Idea alternativa
Podrías crear un script así, llamado 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
fuente: Uso de IPTables con nombres de host de IP dinámica como dyndns.org
Con este script guardado, podría crear una entrada crontab como esta en el archivo /etc/crontab
:
*/5 * * * * root /etc/iptables_update.bash > /dev/null 2>&1
Esta entrada ejecutaría el script cada 5 minutos, verificando si la dirección IP asignada al nombre de host ha cambiado. Si es así, creará una nueva regla que lo permita, mientras elimina la regla anterior para la antigua dirección IP.