Я не вірю, що це можливо ufw
. ufw
це лише фронтенд, до iptables
якого також не вистачає цієї функції, тому одним із підходів було б створити запис crontab, який періодично запускався і перевіряв би, чи змінилася IP-адреса. Якщо він є, він оновить його.
Вас може спокусити це зробити:
$ iptables -A INPUT -p tcp --src mydomain.dyndns.org --dport 22 -j ACCEPT
Але це дозволить вирішити ім'я хоста для IP та використовувати його для правила, тому, якщо IP пізніше зміниться, це правило стане недійсним.
Альтернативна ідея
Ви можете створити сценарій , як це так, називається, 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
джерело: Використання IPTables з динамічними іменами хостів IP, як dyndns.org
За допомогою цього збереженого скрипту ви можете створити запис із записом на кронтабі, як у файлі /etc/crontab
:
*/5 * * * * root /etc/iptables_update.bash > /dev/null 2>&1
Потім цей запис буде виконувати сценарій кожні 5 хвилин, перевіряючи, чи змінилася IP-адреса, призначена імені хоста. Якщо так, то воно створить нове правило, що дозволяє йому, при цьому видаляючи старе правило для старої IP-адреси.