持久 iptables

持久 iptables

我刚刚读到iptables-持久性我完全迷失了设计。我是不是唯一的一个,谁不明白它是怎么运作的,但实际上它似乎远远超出了我的想象。

我想象过类似的事情crontab -e:您编辑一组规则,当编辑器关闭时,它们会被保留并应用。它们被存储某处而我作为用户不知道在哪里。别告诉我;这样就完美了。

有这样的工具吗?为什么要iptables-persistent以这种难以遵循的方式工作?

答案1

一般来说,您可以使用文本编辑器编辑 IPv4 的活动 iptables 规则,方法是使用命令iptables-save将规则写入文件,然后iptables-restore在完成后使用命令重新加载新规则,例如:

user@host:~$ iptables-save > rules.v4
user@host:~$ vim rules.v4
user@host:~$ iptables-restore rules.v4

对于 IPv6,您可以使用类似的命令ip6tables-saveip6tables-restore,即:

user@host:~$ ip6tables-save > rules.v6
user@host:~$ vim rules.v6
user@host:~$ ip6tables-restore rules.v6

iptables-persistent服务在以下位置进行检查:

/etc/iptables/rules.v4
/etc/iptables/rules.v6

因此,要应用您的规则并让它们持续存在,您将遵循与上述相同的步骤,但要编辑文件iptables-persistent,例如:

user@host:~$ iptables-save > /etc/iptables/rules.v4
user@host:~$ vim /etc/iptables/rules.v4
user@host:~$ iptables-restore /etc/iptables/rules.v4

我不知道有什么交互式命令可以像您所描述的那样编辑 iptables 规则,但创建您自己的规则应该很容易。这是一个简单的例子:

#!/usr/bin/env bash

# iptables-e.sh

# Create a temporary file to store the new rules
TEMPFILE=$(mktemp)

# Save the current rules to a file
iptables-save > "${TEMPFILE}"

# Edit the rules interactively with a text editor
"${EDITOR}" "${TEMPFILE}" 

# Try to load the rules and update the persistent rules if no errors occur
iptables-restore "${TEMPFILE}" && cat "${TEMPFILE}" > /etc/iptables/rules.v4

这实际上与工作方式没有太大区别crontab -e,工作方式只是自动将活动的 crontab 保存到/var/spool/cron/crontabs目录中的文件中,这就是导致 crontab 持久存在的原因。有关此主题的进一步讨论,请参阅以下帖子:

您可能还对以下脚本感兴趣:

但我不能保证这一点。我从来没有用过它。这是我通过搜索交互式 iptables 编辑找到的唯一东西。

答案2

为什么不直接制作一个这样的脚本:

#!/bin/bash
...
${YOUR_IPTABLES_RULES}
...

然后每次重新启动机器时启动脚本:

# vim /etc/crontab
@reboot         root         /bin/bash /root/bin/myiptablesrules.sh

这样你也会有持久的规则:)

答案3

您是否尝试过使用 iptables-save 命令?

iptables-save > /path/to/file
ip6tables-save > /path/to/file
iptables-restore < /path/to/file
ip6tables-restore < /path/to/file

您可以手动保存到文件并添加恢复命令以在启动或登录时运行。生成的文件易于人类阅读,并且包含每个条目的等效 iptables 命令。您还可以在重新加载生成的文件之前对其进行编辑。至少我就是这么做的。不确定这是否是最好的方法,但它绝对有效。

相关内容