我认为不可能做到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与dyndns.org等动态IP主机名一起使用
保存此脚本后,您可以在文件中创建一个crontab条目,如下所示/etc/crontab
:
*/5 * * * * root /etc/iptables_update.bash > /dev/null 2>&1
然后,该条目将每5分钟运行一次脚本,检查分配给主机名的IP地址是否已更改。如果是这样,它将在删除旧IP地址的旧规则的同时创建允许它的新规则。