Tôi không tin điều này là có thể với ufw
. ufw
chỉ là một lối vào iptables
mà cũng thiếu tính năng này, vì vậy một cách tiếp cận sẽ là tạo một mục crontab sẽ chạy định kỳ và kiểm tra xem địa chỉ IP có thay đổi hay không. Nếu nó có thì nó sẽ cập nhật nó.
Bạn có thể bị cám dỗ để làm điều này:
$ iptables -A INPUT -p tcp --src mydomain.dyndns.org --dport 22 -j ACCEPT
Nhưng điều này sẽ phân giải tên máy chủ thành IP và sử dụng quy tắc đó cho quy tắc, vì vậy nếu sau này IP thay đổi quy tắc này sẽ trở thành không hợp lệ.
Ý tưởng thay thế
Bạn có thể tạo một tập lệnh như vậy, được gọi là 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
nguồn: Sử dụng IPTables với tên máy chủ IP động như dyndns.org
Với tập lệnh này được lưu, bạn có thể tạo một mục crontab như vậy trong tệp /etc/crontab
:
*/5 * * * * root /etc/iptables_update.bash > /dev/null 2>&1
Mục nhập này sau đó sẽ chạy tập lệnh cứ sau 5 phút, kiểm tra xem địa chỉ IP được gán cho tên máy chủ đã thay đổi chưa. Nếu vậy thì nó sẽ tạo ra một quy tắc mới cho phép nó, đồng thời xóa quy tắc cũ cho địa chỉ IP cũ.