首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新dyndns ip的iptables脚本

更新dyndns ip的iptables脚本
EN

Ask Ubuntu用户
提问于 2021-03-20 15:45:07
回答 1查看 314关注 0票数 0

因此,我有一个ubuntu16.04服务器,我想用ddns iptables规则来保护特定端口。我确实找到了一个脚本,并试图修改它,因为我无法使它发挥作用。该脚本如下:

代码语言:javascript
复制
#!/bin/bash
#allow a dyndns name

HOSTNAME=xxx.ddns.xxx
LOGFILE=/home/ddns/Logs/ddns.log
exec > /home/ddns/Logs/ddns_update.log 2>&1

Current_IP=$(host $HOSTNAME | cut -f4 -d' ')

if [ $LOGFILE = "" ] ; then
  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 -s $Old_IP -p tcp -m tcp --dport 80 -j ACCEPT
    iptables -D INPUT -s $Old_IP -p tcp -m tcp --dport 22 -j ACCEPT
    iptables -D INPUT -s $Old_IP -p tcp -m tcp --dport 4000 -j ACCEPT
    iptables -D INPUT -s $Old_IP -p tcp -m tcp --dport 4001 -j ACCEPT
    iptables -D INPUT -s $Old_IP -p tcp -m tcp --dport 4003 -j ACCEPT
    iptables -D INPUT -s $Old_IP -p tcp -m tcp --dport 4005 -j ACCEPT
    iptables -D INPUT -s $Old_IP -p tcp -m tcp --dport 3000 -j ACCEPT
    iptables -D INPUT -s $Old_IP -p tcp -m tcp --dport 30300 -j ACCEPT
    iptables -A INPUT -p tcp --src $Current_IP --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --src $Current_IP --dport 22 -j ACCEPT
    iptables -A INPUT -p tcp --src $Current_IP --dport 4000 -j ACCEPT
    iptables -A INPUT -p tcp --src $Current_IP --dport 4001 -j ACCEPT
    iptables -A INPUT -p tcp --src $Current_IP --dport 4003 -j ACCEPT
    iptables -A INPUT -p tcp --src $Current_IP --dport 4005 -j ACCEPT
    iptables -A INPUT -p tcp --src $Current_IP --dport 3000 -j ACCEPT
    iptables -A INPUT -p tcp --src $Current_IP --dport 30300 -j ACCEPT
    echo $Current_IP > $LOGFILE
    echo iptables have been updated
   fi
fi

问题是,“旧ip”的规则并没有被删除。我(在日志中)得到的只有:

代码语言:javascript
复制
Bad rule (does a matching rule exist in that chain?).

我对ubuntu和脚本完全是新手,因此我认为,我是在监督脚本的问题。

EN

回答 1

Ask Ubuntu用户

发布于 2021-03-20 17:47:32

我注意到的一件事是,你一次就编辑了很多规则。让我们简单一点。在单独的一组规则中定义您希望“接受”的规则,但随后只需要在输入中添加一项

代码语言:javascript
复制
iptables -N DYN_PORTS_PERMITTED
iptables -A DYN_PORTS_PERMITTED -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A DYN_PORTS_PERMITTED -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A DYN_PORTS_PERMITTED -p tcp -m tcp --dport 4000 -j ACCEPT
iptables -A DYN_PORTS_PERMITTED -p tcp -m tcp --dport 4001 -j ACCEPT
iptables -A DYN_PORTS_PERMITTED -p tcp -m tcp --dport 4002 -j ACCEPT
iptables -A DYN_PORTS_PERMITTED -p tcp -m tcp --dport 4003 -j ACCEPT
iptables -A DYN_PORTS_PERMITTED -p tcp -m tcp --dport 4005 -j ACCEPT
iptables -A DYN_PORTS_PERMITTED -p tcp -m tcp --dport 3000 -j ACCEPT
iptables -A DYN_PORTS_PERMITTED -p tcp -m tcp --dport 30300 -j ACCEPT
iptables -A DYN_PORTS_PERMITTED -j RETURN

这将为替代表中的“DYN_ ports _ called”中接受哪些端口准备规则。

Save您的 iptables rules,以便您有一组基本规则,并将 DYN_PORTS_PERMITTED <#>table保存到可预见的将来。

现在,这一组规则还不一致,我现在有意不使用源IP。因为我们将以不同的方式处理它--在输入表中。

首先,取出INPUT表中的所有独立端口匹配规则。我们不再需要在DYN_PORTS_PERMITTED表中使用它们了。相反,在INPUT表中只有这一条规则:

代码语言:javascript
复制
iptables -A INPUT -s IPADDRESS -j DYN_PORTS_PERMITTED

..。这个规则会说:“如果源IP是我们想要使用的IP地址,那么获取流量并根据DYN_PORTS_PERMITTED表中的规则检查它。

现在,您的脚本将只执行以下操作,而不是处理过多的规则:

代码语言:javascript
复制
iptables -D INPUT -s OldIPAddress -j DYN_PORTS_PERMITTED
iptables -A INPUT -s NewIPAddress -j DYN_PORTS_PERMITTED

只需确保DYN_PORTS_PERMITTED与我所说的规则保持在环境中-这样您就不需要有单独的规则来处理源IP数据,只需要为DYN_PORTS_PERMITTED中的流量定义端口匹配规则。然后,只需在一个输入规则中更改IP地址即可。

在本例中,我假设您有一个默认的DROP输入规则,否则您必须完善您的规则。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1324890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档