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.
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
cron
que se ejecute periódicamente solo.LOGFILE=$HOME/ufw.log
paraLOGFILE=$HOME/ufw.$HOSTNAME.log
permitir 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