Security

UFW:僅允許來自具有動態 IP 地址的域的流量

  • January 30, 2022

我執行一個 VPS,我想使用 UFW 保護它,只允許連接到埠 80。但是,為了能夠遠端管理它,我需要保持埠 22 開放並使其可以從家裡訪問。

我知道可以將 UFW 配置為僅允許從特定 IP 地址連接到埠:

ufw allow proto tcp from 123.123.123.123 to any port 22

但是我的 IP 地址是動態的,所以這還不是解決方案。

問題是:我使用 DynDNS 進行動態 DNS 解析,那麼是否可以使用域而不是 IP 創建規則?

我已經嘗試過了:

ufw allow proto tcp from mydomain.dyndns.org to any port 22

但我得到了ERROR: Bad source address

我不相信這是可能的ufwufw只是一個前端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

來源:使用帶有動態 IP 主機名的 IPTables,如 dyndns.org

保存此腳本後,您可以在文件中創建一個 crontab 條目,如下所示/etc/crontab

*/5 * * * * root /etc/iptables_update.bash > /dev/null 2>&1

然後,此條目將每 5 分鐘執行一次腳本,檢查分配給主機名的 IP 地址是否已更改。如果是這樣,那麼它將創建一個允許它的新規則,同時刪除舊 IP 地址的舊規則。

引用自:https://unix.stackexchange.com/questions/91701