Security
UFW:僅允許來自具有動態 IP 地址的域的流量
我執行一個 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
我不相信這是可能的
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
來源:使用帶有動態 IP 主機名的 IPTables,如 dyndns.org
保存此腳本後,您可以在文件中創建一個 crontab 條目,如下所示
/etc/crontab
:*/5 * * * * root /etc/iptables_update.bash > /dev/null 2>&1
然後,此條目將每 5 分鐘執行一次腳本,檢查分配給主機名的 IP 地址是否已更改。如果是這樣,那麼它將創建一個允許它的新規則,同時刪除舊 IP 地址的舊規則。