如何更新 iptables 规则,而不是刷新和重写

如何更新 iptables 规则,而不是刷新和重写

目前我正在iptables使用 bash 脚本更新我的规则,我在其中调用命令:

iptables -F

然后我应用规则。

问题是我需要更新规则才能访问端口 80,然后我每 10 分钟在 cron 作业中删除所有内容。因此,每隔 10 分钟我iptables -F就会打电话删除旧规则并打开所有端口(这是我不想要的)。

我不想每 10 分钟刷新一次规则,只需编辑或更新现有规则即可。

答案1

如果有需要定期更新的特定规则,我会将它们放在一个单独的链中,并从INPUT适当的槽中调用该链

iptables -N mychain                # Create new chain "mychain"
iptables -A INPUT mychain          # Insert it into INPUT
iptables -A INPUT …other rules…    # Append other rules as before

现在您可以刷新并添加经常更改的规则,mychain而不影响 中的规则INPUT

iptables -F mychain
iptables -A mychain …rule…
iptables -A mychain …rule…

如果您确实希望将它们作为单个实体添加,就像在事务中一样,您可以创建链,将规则添加到该链,然后将该链插入到 中INPUT,然后立即删除先前的实例。您可能需要为此动态链名称。例如,

chain="mychain_$(date +%s)"    # One second granularity
iptables -N "$chain"           # Create the chain
iptables -A "$chain" …rule…    # and its rules
iptables -A "$chain" …rule…
iptables -A "$chain" …rule…

然后

old=$(iptables -L INPUT | awk '$1 ~ /^mychain_[0-9]+$/ {print $1; exit}')
iptables -I INPUT 1 -j "$chain"    # Add new chain in correct position
if [ -n "$old" ]
then
    iptables -D INPUT -j "$old"    # Remove old chain
    iptables -X "$old"             # Delete it
fi

另一方面,如果您的要求是阻止或允许大量 IP 地址,您最好考虑IP设置

答案2

更换规则是可能的。

这是一个例子:

首先,您可以使用以下命令在顶部(第一个)位置创建规则:

iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

可以指定规则来替换链中现有的规则。

位置 1 给出的第一条规则是允许从任何地方连接到 http 端口(端口 80)。

以下 iptables 命令替换规则,限制仅从网络地址范围 192.168.0.0/24 到标准 http 端口(端口 80)的连接:

iptables -R INPUT 1 -p tcp -s 192.168.0.0/24 --dport 80 -j ACCEPT

因此,您不必删除所有规则,而只需知道需要替换的规则的位置即可。

这是完整的课程方法来源

相关内容