No creo que esto sea posible con ufw. ufwes solo una interfaz a la iptablesque 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.
                 
                
                
                 
Current_IP=$(host $HOSTNAME | cut -f4 -d' ')aCurrent_IP=$(host $HOSTNAME | head -n1 | cut -f4 -d ' ')Sé que esto es antiguo, pero lo encontré y terminé con esta solución al final, lo que parece aún mejor porque no se necesita ningún archivo de registro y es muy fácil agregar hosts adicionales según sea necesario. ¡Funciona de maravilla!
Fuente: http://rdstash.blogspot.ch/2013/09/allow-host-with-dynamic-ip-through.html
fuente
Basado en respuestas anteriores, actualicé lo siguiente como script bash que funciona en Debian Jessie
fuente
cronque se ejecute periódicamente solo.LOGFILE=$HOME/ufw.logparaLOGFILE=$HOME/ufw.$HOSTNAME.logpermitir que se ejecute más de un script al mismo tiempoBasado en todas las respuestas antes de combinarlas. No se necesita un archivo de registro. Probado en Ubuntu 18.04
Puede agregar un puerto a las reglas con el parámetro "puerto". p.ej:
fuente