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
เมื่อบันทึกสคริปต์นี้แล้วคุณสามารถสร้างรายการ crontab ในไฟล์ได้/etc/crontab
ดังนี้
*/5 * * * * root /etc/iptables_update.bash > /dev/null 2>&1
รายการนี้จะเรียกใช้สคริปต์ทุก 5 นาทีตรวจสอบเพื่อดูว่าที่อยู่ IP ที่กำหนดให้กับชื่อโฮสต์มีการเปลี่ยนแปลง ถ้าเป็นเช่นนั้นมันจะสร้างกฎใหม่ที่อนุญาตในขณะที่การลบกฎเก่าสำหรับที่อยู่ IP เก่า